| /*!**************************************************************************** | |
| @file PVRTVertex.h | |
| @copyright Copyright (c) Imagination Technologies Limited. | |
| @brief Utility functions which process vertices. | |
| ******************************************************************************/ | |
| #ifndef _PVRTVERTEX_H_ | |
| #define _PVRTVERTEX_H_ | |
| #include "PVRTError.h" | |
| #include "PVRTMatrix.h" | |
| /**************************************************************************** | |
| ** Enumerations | |
| ****************************************************************************/ | |
| enum EPVRTDataType { | |
| EPODDataNone, | |
| EPODDataFloat, | |
| EPODDataInt, | |
| EPODDataUnsignedShort, | |
| EPODDataRGBA, | |
| EPODDataARGB, | |
| EPODDataD3DCOLOR, | |
| EPODDataUBYTE4, | |
| EPODDataDEC3N, | |
| EPODDataFixed16_16, | |
| EPODDataUnsignedByte, | |
| EPODDataShort, | |
| EPODDataShortNorm, | |
| EPODDataByte, | |
| EPODDataByteNorm, | |
| EPODDataUnsignedByteNorm, | |
| EPODDataUnsignedShortNorm, | |
| EPODDataUnsignedInt, | |
| EPODDataABGR | |
| }; | |
| /***************************************************************************** | |
| ** Functions | |
| *****************************************************************************/ | |
| /*!*************************************************************************** | |
| @fn PVRTVertexRead | |
| @param[out] pV | |
| @param[in] pData | |
| @param[in] eType | |
| @param[in] nCnt | |
| @brief Read a vector | |
| *****************************************************************************/ | |
| void PVRTVertexRead( | |
| PVRTVECTOR4f * const pV, | |
| const void * const pData, | |
| const EPVRTDataType eType, | |
| const int nCnt); | |
| /*!*************************************************************************** | |
| @fn PVRTVertexRead | |
| @param[out] pV | |
| @param[in] pData | |
| @param[in] eType | |
| @brief Read an int | |
| *****************************************************************************/ | |
| void PVRTVertexRead( | |
| unsigned int * const pV, | |
| const void * const pData, | |
| const EPVRTDataType eType); | |
| /*!*************************************************************************** | |
| @fn PVRTVertexWrite | |
| @param[out] pOut | |
| @param[in] eType | |
| @param[in] nCnt | |
| @param[in] pV | |
| @brief Write a vector | |
| *****************************************************************************/ | |
| void PVRTVertexWrite( | |
| void * const pOut, | |
| const EPVRTDataType eType, | |
| const int nCnt, | |
| const PVRTVECTOR4f * const pV); | |
| /*!*************************************************************************** | |
| @fn PVRTVertexWrite | |
| @param[out] pOut | |
| @param[in] eType | |
| @param[in] V | |
| @brief Write an int | |
| *****************************************************************************/ | |
| void PVRTVertexWrite( | |
| void * const pOut, | |
| const EPVRTDataType eType, | |
| const unsigned int V); | |
| /*!*************************************************************************** | |
| @fn PVRTVertexTangentBitangent | |
| @param[out] pvTan | |
| @param[out] pvBin | |
| @param[in] pvNor | |
| @param[in] pfPosA | |
| @param[in] pfPosB | |
| @param[in] pfPosC | |
| @param[in] pfTexA | |
| @param[in] pfTexB | |
| @param[in] pfTexC | |
| @brief Calculates the tangent and bitangent vectors for | |
| vertex 'A' of the triangle defined by the 3 supplied | |
| 3D position coordinates (pfPosA) and 2D texture | |
| coordinates (pfTexA). | |
| *****************************************************************************/ | |
| void PVRTVertexTangentBitangent( | |
| PVRTVECTOR3 * const pvTan, | |
| PVRTVECTOR3 * const pvBin, | |
| const PVRTVECTOR3 * const pvNor, | |
| const float * const pfPosA, | |
| const float * const pfPosB, | |
| const float * const pfPosC, | |
| const float * const pfTexA, | |
| const float * const pfTexB, | |
| const float * const pfTexC); | |
| /*!*************************************************************************** | |
| @fn PVRTVertexGenerateTangentSpace | |
| @param[out] pnVtxNumOut Output vertex count | |
| @param[out] pVtxOut Output vertices (program must free() this) | |
| @param[in,out] pui32Idx input AND output; index array for triangle list | |
| @param[in] nVtxNum Input vertex count | |
| @param[in] pVtx Input vertices | |
| @param[in] nStride Size of a vertex (in bytes) | |
| @param[in] nOffsetPos Offset in bytes to the vertex position | |
| @param[in] eTypePos Data type of the position | |
| @param[in] nOffsetNor Offset in bytes to the vertex normal | |
| @param[in] eTypeNor Data type of the normal | |
| @param[in] nOffsetTex Offset in bytes to the vertex texture coordinate to use | |
| @param[in] eTypeTex Data type of the texture coordinate | |
| @param[in] nOffsetTan Offset in bytes to the vertex tangent | |
| @param[in] eTypeTan Data type of the tangent | |
| @param[in] nOffsetBin Offset in bytes to the vertex bitangent | |
| @param[in] eTypeBin Data type of the bitangent | |
| @param[in] nTriNum Number of triangles | |
| @param[in] fSplitDifference Split a vertex if the DP3 of tangents/bitangents are below this (range -1..1) | |
| @return PVR_FAIL if there was a problem. | |
| @brief Calculates the tangent space for all supplied vertices. | |
| Writes tangent and bitangent vectors to the output | |
| vertices, copies all other elements from input vertices. | |
| Will split vertices if necessary - i.e. if two triangles | |
| sharing a vertex want to assign it different | |
| tangent-space matrices. The decision whether to split | |
| uses fSplitDifference - of the DP3 of two desired | |
| tangents or two desired bitangents is higher than this, | |
| the vertex will be split. | |
| *****************************************************************************/ | |
| EPVRTError PVRTVertexGenerateTangentSpace( | |
| unsigned int * const pnVtxNumOut, | |
| char ** const pVtxOut, | |
| unsigned int * const pui32Idx, | |
| const unsigned int nVtxNum, | |
| const char * const pVtx, | |
| const unsigned int nStride, | |
| const unsigned int nOffsetPos, | |
| EPVRTDataType eTypePos, | |
| const unsigned int nOffsetNor, | |
| EPVRTDataType eTypeNor, | |
| const unsigned int nOffsetTex, | |
| EPVRTDataType eTypeTex, | |
| const unsigned int nOffsetTan, | |
| EPVRTDataType eTypeTan, | |
| const unsigned int nOffsetBin, | |
| EPVRTDataType eTypeBin, | |
| const unsigned int nTriNum, | |
| const float fSplitDifference); | |
| #endif /* _PVRTVERTEX_H_ */ | |
| /***************************************************************************** | |
| End of file (PVRTVertex.h) | |
| *****************************************************************************/ | |