diff options
Diffstat (limited to 'src/3rdparty/assimp/code/AssbinExporter.cpp')
-rw-r--r-- | src/3rdparty/assimp/code/AssbinExporter.cpp | 66 |
1 files changed, 60 insertions, 6 deletions
diff --git a/src/3rdparty/assimp/code/AssbinExporter.cpp b/src/3rdparty/assimp/code/AssbinExporter.cpp index 9240d3739..bcac2e08f 100644 --- a/src/3rdparty/assimp/code/AssbinExporter.cpp +++ b/src/3rdparty/assimp/code/AssbinExporter.cpp @@ -2,7 +2,8 @@ Open Asset Import Library (assimp) ---------------------------------------------------------------------- -Copyright (c) 2006-2016, assimp team +Copyright (c) 2006-2017, assimp team + All rights reserved. Redistribution and use of this software in source and binary forms, @@ -141,6 +142,17 @@ inline size_t Write<aiVector3D>(IOStream * stream, const aiVector3D& v) // ----------------------------------------------------------------------------------- // Serialize a color value template <> +inline size_t Write<aiColor3D>(IOStream * stream, const aiColor3D& v) +{ + size_t t = Write<float>(stream,v.r); + t += Write<float>(stream,v.g); + t += Write<float>(stream,v.b); + return t; +} + +// ----------------------------------------------------------------------------------- +// Serialize a color value +template <> inline size_t Write<aiColor4D>(IOStream * stream, const aiColor4D& v) { size_t t = Write<float>(stream,v.r); @@ -159,6 +171,7 @@ inline size_t Write<aiQuaternion>(IOStream * stream, const aiQuaternion& v) t += Write<float>(stream,v.x); t += Write<float>(stream,v.y); t += Write<float>(stream,v.z); + ai_assert(t == 16); return 16; } @@ -324,10 +337,13 @@ inline size_t WriteArray(IOStream * stream, const T* in, unsigned int size) { AssbinChunkWriter chunk( container, ASSBIN_CHUNK_AINODE ); + unsigned int nb_metadata = (node->mMetaData != NULL ? node->mMetaData->mNumProperties : 0); + Write<aiString>(&chunk,node->mName); Write<aiMatrix4x4>(&chunk,node->mTransformation); Write<unsigned int>(&chunk,node->mNumChildren); Write<unsigned int>(&chunk,node->mNumMeshes); + Write<unsigned int>(&chunk,nb_metadata); for (unsigned int i = 0; i < node->mNumMeshes;++i) { Write<unsigned int>(&chunk,node->mMeshes[i]); @@ -336,6 +352,44 @@ inline size_t WriteArray(IOStream * stream, const T* in, unsigned int size) for (unsigned int i = 0; i < node->mNumChildren;++i) { WriteBinaryNode( &chunk, node->mChildren[i] ); } + + for (unsigned int i = 0; i < nb_metadata; ++i) { + const aiString& key = node->mMetaData->mKeys[i]; + aiMetadataType type = node->mMetaData->mValues[i].mType; + void* value = node->mMetaData->mValues[i].mData; + + Write<aiString>(&chunk, key); + Write<uint16_t>(&chunk, type); + + switch (type) { + case AI_BOOL: + Write<bool>(&chunk, *((bool*) value)); + break; + case AI_INT32: + Write<int32_t>(&chunk, *((int32_t*) value)); + break; + case AI_UINT64: + Write<uint64_t>(&chunk, *((uint64_t*) value)); + break; + case AI_FLOAT: + Write<float>(&chunk, *((float*) value)); + break; + case AI_DOUBLE: + Write<double>(&chunk, *((double*) value)); + break; + case AI_AISTRING: + Write<aiString>(&chunk, *((aiString*) value)); + break; + case AI_AIVECTOR3D: + Write<aiVector3D>(&chunk, *((aiVector3D*) value)); + break; +#ifdef SWIG + case FORCE_32BIT: +#endif // SWIG + default: + break; + } + } } // ----------------------------------------------------------------------------------- @@ -597,9 +651,9 @@ inline size_t WriteArray(IOStream * stream, const T* in, unsigned int size) Write<float>(&chunk,l->mAttenuationQuadratic); } - Write<aiVector3D>(&chunk,(const aiVector3D&)l->mColorDiffuse); - Write<aiVector3D>(&chunk,(const aiVector3D&)l->mColorSpecular); - Write<aiVector3D>(&chunk,(const aiVector3D&)l->mColorAmbient); + Write<aiColor3D>(&chunk,l->mColorDiffuse); + Write<aiColor3D>(&chunk,l->mColorSpecular); + Write<aiColor3D>(&chunk,l->mColorAmbient); if (l->mType == aiLightSource_SPOT) { Write<float>(&chunk,l->mAngleInnerCone); @@ -737,7 +791,7 @@ inline size_t WriteArray(IOStream * stream, const T* in, unsigned int size) AssbinChunkWriter uncompressedStream( NULL, 0 ); WriteBinaryScene( &uncompressedStream, pScene ); - uLongf uncompressedSize = uncompressedStream.Tell(); + uLongf uncompressedSize = static_cast<uLongf>(uncompressedStream.Tell()); uLongf compressedSize = (uLongf)(uncompressedStream.Tell() * 1.001 + 12.); uint8_t* compressedBuffer = new uint8_t[ compressedSize ]; @@ -757,7 +811,7 @@ inline size_t WriteArray(IOStream * stream, const T* in, unsigned int size) } }; -void ExportSceneAssbin(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* pProperties) +void ExportSceneAssbin(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* /*pProperties*/) { AssbinExport exporter; exporter.WriteBinaryDump( pFile, pIOSystem, pScene ); |