diff --git a/src/QD3D/3DMFParser.cpp b/src/QD3D/3DMFParser.cpp index 58a83f5..f7df8df 100644 --- a/src/QD3D/3DMFParser.cpp +++ b/src/QD3D/3DMFParser.cpp @@ -290,7 +290,11 @@ void Q3MetaFileParser::Parse_tmsh(uint32_t chunkSize) Assert(0 == numEdges, "edges are not supported"); Assert(0 == numEdgeAttributes, "edge attributes are not supported"); - currentMesh = Q3TriMeshData_New(numTriangles, numVertices); + currentMesh = Q3TriMeshData_New( + numTriangles, + numVertices, + false // Don't allocate per-vertex colors yet. We'll allocate them later if the mesh needs them. + ); __Q3EnlargeArray(metaFile.meshes, metaFile.numMeshes, 'MLST'); metaFile.meshes[metaFile.numMeshes-1] = currentMesh; diff --git a/src/QD3D/QD3D.cpp b/src/QD3D/QD3D.cpp index a194239..3780ead 100644 --- a/src/QD3D/QD3D.cpp +++ b/src/QD3D/QD3D.cpp @@ -148,7 +148,7 @@ void Q3Pixmap_Dispose(TQ3Pixmap* pixmap) #pragma mark - -TQ3TriMeshData* Q3TriMeshData_New(int numTriangles, int numPoints) +TQ3TriMeshData* Q3TriMeshData_New(int numTriangles, int numPoints, bool perVertexColors) { TQ3TriMeshData* mesh = __Q3Alloc(1, 'MESH'); @@ -158,16 +158,22 @@ TQ3TriMeshData* Q3TriMeshData_New(int numTriangles, int numPoints) mesh->triangles = __Q3Alloc(numTriangles, 'TMtr'); mesh->vertexNormals = __Q3Alloc(numPoints, 'TMvn'); mesh->vertexUVs = __Q3Alloc(numPoints, 'TMuv'); - mesh->vertexColors = nullptr; + mesh->vertexColors = perVertexColors? __Q3Alloc(numPoints, 'TMvc'): nullptr; mesh->diffuseColor = {1, 1, 1, 1}; mesh->texturingMode = kQ3TexturingModeOff; mesh->internalTextureID = -1; + mesh->bBox = {{0,0,0}, {0,0,0}, kQ3True}; // empty for (int i = 0; i < numPoints; i++) { mesh->vertexNormals[i] = {0, 1, 0}; mesh->vertexUVs[i] = {.5f, .5f}; -// triMeshData->vertexColors[i] = {1, 1, 1, 1}; + } + + if (perVertexColors) + { + for (int i = 0; i < numPoints; i++) + mesh->vertexColors[i] = {1, 1, 1, 1}; } return mesh; diff --git a/src/QD3D/QD3D.h b/src/QD3D/QD3D.h index 3817447..6a7480b 100644 --- a/src/QD3D/QD3D.h +++ b/src/QD3D/QD3D.h @@ -350,7 +350,7 @@ void Q3Pixmap_Dispose(TQ3Pixmap*); #pragma mark - -TQ3TriMeshData* Q3TriMeshData_New(int numTriangles, int numPoints); +TQ3TriMeshData* Q3TriMeshData_New(int numTriangles, int numPoints, bool perVertexColors); TQ3TriMeshData* Q3TriMeshData_Duplicate(const TQ3TriMeshData* source);