diff options
Diffstat (limited to 'src/3rdparty/assimp/code/OgreBinarySerializer.h')
-rw-r--r-- | src/3rdparty/assimp/code/OgreBinarySerializer.h | 693 |
1 files changed, 349 insertions, 344 deletions
diff --git a/src/3rdparty/assimp/code/OgreBinarySerializer.h b/src/3rdparty/assimp/code/OgreBinarySerializer.h index 69db4b722..067e36a63 100644 --- a/src/3rdparty/assimp/code/OgreBinarySerializer.h +++ b/src/3rdparty/assimp/code/OgreBinarySerializer.h @@ -2,11 +2,11 @@ Open Asset Import Library (assimp) ---------------------------------------------------------------------- -Copyright (c) 2006-2012, assimp team +Copyright (c) 2006-2016, assimp team All rights reserved. -Redistribution and use of this software in source and binary forms, -with or without modification, are permitted provided that the +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above @@ -23,16 +23,16 @@ following conditions are met: derived from this software without specific prior written permission of the assimp team. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- @@ -44,6 +44,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER #include "OgreStructs.h" +#include "StreamReader.h" namespace Assimp { @@ -51,364 +52,368 @@ namespace Ogre { typedef Assimp::StreamReaderLE MemoryStreamReader; -typedef boost::shared_ptr<MemoryStreamReader> MemoryStreamReaderPtr; +typedef std::shared_ptr<MemoryStreamReader> MemoryStreamReaderPtr; class OgreBinarySerializer { public: - /// Imports mesh and returns the result. - /** @note Fatal unrecoverable errors will throw a DeadlyImportError. */ - static Mesh *ImportMesh(MemoryStreamReader *reader); + /// Imports mesh and returns the result. + /** @note Fatal unrecoverable errors will throw a DeadlyImportError. */ + static Mesh *ImportMesh(MemoryStreamReader *reader); - /// Imports skeleton to @c mesh into Mesh::skeleton. - /** If mesh does not have a skeleton reference or the skeleton file - cannot be found it is not a fatal DeadlyImportError. - @return If skeleton import was successful. */ - static bool ImportSkeleton(Assimp::IOSystem *pIOHandler, Mesh *mesh); - static bool ImportSkeleton(Assimp::IOSystem *pIOHandler, MeshXml *mesh); + /// Imports skeleton to @c mesh into Mesh::skeleton. + /** If mesh does not have a skeleton reference or the skeleton file + cannot be found it is not a fatal DeadlyImportError. + @return If skeleton import was successful. */ + static bool ImportSkeleton(Assimp::IOSystem *pIOHandler, Mesh *mesh); + static bool ImportSkeleton(Assimp::IOSystem *pIOHandler, MeshXml *mesh); private: - enum AssetMode - { - AM_Mesh, - AM_Skeleton - }; - - OgreBinarySerializer(MemoryStreamReader *reader, AssetMode mode) : - m_reader(reader), - m_currentLen(0), - assetMode(mode) - { - } - - static MemoryStreamReaderPtr OpenReader(Assimp::IOSystem *pIOHandler, const std::string &filename); - - // Header - - uint16_t ReadHeader(bool readLen = true); - void RollbackHeader(); - - // Mesh - - void ReadMesh(Mesh *mesh); - void ReadMeshLodInfo(Mesh *mesh); - void ReadMeshSkeletonLink(Mesh *mesh); - void ReadMeshBounds(Mesh *mesh); - void ReadMeshExtremes(Mesh *mesh); - - void ReadSubMesh(Mesh *mesh); - void ReadSubMeshNames(Mesh *mesh); - void ReadSubMeshOperation(SubMesh *submesh); - void ReadSubMeshTextureAlias(SubMesh *submesh); - - void ReadBoneAssignment(VertexData *dest); - - void ReadGeometry(VertexData *dest); - void ReadGeometryVertexDeclaration(VertexData *dest); - void ReadGeometryVertexElement(VertexData *dest); - void ReadGeometryVertexBuffer(VertexData *dest); - - void ReadEdgeList(Mesh *mesh); - void ReadPoses(Mesh *mesh); - void ReadPoseVertices(Pose *pose); - - void ReadAnimations(Mesh *mesh); - void ReadAnimation(Animation *anim); - void ReadAnimationKeyFrames(Animation *anim, VertexAnimationTrack *track); - - void NormalizeBoneWeights(VertexData *vertexData) const; - - // Skeleton - - void ReadSkeleton(Skeleton *skeleton); - - void ReadBone(Skeleton *skeleton); - void ReadBoneParent(Skeleton *skeleton); - - void ReadSkeletonAnimation(Skeleton *skeleton); - void ReadSkeletonAnimationTrack(Skeleton *skeleton, Animation *dest); - void ReadSkeletonAnimationKeyFrame(VertexAnimationTrack *dest); - void ReadSkeletonAnimationLink(Skeleton *skeleton); - - // Reader utils - bool AtEnd() const; - - template<typename T> - inline T Read(); - - void ReadBytes(char *dest, size_t numBytes); - void ReadBytes(uint8_t *dest, size_t numBytes); - void ReadBytes(void *dest, size_t numBytes); - uint8_t *ReadBytes(size_t numBytes); - - void ReadVector(aiVector3D &vec); - void ReadQuaternion(aiQuaternion &quat); - - std::string ReadString(size_t len); - std::string ReadLine(); - - void SkipBytes(size_t numBytes); - - uint32_t m_currentLen; - MemoryStreamReader *m_reader; - - AssetMode assetMode; + enum AssetMode + { + AM_Mesh, + AM_Skeleton + }; + + OgreBinarySerializer(MemoryStreamReader *reader, AssetMode mode) : + m_currentLen(0), + m_reader(reader), + assetMode(mode) + { + } + + static MemoryStreamReaderPtr OpenReader(Assimp::IOSystem *pIOHandler, const std::string &filename); + + // Header + + uint16_t ReadHeader(bool readLen = true); + void RollbackHeader(); + + // Mesh + + void ReadMesh(Mesh *mesh); + void ReadMeshLodInfo(Mesh *mesh); + void ReadMeshSkeletonLink(Mesh *mesh); + void ReadMeshBounds(Mesh *mesh); + void ReadMeshExtremes(Mesh *mesh); + + void ReadSubMesh(Mesh *mesh); + void ReadSubMeshNames(Mesh *mesh); + void ReadSubMeshOperation(SubMesh *submesh); + void ReadSubMeshTextureAlias(SubMesh *submesh); + + void ReadBoneAssignment(VertexData *dest); + + void ReadGeometry(VertexData *dest); + void ReadGeometryVertexDeclaration(VertexData *dest); + void ReadGeometryVertexElement(VertexData *dest); + void ReadGeometryVertexBuffer(VertexData *dest); + + void ReadEdgeList(Mesh *mesh); + void ReadPoses(Mesh *mesh); + void ReadPoseVertices(Pose *pose); + + void ReadAnimations(Mesh *mesh); + void ReadAnimation(Animation *anim); + void ReadAnimationKeyFrames(Animation *anim, VertexAnimationTrack *track); + + void NormalizeBoneWeights(VertexData *vertexData) const; + + // Skeleton + + void ReadSkeleton(Skeleton *skeleton); + + void ReadBone(Skeleton *skeleton); + void ReadBoneParent(Skeleton *skeleton); + + void ReadSkeletonAnimation(Skeleton *skeleton); + void ReadSkeletonAnimationTrack(Skeleton *skeleton, Animation *dest); + void ReadSkeletonAnimationKeyFrame(VertexAnimationTrack *dest); + void ReadSkeletonAnimationLink(Skeleton *skeleton); + + // Reader utils + bool AtEnd() const; + + template<typename T> + inline T Read(); + + void ReadBytes(char *dest, size_t numBytes); + void ReadBytes(uint8_t *dest, size_t numBytes); + void ReadBytes(void *dest, size_t numBytes); + uint8_t *ReadBytes(size_t numBytes); + + void ReadVector(aiVector3D &vec); + void ReadQuaternion(aiQuaternion &quat); + + std::string ReadString(size_t len); + std::string ReadLine(); + + void SkipBytes(size_t numBytes); + + uint32_t m_currentLen; + MemoryStreamReader *m_reader; + + AssetMode assetMode; }; enum MeshChunkId { - M_HEADER = 0x1000, - // char* version : Version number check - M_MESH = 0x3000, - // bool skeletallyAnimated // important flag which affects h/w buffer policies - // Optional M_GEOMETRY chunk - M_SUBMESH = 0x4000, - // char* materialName - // bool useSharedVertices - // unsigned int indexCount - // bool indexes32Bit - // unsigned int* faceVertexIndices (indexCount) - // OR - // unsigned short* faceVertexIndices (indexCount) - // M_GEOMETRY chunk (Optional: present only if useSharedVertices = false) - M_SUBMESH_OPERATION = 0x4010, // optional, trilist assumed if missing - // unsigned short operationType - M_SUBMESH_BONE_ASSIGNMENT = 0x4100, - // Optional bone weights (repeating section) - // unsigned int vertexIndex; - // unsigned short boneIndex; - // float weight; - // Optional chunk that matches a texture name to an alias - // a texture alias is sent to the submesh material to use this texture name - // instead of the one in the texture unit with a matching alias name - M_SUBMESH_TEXTURE_ALIAS = 0x4200, // Repeating section - // char* aliasName; - // char* textureName; - - M_GEOMETRY = 0x5000, // NB this chunk is embedded within M_MESH and M_SUBMESH - // unsigned int vertexCount - M_GEOMETRY_VERTEX_DECLARATION = 0x5100, - M_GEOMETRY_VERTEX_ELEMENT = 0x5110, // Repeating section - // unsigned short source; // buffer bind source - // unsigned short type; // VertexElementType - // unsigned short semantic; // VertexElementSemantic - // unsigned short offset; // start offset in buffer in bytes - // unsigned short index; // index of the semantic (for colours and texture coords) - M_GEOMETRY_VERTEX_BUFFER = 0x5200, // Repeating section - // unsigned short bindIndex; // Index to bind this buffer to - // unsigned short vertexSize; // Per-vertex size, must agree with declaration at this index - M_GEOMETRY_VERTEX_BUFFER_DATA = 0x5210, - // raw buffer data - M_MESH_SKELETON_LINK = 0x6000, - // Optional link to skeleton - // char* skeletonName : name of .skeleton to use - M_MESH_BONE_ASSIGNMENT = 0x7000, - // Optional bone weights (repeating section) - // unsigned int vertexIndex; - // unsigned short boneIndex; - // float weight; - M_MESH_LOD = 0x8000, - // Optional LOD information - // string strategyName; - // unsigned short numLevels; - // bool manual; (true for manual alternate meshes, false for generated) - M_MESH_LOD_USAGE = 0x8100, - // Repeating section, ordered in increasing depth - // NB LOD 0 (full detail from 0 depth) is omitted - // LOD value - this is a distance, a pixel count etc, based on strategy - // float lodValue; - M_MESH_LOD_MANUAL = 0x8110, - // Required if M_MESH_LOD section manual = true - // String manualMeshName; - M_MESH_LOD_GENERATED = 0x8120, - // Required if M_MESH_LOD section manual = false - // Repeating section (1 per submesh) - // unsigned int indexCount; - // bool indexes32Bit - // unsigned short* faceIndexes; (indexCount) - // OR - // unsigned int* faceIndexes; (indexCount) - M_MESH_BOUNDS = 0x9000, - // float minx, miny, minz - // float maxx, maxy, maxz - // float radius - - // Added By DrEvil - // optional chunk that contains a table of submesh indexes and the names of - // the sub-meshes. - M_SUBMESH_NAME_TABLE = 0xA000, - // Subchunks of the name table. Each chunk contains an index & string - M_SUBMESH_NAME_TABLE_ELEMENT = 0xA100, - // short index - // char* name - // Optional chunk which stores precomputed edge data - M_EDGE_LISTS = 0xB000, - // Each LOD has a separate edge list - M_EDGE_LIST_LOD = 0xB100, - // unsigned short lodIndex - // bool isManual // If manual, no edge data here, loaded from manual mesh - // bool isClosed - // unsigned long numTriangles - // unsigned long numEdgeGroups - // Triangle* triangleList - // unsigned long indexSet - // unsigned long vertexSet - // unsigned long vertIndex[3] - // unsigned long sharedVertIndex[3] - // float normal[4] - - M_EDGE_GROUP = 0xB110, - // unsigned long vertexSet - // unsigned long triStart - // unsigned long triCount - // unsigned long numEdges - // Edge* edgeList - // unsigned long triIndex[2] - // unsigned long vertIndex[2] - // unsigned long sharedVertIndex[2] - // bool degenerate - // Optional poses section, referred to by pose keyframes - M_POSES = 0xC000, - M_POSE = 0xC100, - // char* name (may be blank) - // unsigned short target // 0 for shared geometry, - // 1+ for submesh index + 1 - // bool includesNormals [1.8+] - M_POSE_VERTEX = 0xC111, - // unsigned long vertexIndex - // float xoffset, yoffset, zoffset - // float xnormal, ynormal, znormal (optional, 1.8+) - // Optional vertex animation chunk - M_ANIMATIONS = 0xD000, - M_ANIMATION = 0xD100, - // char* name - // float length - M_ANIMATION_BASEINFO = 0xD105, - // [Optional] base keyframe information (pose animation only) - // char* baseAnimationName (blank for self) - // float baseKeyFrameTime - M_ANIMATION_TRACK = 0xD110, - // unsigned short type // 1 == morph, 2 == pose - // unsigned short target // 0 for shared geometry, - // 1+ for submesh index + 1 - M_ANIMATION_MORPH_KEYFRAME = 0xD111, - // float time - // bool includesNormals [1.8+] - // float x,y,z // repeat by number of vertices in original geometry - M_ANIMATION_POSE_KEYFRAME = 0xD112, - // float time - M_ANIMATION_POSE_REF = 0xD113, // repeat for number of referenced poses - // unsigned short poseIndex - // float influence - // Optional submesh extreme vertex list chink - M_TABLE_EXTREMES = 0xE000, - // unsigned short submesh_index; - // float extremes [n_extremes][3]; + M_HEADER = 0x1000, + // char* version : Version number check + M_MESH = 0x3000, + // bool skeletallyAnimated // important flag which affects h/w buffer policies + // Optional M_GEOMETRY chunk + M_SUBMESH = 0x4000, + // char* materialName + // bool useSharedVertices + // unsigned int indexCount + // bool indexes32Bit + // unsigned int* faceVertexIndices (indexCount) + // OR + // unsigned short* faceVertexIndices (indexCount) + // M_GEOMETRY chunk (Optional: present only if useSharedVertices = false) + M_SUBMESH_OPERATION = 0x4010, // optional, trilist assumed if missing + // unsigned short operationType + M_SUBMESH_BONE_ASSIGNMENT = 0x4100, + // Optional bone weights (repeating section) + // unsigned int vertexIndex; + // unsigned short boneIndex; + // float weight; + // Optional chunk that matches a texture name to an alias + // a texture alias is sent to the submesh material to use this texture name + // instead of the one in the texture unit with a matching alias name + M_SUBMESH_TEXTURE_ALIAS = 0x4200, // Repeating section + // char* aliasName; + // char* textureName; + + M_GEOMETRY = 0x5000, // NB this chunk is embedded within M_MESH and M_SUBMESH + // unsigned int vertexCount + M_GEOMETRY_VERTEX_DECLARATION = 0x5100, + M_GEOMETRY_VERTEX_ELEMENT = 0x5110, // Repeating section + // unsigned short source; // buffer bind source + // unsigned short type; // VertexElementType + // unsigned short semantic; // VertexElementSemantic + // unsigned short offset; // start offset in buffer in bytes + // unsigned short index; // index of the semantic (for colours and texture coords) + M_GEOMETRY_VERTEX_BUFFER = 0x5200, // Repeating section + // unsigned short bindIndex; // Index to bind this buffer to + // unsigned short vertexSize; // Per-vertex size, must agree with declaration at this index + M_GEOMETRY_VERTEX_BUFFER_DATA = 0x5210, + // raw buffer data + M_MESH_SKELETON_LINK = 0x6000, + // Optional link to skeleton + // char* skeletonName : name of .skeleton to use + M_MESH_BONE_ASSIGNMENT = 0x7000, + // Optional bone weights (repeating section) + // unsigned int vertexIndex; + // unsigned short boneIndex; + // float weight; + M_MESH_LOD = 0x8000, + // Optional LOD information + // string strategyName; + // unsigned short numLevels; + // bool manual; (true for manual alternate meshes, false for generated) + M_MESH_LOD_USAGE = 0x8100, + // Repeating section, ordered in increasing depth + // NB LOD 0 (full detail from 0 depth) is omitted + // LOD value - this is a distance, a pixel count etc, based on strategy + // float lodValue; + M_MESH_LOD_MANUAL = 0x8110, + // Required if M_MESH_LOD section manual = true + // String manualMeshName; + M_MESH_LOD_GENERATED = 0x8120, + // Required if M_MESH_LOD section manual = false + // Repeating section (1 per submesh) + // unsigned int indexCount; + // bool indexes32Bit + // unsigned short* faceIndexes; (indexCount) + // OR + // unsigned int* faceIndexes; (indexCount) + M_MESH_BOUNDS = 0x9000, + // float minx, miny, minz + // float maxx, maxy, maxz + // float radius + + // Added By DrEvil + // optional chunk that contains a table of submesh indexes and the names of + // the sub-meshes. + M_SUBMESH_NAME_TABLE = 0xA000, + // Subchunks of the name table. Each chunk contains an index & string + M_SUBMESH_NAME_TABLE_ELEMENT = 0xA100, + // short index + // char* name + // Optional chunk which stores precomputed edge data + M_EDGE_LISTS = 0xB000, + // Each LOD has a separate edge list + M_EDGE_LIST_LOD = 0xB100, + // unsigned short lodIndex + // bool isManual // If manual, no edge data here, loaded from manual mesh + // bool isClosed + // unsigned long numTriangles + // unsigned long numEdgeGroups + // Triangle* triangleList + // unsigned long indexSet + // unsigned long vertexSet + // unsigned long vertIndex[3] + // unsigned long sharedVertIndex[3] + // float normal[4] + + M_EDGE_GROUP = 0xB110, + // unsigned long vertexSet + // unsigned long triStart + // unsigned long triCount + // unsigned long numEdges + // Edge* edgeList + // unsigned long triIndex[2] + // unsigned long vertIndex[2] + // unsigned long sharedVertIndex[2] + // bool degenerate + // Optional poses section, referred to by pose keyframes + M_POSES = 0xC000, + M_POSE = 0xC100, + // char* name (may be blank) + // unsigned short target // 0 for shared geometry, + // 1+ for submesh index + 1 + // bool includesNormals [1.8+] + M_POSE_VERTEX = 0xC111, + // unsigned long vertexIndex + // float xoffset, yoffset, zoffset + // float xnormal, ynormal, znormal (optional, 1.8+) + // Optional vertex animation chunk + M_ANIMATIONS = 0xD000, + M_ANIMATION = 0xD100, + // char* name + // float length + M_ANIMATION_BASEINFO = 0xD105, + // [Optional] base keyframe information (pose animation only) + // char* baseAnimationName (blank for self) + // float baseKeyFrameTime + M_ANIMATION_TRACK = 0xD110, + // unsigned short type // 1 == morph, 2 == pose + // unsigned short target // 0 for shared geometry, + // 1+ for submesh index + 1 + M_ANIMATION_MORPH_KEYFRAME = 0xD111, + // float time + // bool includesNormals [1.8+] + // float x,y,z // repeat by number of vertices in original geometry + M_ANIMATION_POSE_KEYFRAME = 0xD112, + // float time + M_ANIMATION_POSE_REF = 0xD113, // repeat for number of referenced poses + // unsigned short poseIndex + // float influence + // Optional submesh extreme vertex list chink + M_TABLE_EXTREMES = 0xE000 + // unsigned short submesh_index; + // float extremes [n_extremes][3]; }; +/* static std::string MeshHeaderToString(MeshChunkId id) { - switch(id) - { - case M_HEADER: return "HEADER"; - case M_MESH: return "MESH"; - case M_SUBMESH: return "SUBMESH"; - case M_SUBMESH_OPERATION: return "SUBMESH_OPERATION"; - case M_SUBMESH_BONE_ASSIGNMENT: return "SUBMESH_BONE_ASSIGNMENT"; - case M_SUBMESH_TEXTURE_ALIAS: return "SUBMESH_TEXTURE_ALIAS"; - case M_GEOMETRY: return "GEOMETRY"; - case M_GEOMETRY_VERTEX_DECLARATION: return "GEOMETRY_VERTEX_DECLARATION"; - case M_GEOMETRY_VERTEX_ELEMENT: return "GEOMETRY_VERTEX_ELEMENT"; - case M_GEOMETRY_VERTEX_BUFFER: return "GEOMETRY_VERTEX_BUFFER"; - case M_GEOMETRY_VERTEX_BUFFER_DATA: return "GEOMETRY_VERTEX_BUFFER_DATA"; - case M_MESH_SKELETON_LINK: return "MESH_SKELETON_LINK"; - case M_MESH_BONE_ASSIGNMENT: return "MESH_BONE_ASSIGNMENT"; - case M_MESH_LOD: return "MESH_LOD"; - case M_MESH_LOD_USAGE: return "MESH_LOD_USAGE"; - case M_MESH_LOD_MANUAL: return "MESH_LOD_MANUAL"; - case M_MESH_LOD_GENERATED: return "MESH_LOD_GENERATED"; - case M_MESH_BOUNDS: return "MESH_BOUNDS"; - case M_SUBMESH_NAME_TABLE: return "SUBMESH_NAME_TABLE"; - case M_SUBMESH_NAME_TABLE_ELEMENT: return "SUBMESH_NAME_TABLE_ELEMENT"; - case M_EDGE_LISTS: return "EDGE_LISTS"; - case M_EDGE_LIST_LOD: return "EDGE_LIST_LOD"; - case M_EDGE_GROUP: return "EDGE_GROUP"; - case M_POSES: return "POSES"; - case M_POSE: return "POSE"; - case M_POSE_VERTEX: return "POSE_VERTEX"; - case M_ANIMATIONS: return "ANIMATIONS"; - case M_ANIMATION: return "ANIMATION"; - case M_ANIMATION_BASEINFO: return "ANIMATION_BASEINFO"; - case M_ANIMATION_TRACK: return "ANIMATION_TRACK"; - case M_ANIMATION_MORPH_KEYFRAME: return "ANIMATION_MORPH_KEYFRAME"; - case M_ANIMATION_POSE_KEYFRAME: return "ANIMATION_POSE_KEYFRAME"; - case M_ANIMATION_POSE_REF: return "ANIMATION_POSE_REF"; - case M_TABLE_EXTREMES: return "TABLE_EXTREMES"; - } - return "Unknown_MeshChunkId"; + switch(id) + { + case M_HEADER: return "HEADER"; + case M_MESH: return "MESH"; + case M_SUBMESH: return "SUBMESH"; + case M_SUBMESH_OPERATION: return "SUBMESH_OPERATION"; + case M_SUBMESH_BONE_ASSIGNMENT: return "SUBMESH_BONE_ASSIGNMENT"; + case M_SUBMESH_TEXTURE_ALIAS: return "SUBMESH_TEXTURE_ALIAS"; + case M_GEOMETRY: return "GEOMETRY"; + case M_GEOMETRY_VERTEX_DECLARATION: return "GEOMETRY_VERTEX_DECLARATION"; + case M_GEOMETRY_VERTEX_ELEMENT: return "GEOMETRY_VERTEX_ELEMENT"; + case M_GEOMETRY_VERTEX_BUFFER: return "GEOMETRY_VERTEX_BUFFER"; + case M_GEOMETRY_VERTEX_BUFFER_DATA: return "GEOMETRY_VERTEX_BUFFER_DATA"; + case M_MESH_SKELETON_LINK: return "MESH_SKELETON_LINK"; + case M_MESH_BONE_ASSIGNMENT: return "MESH_BONE_ASSIGNMENT"; + case M_MESH_LOD: return "MESH_LOD"; + case M_MESH_LOD_USAGE: return "MESH_LOD_USAGE"; + case M_MESH_LOD_MANUAL: return "MESH_LOD_MANUAL"; + case M_MESH_LOD_GENERATED: return "MESH_LOD_GENERATED"; + case M_MESH_BOUNDS: return "MESH_BOUNDS"; + case M_SUBMESH_NAME_TABLE: return "SUBMESH_NAME_TABLE"; + case M_SUBMESH_NAME_TABLE_ELEMENT: return "SUBMESH_NAME_TABLE_ELEMENT"; + case M_EDGE_LISTS: return "EDGE_LISTS"; + case M_EDGE_LIST_LOD: return "EDGE_LIST_LOD"; + case M_EDGE_GROUP: return "EDGE_GROUP"; + case M_POSES: return "POSES"; + case M_POSE: return "POSE"; + case M_POSE_VERTEX: return "POSE_VERTEX"; + case M_ANIMATIONS: return "ANIMATIONS"; + case M_ANIMATION: return "ANIMATION"; + case M_ANIMATION_BASEINFO: return "ANIMATION_BASEINFO"; + case M_ANIMATION_TRACK: return "ANIMATION_TRACK"; + case M_ANIMATION_MORPH_KEYFRAME: return "ANIMATION_MORPH_KEYFRAME"; + case M_ANIMATION_POSE_KEYFRAME: return "ANIMATION_POSE_KEYFRAME"; + case M_ANIMATION_POSE_REF: return "ANIMATION_POSE_REF"; + case M_TABLE_EXTREMES: return "TABLE_EXTREMES"; + } + return "Unknown_MeshChunkId"; } +*/ enum SkeletonChunkId { - SKELETON_HEADER = 0x1000, - // char* version : Version number check - SKELETON_BLENDMODE = 0x1010, // optional - // unsigned short blendmode : SkeletonAnimationBlendMode - SKELETON_BONE = 0x2000, - // Repeating section defining each bone in the system. - // Bones are assigned indexes automatically based on their order of declaration - // starting with 0. - // char* name : name of the bone - // unsigned short handle : handle of the bone, should be contiguous & start at 0 - // Vector3 position : position of this bone relative to parent - // Quaternion orientation : orientation of this bone relative to parent - // Vector3 scale : scale of this bone relative to parent - SKELETON_BONE_PARENT = 0x3000, - // Record of the parent of a single bone, used to build the node tree - // Repeating section, listed in Bone Index order, one per Bone - // unsigned short handle : child bone - // unsigned short parentHandle : parent bone - SKELETON_ANIMATION = 0x4000, - // A single animation for this skeleton - // char* name : Name of the animation - // float length : Length of the animation in seconds - SKELETON_ANIMATION_BASEINFO = 0x4010, - // [Optional] base keyframe information - // char* baseAnimationName (blank for self) - // float baseKeyFrameTime - SKELETON_ANIMATION_TRACK = 0x4100, - // A single animation track (relates to a single bone) - // Repeating section (within SKELETON_ANIMATION) - // unsigned short boneIndex : Index of bone to apply to - SKELETON_ANIMATION_TRACK_KEYFRAME = 0x4110, - // A single keyframe within the track - // Repeating section - // float time : The time position (seconds) - // Quaternion rotate : Rotation to apply at this keyframe - // Vector3 translate : Translation to apply at this keyframe - // Vector3 scale : Scale to apply at this keyframe - SKELETON_ANIMATION_LINK = 0x5000 - // Link to another skeleton, to re-use its animations - // char* skeletonName : name of skeleton to get animations from - // float scale : scale to apply to trans/scale keys + SKELETON_HEADER = 0x1000, + // char* version : Version number check + SKELETON_BLENDMODE = 0x1010, // optional + // unsigned short blendmode : SkeletonAnimationBlendMode + SKELETON_BONE = 0x2000, + // Repeating section defining each bone in the system. + // Bones are assigned indexes automatically based on their order of declaration + // starting with 0. + // char* name : name of the bone + // unsigned short handle : handle of the bone, should be contiguous & start at 0 + // Vector3 position : position of this bone relative to parent + // Quaternion orientation : orientation of this bone relative to parent + // Vector3 scale : scale of this bone relative to parent + SKELETON_BONE_PARENT = 0x3000, + // Record of the parent of a single bone, used to build the node tree + // Repeating section, listed in Bone Index order, one per Bone + // unsigned short handle : child bone + // unsigned short parentHandle : parent bone + SKELETON_ANIMATION = 0x4000, + // A single animation for this skeleton + // char* name : Name of the animation + // float length : Length of the animation in seconds + SKELETON_ANIMATION_BASEINFO = 0x4010, + // [Optional] base keyframe information + // char* baseAnimationName (blank for self) + // float baseKeyFrameTime + SKELETON_ANIMATION_TRACK = 0x4100, + // A single animation track (relates to a single bone) + // Repeating section (within SKELETON_ANIMATION) + // unsigned short boneIndex : Index of bone to apply to + SKELETON_ANIMATION_TRACK_KEYFRAME = 0x4110, + // A single keyframe within the track + // Repeating section + // float time : The time position (seconds) + // Quaternion rotate : Rotation to apply at this keyframe + // Vector3 translate : Translation to apply at this keyframe + // Vector3 scale : Scale to apply at this keyframe + SKELETON_ANIMATION_LINK = 0x5000 + // Link to another skeleton, to re-use its animations + // char* skeletonName : name of skeleton to get animations from + // float scale : scale to apply to trans/scale keys }; +/* static std::string SkeletonHeaderToString(SkeletonChunkId id) { - switch(id) - { - case SKELETON_HEADER: return "HEADER"; - case SKELETON_BLENDMODE: return "BLENDMODE"; - case SKELETON_BONE: return "BONE"; - case SKELETON_BONE_PARENT: return "BONE_PARENT"; - case SKELETON_ANIMATION: return "ANIMATION"; - case SKELETON_ANIMATION_BASEINFO: return "ANIMATION_BASEINFO"; - case SKELETON_ANIMATION_TRACK: return "ANIMATION_TRACK"; - case SKELETON_ANIMATION_TRACK_KEYFRAME: return "ANIMATION_TRACK_KEYFRAME"; - case SKELETON_ANIMATION_LINK: return "ANIMATION_LINK"; - } - return "Unknown_SkeletonChunkId"; + switch(id) + { + case SKELETON_HEADER: return "HEADER"; + case SKELETON_BLENDMODE: return "BLENDMODE"; + case SKELETON_BONE: return "BONE"; + case SKELETON_BONE_PARENT: return "BONE_PARENT"; + case SKELETON_ANIMATION: return "ANIMATION"; + case SKELETON_ANIMATION_BASEINFO: return "ANIMATION_BASEINFO"; + case SKELETON_ANIMATION_TRACK: return "ANIMATION_TRACK"; + case SKELETON_ANIMATION_TRACK_KEYFRAME: return "ANIMATION_TRACK_KEYFRAME"; + case SKELETON_ANIMATION_LINK: return "ANIMATION_LINK"; + } + return "Unknown_SkeletonChunkId"; } +*/ } // Ogre } // Assimp |