Utility class for provides optimised functions.  
 More...
#include <OgreOptimisedUtil.h>
|  | 
|  | OptimisedUtil () | 
|  | 
| virtual | ~OptimisedUtil () | 
|  | 
| virtual void | calculateFaceNormals (const float *positions, const v1::EdgeData::Triangle *triangles, Vector4 *faceNormals, size_t numTriangles)=0 | 
|  | Calculate the face normals for the triangles based on position information. 
 | 
|  | 
| virtual void | calculateLightFacing (const Vector4 &lightPos, const Vector4 *faceNormals, char *lightFacings, size_t numFaces)=0 | 
|  | Calculate the light facing state of the triangle's face normals. 
 | 
|  | 
| virtual void | concatenateAffineMatrices (const Matrix4 &baseMatrix, const Matrix4 *srcMatrices, Matrix4 *dstMatrices, size_t numMatrices)=0 | 
|  | Concatenate an affine matrix to an array of affine matrices. 
 | 
|  | 
| virtual void | extrudeVertices (const Vector4 &lightPos, Real extrudeDist, const float *srcPositions, float *destPositions, size_t numVertices)=0 | 
|  | Extruding vertices by a fixed distance based on light position. 
 | 
|  | 
| 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)=0 | 
|  | Performs a software vertex morph, of the kind used for morph animation although it can be used for other purposes. 
 | 
|  | 
| 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)=0 | 
|  | Performs software vertex skinning. 
 | 
|  | 
Utility class for provides optimised functions. 
- Note
- This class are supposed used by internal engine only. 
◆ OptimisedUtil()
  
  | 
        
          | Ogre::OptimisedUtil::OptimisedUtil | ( |  | ) |  |  | inline | 
 
 
◆ ~OptimisedUtil()
  
  | 
        
          | virtual Ogre::OptimisedUtil::~OptimisedUtil | ( |  | ) |  |  | inlinevirtual | 
 
 
◆ calculateFaceNormals()
  
  | 
        
          | virtual void Ogre::OptimisedUtil::calculateFaceNormals | ( | const float * | positions, |  
          |  |  | const v1::EdgeData::Triangle * | triangles, |  
          |  |  | Vector4 * | faceNormals, |  
          |  |  | size_t | numTriangles |  
          |  | ) |  |  |  | pure virtual | 
 
Calculate the face normals for the triangles based on position information. 
- Parameters
- 
  
    | positions | Pointer to position information, which packed in (x, y, z) format, indexing by vertex index in the triangle. No alignment requests. |  | triangles | The triangles need to calculate face normal, the vertex positions is indexed by vertex index to position information. |  | faceNormals | The array of Vector4 used to store triangles face normal, Must be aligned to SIMD alignment. |  | numTriangles | Number of triangles to calculate face normal. |  
 
 
 
◆ calculateLightFacing()
  
  | 
        
          | virtual void Ogre::OptimisedUtil::calculateLightFacing | ( | const Vector4 & | lightPos, |  
          |  |  | const Vector4 * | faceNormals, |  
          |  |  | char * | lightFacings, |  
          |  |  | size_t | numFaces |  
          |  | ) |  |  |  | pure virtual | 
 
Calculate the light facing state of the triangle's face normals. 
- Parameters
- 
  
    | lightPos | 4D position of the light in object space, note that for directional lights (which have no position), the w component is 0 and the x/y/z position are the direction. |  | faceNormals | An array of face normals for the triangles, the face normal are unit vector orthogonal to the triangles, plus distance from origin. This array must be aligned to SIMD alignment. |  | lightFacings | An array of flags for store light facing state results, the result flag is true if corresponding face normal facing the light, false otherwise. This array no alignment requires. |  | numFaces | Number of face normals to calculate. |  
 
 
 
◆ concatenateAffineMatrices()
  
  | 
        
          | virtual void Ogre::OptimisedUtil::concatenateAffineMatrices | ( | const Matrix4 & | baseMatrix, |  
          |  |  | const Matrix4 * | srcMatrices, |  
          |  |  | Matrix4 * | dstMatrices, |  
          |  |  | size_t | numMatrices |  
          |  | ) |  |  |  | pure virtual | 
 
