--- a/OgreMain/include/OgreProgressiveMeshGenerator.h 2015-09-03 04:58:34.119585218 +0200 +++ b/OgreMain/include/OgreProgressiveMeshGenerator.h 2015-09-03 04:58:39.342585320 +0200 @@ -215,7 +215,40 @@ void tuneContainerSize(); void addVertexData(VertexData* vertexData, bool useSharedVertexLookup); template - void addIndexDataImpl(IndexType* iPos, const IndexType* iEnd, VertexLookupList& lookup, unsigned short submeshID); + void addIndexDataImpl(IndexType* iPos, const IndexType* iEnd, VertexLookupList& lookup, unsigned short submeshID) + { + + // Loop through all triangles and connect them to the vertices. + for (; iPos < iEnd; iPos += 3) { + // It should never reallocate or every pointer will be invalid. + OgreAssert(mTriangleList.capacity() > mTriangleList.size(), ""); + mTriangleList.push_back(PMTriangle()); + PMTriangle* tri = &mTriangleList.back(); + tri->isRemoved = false; + tri->submeshID = submeshID; + for (int i = 0; i < 3; i++) { + // Invalid index: Index is bigger then vertex buffer size. + OgreAssert(iPos[i] < lookup.size(), ""); + tri->vertexID[i] = iPos[i]; + tri->vertex[i] = lookup[iPos[i]]; + } + if (tri->isMalformed()) { +#if OGRE_DEBUG_MODE + stringstream str; + str << "In " << mMeshName << " malformed triangle found with ID: " << getTriangleID(tri) << ". " << + std::endl; + printTriangle(tri, str); + str << "It will be excluded from LOD level calculations."; + LogManager::getSingleton().stream() << str.str(); +#endif + tri->isRemoved = true; + mIndexBufferInfoList[tri->submeshID].indexCount -= 3; + continue; + } + tri->computeNormal(); + addTriangleToEdges(tri); + } + } void addIndexData(IndexData* indexData, bool useSharedVertexLookup, unsigned short submeshID); void computeCosts(); --- a/OgreMain/src/OgreProgressiveMeshGenerator.cpp 2015-09-03 04:58:34.879585233 +0200 +++ b/OgreMain/src/OgreProgressiveMeshGenerator.cpp 2015-09-03 04:58:43.944585409 +0200 @@ -219,6 +219,8 @@ } vbuf->unlock(); } +/// Called from OgreQueuedProgressiveMeshGenerator.cpp, so it can not be defined in here. +#if 0 template void ProgressiveMeshGenerator::addIndexDataImpl(IndexType* iPos, const IndexType* iEnd, VertexLookupList& lookup, @@ -256,6 +258,7 @@ addTriangleToEdges(tri); } } +#endif // 0 void ProgressiveMeshGenerator::addIndexData(IndexData* indexData, bool useSharedVertexLookup, unsigned short submeshID) {