Quellcode durchsuchen

Bugfix : Replaced ugly (const_)casting by a better ctor and placement new. ( merged from GitHub, thanks to Riku Palomäki ).

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@1217 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
kimmi vor 13 Jahren
Ursprung
Commit
42def11d13
2 geänderte Dateien mit 8 neuen und 4 gelöschten Zeilen
  1. 5 1
      code/MDCFileData.h
  2. 3 3
      code/MDCLoader.cpp

+ 5 - 1
code/MDCFileData.h

@@ -115,7 +115,11 @@ struct Surface
 	uint32_t ulOffsetCompVerts ;
 	uint32_t ulOffsetFrameBaseFrames ;
 	uint32_t ulOffsetFrameCompFrames ;
-	uint32_t ulOffsetEnd ;
+	uint32_t ulOffsetEnd;
+	Surface()
+	{
+		ucName[AI_MDC_MAXQPATH-1] = '\0';
+	}
 } PACK_STRUCT;
 
 // ---------------------------------------------------------------------------

+ 3 - 3
code/MDCLoader.cpp

@@ -230,7 +230,7 @@ void MDCImporter::InternReadFile(
 
 	// get the number of valid surfaces
 	BE_NCONST MDC::Surface* pcSurface, *pcSurface2;
-	pcSurface = pcSurface2 = (BE_NCONST MDC::Surface*)(mBuffer + pcHeader->ulOffsetSurfaces);
+	pcSurface = pcSurface2 = new (mBuffer + pcHeader->ulOffsetSurfaces) MDC::Surface;
 	unsigned int iNumShaders = 0;
 	for (unsigned int i = 0; i < pcHeader->ulNumSurfaces;++i)
 	{
@@ -239,7 +239,7 @@ void MDCImporter::InternReadFile(
 
 		if (pcSurface2->ulNumVertices && pcSurface2->ulNumTriangles)++pScene->mNumMeshes;
 		iNumShaders += pcSurface2->ulNumShaders;
-		pcSurface2 = (BE_NCONST MDC::Surface*)((int8_t*)pcSurface2 + pcSurface2->ulOffsetEnd);
+		pcSurface2 = new ((int8_t*)pcSurface2 + pcSurface2->ulOffsetEnd) MDC::Surface;
 	}
 	aszShaders.reserve(iNumShaders);
 	pScene->mMeshes = new aiMesh*[pScene->mNumMeshes];
@@ -399,7 +399,7 @@ void MDCImporter::InternReadFile(
 			pcFaceCur->mIndices[2] = iOutIndex + 0;
 		}
 
-		pcSurface = (BE_NCONST MDC::Surface*)((int8_t*)pcSurface + pcSurface->ulOffsetEnd);
+		pcSurface =  new ((int8_t*)pcSurface + pcSurface->ulOffsetEnd) MDC::Surface;
 	}
 
 	// create a flat node graph with a root node and one child for each surface