Concatenate an affine matrix to an array of affine matrices. 
- Note
- An affine matrix is a 4x4 matrix with row 3 equal to (0, 0, 0, 1), e.g. no projective coefficients. 
- Parameters
- 
  
    | baseMatrix | The matrix used as first operand. |  | srcMatrices | An array of matrix used as second operand. |  | dstMatrices | An array of matrix to store matrix concatenate results. |  | numMatrices | Number of matrices in the array. |  
 
 
 
◆ extrudeVertices()
  
  | 
        
          | virtual void Ogre::OptimisedUtil::extrudeVertices | ( | const Vector4 & | lightPos, |  
          |  |  | Real | extrudeDist, |  
          |  |  | const float * | srcPositions, |  
          |  |  | float * | destPositions, |  
          |  |  | size_t | numVertices |  
          |  | ) |  |  |  | pure virtual | 
 
Extruding vertices by a fixed distance based on light position. 
- Parameters
- 
  
    | lightPos | 4D light position, when w=0.0f this represents a directional light, otherwise, w must be equal to 1.0f, which represents a point light. |  | extrudeDist | The distance to extrude. |  | srcPositions | Pointer to source vertex's position buffer, which the position is a 3D vector packed in xyz format. No SIMD alignment requirement but loss performance for unaligned data. |  | destPositions | Pointer to destination vertex's position buffer, which the position is a 3D vector packed in xyz format. No SIMD alignment requirement but loss performance for unaligned data. |  | numVertices | Number of vertices need to extruding, which agree with source and destination buffers. |  
 
 
 
◆ getImplementation()
  
  | 
        
          | static OptimisedUtil * Ogre::OptimisedUtil::getImplementation | ( |  | ) |  |  | inlinestatic | 
 
Gets the implementation of this class. 
- Note
- Don't cache the pointer returned by this function, it'll change due run-time environment detection to pick up the best implementation. 
 
 
◆ softwareVertexMorph()
  
  | 
        
          | virtual void Ogre::OptimisedUtil::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 |  
          |  | ) |  |  |  | pure virtual | 
 
Performs a software vertex morph, of the kind used for morph animation although it can be used for other purposes. 
- Parameters
- 
  
    | t | Parametric distance between the start and end positions |  | srcPos1 | Pointer to buffer for the start positions |  | srcPos2 | Pointer to buffer for the end positions |  | dstPos | Pointer to buffer for the destination positions |  | pos1VSize,pos2VSize,dstVSize | Vertex sizes in bytes of each of the 3 buffers referenced |  | numVertices | Number of vertices to morph, which agree with the number in start, end and destination buffer. Bear in mind three floating-point values per vertex |  
 
 
 
◆ softwareVertexSkinning()
  
  | 
        
          | virtual void Ogre::OptimisedUtil::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 |  
          |  | ) |  |  |  | pure virtual | 
 
Performs software vertex skinning. 
- Parameters
- 
  
    | srcPosPtr | Pointer to source position buffer. |  | destPosPtr | Pointer to destination position buffer. |  | srcNormPtr | Pointer to source normal buffer, if NULL, means blend position only. |  | destNormPtr | Pointer to destination normal buffer, it's ignored if srcNormPtr is NULL. |  | blendWeightPtr | Pointer to blend weight buffer. |  | blendIndexPtr | Pointer to blend index buffer. |  | blendMatrices | An array of pointer of blend matrix, the matrix must be aligned to SIMD alignment, but not necessary for the array itself. |  | srcPosStride | The stride of source position in bytes. |  | destPosStride | The stride of destination position in bytes. |  | srcNormStride | The stride of source normal in bytes, it's ignored if srcNormPtr is NULL. |  | destNormStride | The stride of destination normal in bytes, it's ignored if srcNormPtr is NULL. |  | blendWeightStride | The stride of blend weight buffer in bytes. |  | blendIndexStride | The stride of blend index buffer in bytes. |  | numWeightsPerVertex | Number of blend weights per-vertex, as well as for blend indices. |  | numVertices | Number of vertices to blend. |  
 
 
 
The documentation for this class was generated from the following file: