void GLC_Mesh::copyBulkData(GLC_Mesh* pLodMesh, const QHash<GLuint, GLuint>& tagetToSourceIndexMap, int maxIndex) { GLfloatVector tempFloatVector; int stride= 3; // Extract position bulk data Q_ASSERT(!m_MeshData.positionVectorHandle()->isEmpty()); tempFloatVector.resize(stride * (maxIndex + 1)); for (int i= 0; i < maxIndex + 1; ++i) { GLfloat* pTarget= &(tempFloatVector.data()[i * stride]); GLfloat* pSource= &(m_MeshData.positionVectorHandle()->data()[tagetToSourceIndexMap.value(i) * stride]); memcpy(pTarget, pSource, sizeof(GLfloat) * stride); } pLodMesh->addVertice(tempFloatVector); tempFloatVector.clear(); // Extract normal bulk data Q_ASSERT(!m_MeshData.normalVectorHandle()->isEmpty()); tempFloatVector.resize(stride * (maxIndex + 1)); for (int i= 0; i < maxIndex + 1; ++i) { GLfloat* pTarget= &(tempFloatVector.data()[i * stride]); GLfloat* pSource= &(m_MeshData.normalVectorHandle()->data()[tagetToSourceIndexMap.value(i) * stride]); memcpy(pTarget, pSource, sizeof(GLfloat) * stride); } pLodMesh->addNormals(tempFloatVector); tempFloatVector.clear(); if (!m_MeshData.texelVectorHandle()->isEmpty()) { // Extract texel bulk data stride= 2; tempFloatVector.resize(stride * (maxIndex + 1)); for (int i= 0; i < maxIndex + 1; ++i) { GLfloat* pTarget= &(tempFloatVector.data()[i * stride]); GLfloat* pSource= &(m_MeshData.texelVectorHandle()->data()[tagetToSourceIndexMap.value(i) * stride]); memcpy(pTarget, pSource, sizeof(GLfloat) * stride); } pLodMesh->addTexels(tempFloatVector); tempFloatVector.clear(); } }