|
@@ -198,8 +198,7 @@ template <typename T> void ReadBounds( IOStream * stream, T* /*p*/, unsigned int
|
|
stream->Seek( sizeof(T) * n, aiOrigin_CUR );
|
|
stream->Seek( sizeof(T) * n, aiOrigin_CUR );
|
|
}
|
|
}
|
|
|
|
|
|
-void AssbinImporter::ReadBinaryNode( IOStream * stream, aiNode** node, aiNode* parent )
|
|
|
|
-{
|
|
|
|
|
|
+void AssbinImporter::ReadBinaryNode( IOStream * stream, aiNode** node, aiNode* parent ) {
|
|
uint32_t chunkID = Read<uint32_t>(stream);
|
|
uint32_t chunkID = Read<uint32_t>(stream);
|
|
ai_assert(chunkID == ASSBIN_CHUNK_AINODE);
|
|
ai_assert(chunkID == ASSBIN_CHUNK_AINODE);
|
|
/*uint32_t size =*/ Read<uint32_t>(stream);
|
|
/*uint32_t size =*/ Read<uint32_t>(stream);
|
|
@@ -212,58 +211,59 @@ void AssbinImporter::ReadBinaryNode( IOStream * stream, aiNode** node, aiNode* p
|
|
(*node)->mNumMeshes = Read<unsigned int>(stream);
|
|
(*node)->mNumMeshes = Read<unsigned int>(stream);
|
|
unsigned int nb_metadata = Read<unsigned int>(stream);
|
|
unsigned int nb_metadata = Read<unsigned int>(stream);
|
|
|
|
|
|
- if(parent)
|
|
|
|
- {
|
|
|
|
|
|
+ if(parent) {
|
|
(*node)->mParent = parent;
|
|
(*node)->mParent = parent;
|
|
}
|
|
}
|
|
|
|
|
|
- if ((*node)->mNumMeshes)
|
|
|
|
- {
|
|
|
|
|
|
+ if ((*node)->mNumMeshes) {
|
|
(*node)->mMeshes = new unsigned int[(*node)->mNumMeshes];
|
|
(*node)->mMeshes = new unsigned int[(*node)->mNumMeshes];
|
|
for (unsigned int i = 0; i < (*node)->mNumMeshes; ++i) {
|
|
for (unsigned int i = 0; i < (*node)->mNumMeshes; ++i) {
|
|
(*node)->mMeshes[i] = Read<unsigned int>(stream);
|
|
(*node)->mMeshes[i] = Read<unsigned int>(stream);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- if ((*node)->mNumChildren)
|
|
|
|
- {
|
|
|
|
|
|
+ if ((*node)->mNumChildren) {
|
|
(*node)->mChildren = new aiNode*[(*node)->mNumChildren];
|
|
(*node)->mChildren = new aiNode*[(*node)->mNumChildren];
|
|
for (unsigned int i = 0; i < (*node)->mNumChildren; ++i) {
|
|
for (unsigned int i = 0; i < (*node)->mNumChildren; ++i) {
|
|
ReadBinaryNode( stream, &(*node)->mChildren[i], *node );
|
|
ReadBinaryNode( stream, &(*node)->mChildren[i], *node );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- if (nb_metadata)
|
|
|
|
- {
|
|
|
|
- (*node)->mMetaData = aiMetadata::Alloc(nb_metadata);
|
|
|
|
- for (unsigned int i = 0; i < nb_metadata; ++i) {
|
|
|
|
- (*node)->mMetaData->mKeys[i] = Read<aiString>(stream);
|
|
|
|
- (*node)->mMetaData->mValues[i].mType = (aiMetadataType) Read<uint16_t>(stream);
|
|
|
|
- void* data = NULL;
|
|
|
|
-
|
|
|
|
- switch ((*node)->mMetaData->mValues[i].mType) {
|
|
|
|
- case AI_BOOL:
|
|
|
|
- data = new bool(Read<bool>(stream));
|
|
|
|
- break;
|
|
|
|
- case AI_INT32:
|
|
|
|
- data = new int32_t(Read<int32_t>(stream));
|
|
|
|
- break;
|
|
|
|
- case AI_UINT64:
|
|
|
|
- data = new uint64_t(Read<uint64_t>(stream));
|
|
|
|
- break;
|
|
|
|
- case AI_FLOAT:
|
|
|
|
- data = new float(Read<float>(stream));
|
|
|
|
- break;
|
|
|
|
- case AI_DOUBLE:
|
|
|
|
- data = new double(Read<double>(stream));
|
|
|
|
- break;
|
|
|
|
- case AI_AISTRING:
|
|
|
|
- data = new aiString(Read<aiString>(stream));
|
|
|
|
- break;
|
|
|
|
- case AI_AIVECTOR3D:
|
|
|
|
- data = new aiVector3D(Read<aiVector3D>(stream));
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ if ( nb_metadata > 0 ) {
|
|
|
|
+ (*node)->mMetaData = aiMetadata::Alloc(nb_metadata);
|
|
|
|
+ for (unsigned int i = 0; i < nb_metadata; ++i) {
|
|
|
|
+ (*node)->mMetaData->mKeys[i] = Read<aiString>(stream);
|
|
|
|
+ (*node)->mMetaData->mValues[i].mType = (aiMetadataType) Read<uint16_t>(stream);
|
|
|
|
+ void* data( nullptr );
|
|
|
|
+
|
|
|
|
+ switch ((*node)->mMetaData->mValues[i].mType) {
|
|
|
|
+ case AI_BOOL:
|
|
|
|
+ data = new bool(Read<bool>(stream));
|
|
|
|
+ break;
|
|
|
|
+ case AI_INT32:
|
|
|
|
+ data = new int32_t(Read<int32_t>(stream));
|
|
|
|
+ break;
|
|
|
|
+ case AI_UINT64:
|
|
|
|
+ data = new uint64_t(Read<uint64_t>(stream));
|
|
|
|
+ break;
|
|
|
|
+ case AI_FLOAT:
|
|
|
|
+ data = new float(Read<float>(stream));
|
|
|
|
+ break;
|
|
|
|
+ case AI_DOUBLE:
|
|
|
|
+ data = new double(Read<double>(stream));
|
|
|
|
+ break;
|
|
|
|
+ case AI_AISTRING:
|
|
|
|
+ data = new aiString(Read<aiString>(stream));
|
|
|
|
+ break;
|
|
|
|
+ case AI_AIVECTOR3D:
|
|
|
|
+ data = new aiVector3D(Read<aiVector3D>(stream));
|
|
|
|
+ break;
|
|
|
|
+#ifndef SWIG
|
|
|
|
+ case FORCE_32BIT:
|
|
|
|
+#endif // SWIG
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
(*node)->mMetaData->mValues[i].mData = data;
|
|
(*node)->mMetaData->mValues[i].mData = data;
|
|
}
|
|
}
|