本文整理汇总了C++中OptimisedUtil类的典型用法代码示例。如果您正苦于以下问题:C++ OptimisedUtil类的具体用法?C++ OptimisedUtil怎么用?C++ OptimisedUtil使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了OptimisedUtil类的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: calculateLightFacing
/// @copydoc OptimisedUtil::calculateLightFacing
virtual void calculateLightFacing(
const Vector4& lightPos,
const Vector4* faceNormals,
char* lightFacings,
size_t numFaces)
{
static ProfileItems results;
static size_t index;
index = Root::getSingleton().getNextFrameNumber() % mOptimisedUtils.size();
OptimisedUtil* impl = mOptimisedUtils[index];
ProfileItem& profile = results[index];
profile.begin();
impl->calculateLightFacing(
lightPos,
faceNormals,
lightFacings,
numFaces);
profile.end();
//
// Dagon SkeletonAnimation sample test results (CPU timestamp per-function call):
//
// Pentium 4 3.0G HT Athlon XP 2500+
//
// General 171875 86998
// SSE 47934 63995
//
// You can put break point here while running test application, to
// watch profile results.
++index; // So we can put break point here even if in release build
}
示例2: calculateFaceNormals
/// @copydoc OptimisedUtil::calculateFaceNormals
virtual void calculateFaceNormals(
const float *positions,
const EdgeData::Triangle *triangles,
Vector4 *faceNormals,
size_t numTriangles)
{
static ProfileItems results;
static size_t index;
index = Root::getSingleton().getNextFrameNumber() % mOptimisedUtils.size();
OptimisedUtil* impl = mOptimisedUtils[index];
ProfileItem& profile = results[index];
profile.begin();
impl->calculateFaceNormals(
positions,
triangles,
faceNormals,
numTriangles);
profile.end();
//
// Dagon SkeletonAnimation sample test results (CPU timestamp per-function call):
//
// Pentium 4 3.0G HT Athlon XP 2500+
//
// General 657080 486494
// SSE 223559 399495
//
// You can put break point here while running test application, to
// watch profile results.
++index; // So we can put break point here even if in release build
}
示例3: softwareVertexMorph
virtual void softwareVertexMorph(
Real t,
const float *srcPos1, const float *srcPos2,
float *dstPos,
size_t pos1VSize, size_t pos2VSize, size_t dstVSize,
size_t numVertices,
bool morphNormals)
{
static ProfileItems results;
static size_t index;
index = Root::getSingleton().getNextFrameNumber() % mOptimisedUtils.size();
OptimisedUtil* impl = mOptimisedUtils[index];
ProfileItem& profile = results[index];
profile.begin();
impl->softwareVertexMorph(
t,
srcPos1, srcPos2,
dstPos,
pos1VSize, pos2VSize, dstVSize,
numVertices,
morphNormals);
profile.end();
// You can put break point here while running test application, to
// watch profile results.
++index; // So we can put break point here even if in release build
}
示例4: softwareVertexSkinning
virtual void softwareVertexSkinning(
const float *srcPosPtr, float *destPosPtr,
const float *srcNormPtr, float *destNormPtr,
const float *blendWeightPtr, const unsigned char* blendIndexPtr,
const Matrix4* const* blendMatrices,
size_t srcPosStride, size_t destPosStride,
size_t srcNormStride, size_t destNormStride,
size_t blendWeightStride, size_t blendIndexStride,
size_t numWeightsPerVertex,
size_t numVertices)
{
static ProfileItems results;
static size_t index;
index = Root::getSingleton().getNextFrameNumber() % mOptimisedUtils.size();
OptimisedUtil* impl = mOptimisedUtils[index];
ProfileItem& profile = results[index];
profile.begin();
impl->softwareVertexSkinning(
srcPosPtr, destPosPtr,
srcNormPtr, destNormPtr,
blendWeightPtr, blendIndexPtr,
blendMatrices,
srcPosStride, destPosStride,
srcNormStride, destNormStride,
blendWeightStride, blendIndexStride,
numWeightsPerVertex,
numVertices);
profile.end();
// You can put break point here while running test application, to
// watch profile results.
++index; // So we can put break point here even if in release build
}
示例5: extrudeVertices
virtual void extrudeVertices(
const Vector4& lightPos,
Real extrudeDist,
const float* srcPositions,
float* destPositions,
size_t numVertices)
{
static ProfileItems results;
static size_t index;
index = Root::getSingleton().getNextFrameNumber() % mOptimisedUtils.size();
OptimisedUtil* impl = mOptimisedUtils[index];
ProfileItem& profile = results[index];
profile.begin();
impl->extrudeVertices(
lightPos,
extrudeDist,
srcPositions,
destPositions,
numVertices);
profile.end();
//
// Dagon SkeletonAnimation sample test results (CPU timestamp per-function call):
//
// Pentium 4 3.0G HT Athlon XP 2500+
//
// Directional Light, General 38106 92306
// Directional Light, SSE 27292 67055
//
// Point Light, General 224209 155483
// Point Light, SSE 56817 106663
//
// You can put break point here while running test application, to
// watch profile results.
++index; // So we can put break point here even if in release build
}
示例6: concatenateAffineMatrices
virtual void concatenateAffineMatrices(
const Matrix4& baseMatrix,
const Matrix4* srcMatrices,
Matrix4* dstMatrices,
size_t numMatrices)
{
static ProfileItems results;
static size_t index;
index = Root::getSingleton().getNextFrameNumber() % mOptimisedUtils.size();
OptimisedUtil* impl = mOptimisedUtils[index];
ProfileItem& profile = results[index];
profile.begin();
impl->concatenateAffineMatrices(
baseMatrix,
srcMatrices,
dstMatrices,
numMatrices);
profile.end();
// You can put break point here while running test application, to
// watch profile results.
++index; // So we can put break point here even if in release build
}
示例7: importObject
//.........这里部分代码省略.........
//do not pad the bounding box
ogreMesh->_setBounds(AxisAlignedBox(min, max), false);
ogreMesh->_setBoundingSphereRadius(Math::Sqrt(maxSquaredRadius));
}
else
{
AxisAlignedBox newBox(min, max);
newBox.merge(currBox);
//do not pad the bounding box
ogreMesh->_setBounds(newBox, false);
ogreMesh->_setBoundingSphereRadius(qMax(Math::Sqrt(maxSquaredRadius), currRadius));
}
/*
Create faces
*/
// All children should be submeshes
SubMesh* sm = ogreMesh->createSubMesh();
sm->setMaterialName("clippingMaterial");
sm->operationType = RenderOperation::OT_TRIANGLE_LIST;
sm->useSharedVertices = true;
// tri list
sm->indexData->indexCount = indexCount;
// Allocate space
HardwareIndexBufferSharedPtr ibuf = HardwareBufferManager::getSingleton().
createIndexBuffer(
HardwareIndexBuffer::IT_16BIT,
sm->indexData->indexCount,
HardwareBuffer::HBU_DYNAMIC,
false);
sm->indexData->indexBuffer = ibuf;
unsigned short *pShort = static_cast<unsigned short*>(ibuf->lock(HardwareBuffer::HBL_DISCARD));
QVector<EdgeData::Triangle> triangles(indexCount / 3);
for (int i = 0; i < indexCount / 3; ++i) {
quint16 i1, i2, i3;
stream >> i1 >> i2 >> i3;
*pShort++ = i1;
*pShort++ = i2;
*pShort++ = i3;
triangles[i].vertIndex[0] = i1;
triangles[i].vertIndex[1] = i2;
triangles[i].vertIndex[2] = i3;
}
/* Recalculate the vertex normals */
Vector4 *faceNormals = (Vector4*)_aligned_malloc(sizeof(Vector4) * triangles.size(), 16);
OptimisedUtil *util = OptimisedUtil::getImplementation();
util->calculateFaceNormals(positions.constData(),
triangles.data(),
faceNormals,
indexCount / 3);
// Iterate over all children (vertexbuffer entries)
pVert = pVertStart;
for (int i = 0; i < vertexCount; ++i) {
float *pFloat;
Vector3 normal = Vector3::ZERO;
int count = 0;
/* Search for all faces that use this vertex */
for (int j = 0; j < triangles.size(); ++j) {
if (triangles[j].vertIndex[0] == i
|| triangles[j].vertIndex[1] == i
|| triangles[j].vertIndex[2] == i) {
normal.x += faceNormals[j].x / faceNormals[j].w;
normal.y += faceNormals[j].y / faceNormals[j].w;
normal.z += faceNormals[j].z / faceNormals[j].w;
count++;
}
}
normal.normalise();
/* Copy over the position */
normalElement.baseVertexPointerToElement(pVert, &pFloat);
*(pFloat++) = normal.x;
*(pFloat++) = normal.y;
*(pFloat++) = normal.z;
pVert += vbuf->getVertexSize();
}
_aligned_free(faceNormals);
vbuf->unlock();
ibuf->unlock();
return ogreMesh;
}