Pārlūkot izejas kodu

Merge branch 'bug-3177-dae-geo-id' into bug-3201-collada_root_meshes

RichardTea 5 gadi atpakaļ
vecāks
revīzija
6e447b2c44

+ 2 - 2
code/AssetLib/Collada/ColladaExporter.cpp

@@ -1227,8 +1227,8 @@ void ColladaExporter::WriteFloatArray(const std::string &pIdString, FloatDataTyp
 // ------------------------------------------------------------------------------------------------
 // Writes the scene library
 void ColladaExporter::WriteSceneLibrary() {
-    const std::string sceneName = GetNodeUniqueId(mScene->mRootNode);
-    const std::string sceneId = GetNodeName(mScene->mRootNode);
+    const std::string sceneId = GetNodeUniqueId(mScene->mRootNode);
+    const std::string sceneName = GetNodeName(mScene->mRootNode);
 
     mOutput << startstr << "<library_visual_scenes>" << endstr;
     PushTag();

+ 4 - 2
code/AssetLib/X3D/X3DImporter_Postprocess.cpp

@@ -787,8 +787,10 @@ void X3DImporter::Postprocess_CollectMetadata(const CX3DImporter_NodeElement& pN
 			// Add an element according to its type.
 			if((*it)->Type == CX3DImporter_NodeElement::ENET_MetaBoolean)
 			{
-				if(((CX3DImporter_NodeElement_MetaBoolean*)cur_meta)->Value.size() > 0)
-					pSceneNode.mMetaData->Set(static_cast<unsigned int>(meta_idx), cur_meta->Name, *(((CX3DImporter_NodeElement_MetaBoolean*)cur_meta)->Value.begin()));
+				if(((CX3DImporter_NodeElement_MetaBoolean*)cur_meta)->Value.size() > 0) {
+					const bool v = (bool) *( ( (CX3DImporter_NodeElement_MetaBoolean*) cur_meta )->Value.begin());
+                    pSceneNode.mMetaData->Set(static_cast<unsigned int>(meta_idx), cur_meta->Name, v);
+                }
 			}
 			else if((*it)->Type == CX3DImporter_NodeElement::ENET_MetaDouble)
 			{

+ 14 - 1
include/assimp/metadata.h

@@ -86,6 +86,14 @@ typedef enum aiMetadataType {
 struct aiMetadataEntry {
     aiMetadataType mType;
     void *mData;
+
+#ifdef __cplusplus
+    aiMetadataEntry() :
+            mType(AI_META_MAX),
+            mData( nullptr ) {
+        // empty
+    }
+#endif
 };
 
 #ifdef __cplusplus
@@ -313,8 +321,13 @@ struct aiMetadata {
 
         // Set metadata type
         mValues[index].mType = GetAiType(value);
+
         // Copy the given value to the dynamic storage
-        mValues[index].mData = new T(value);
+        if (nullptr != mValues[index].mData) {
+            ::memcpy(mValues[index].mData, &value, sizeof(T));
+        } else {
+            mValues[index].mData = new T(value);
+        }
 
         return true;
     }