summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/assimp/code/AssbinExporter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/assimp/code/AssbinExporter.cpp')
-rw-r--r--src/3rdparty/assimp/code/AssbinExporter.cpp66
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 );