Showing the changes to interface/src/renderer/GeometryCache.cpp (1 of 5 files). Show all
Unified · Split
| @@ -363,18 +363,37 @@ void NetworkGeometry::maybeReadModelWithMapping() { · 362 unmodified lines | ||
| 363 | 363 | glGenBuffers(1, &networkMesh.vertexBufferID); |
| 364 | 364 | glBindBuffer(GL_ARRAY_BUFFER, networkMesh.vertexBufferID); |
| 365 | 365 | |
| 366 | + // if we don't need to do any blending or springing, then the positions/normals can be static | |
| 366 | 367 | if (mesh.blendshapes.isEmpty() && mesh.springiness == 0.0f) { |
| 367 | 368 | glBufferData(GL_ARRAY_BUFFER, (mesh.vertices.size() + mesh.normals.size()) * sizeof(glm::vec3) + |
| 368 | − mesh.texCoords.size() * sizeof(glm::vec2), NULL, GL_STATIC_DRAW); | |
| 369 | + mesh.texCoords.size() * sizeof(glm::vec2) + (mesh.clusterIndices.size() + | |
| 370 | + mesh.clusterWeights.size()) * sizeof(glm::vec4), NULL, GL_STATIC_DRAW); | |
| 369 | 371 | glBufferSubData(GL_ARRAY_BUFFER, 0, mesh.vertices.size() * sizeof(glm::vec3), mesh.vertices.constData()); |
| 370 | 372 | glBufferSubData(GL_ARRAY_BUFFER, mesh.vertices.size() * sizeof(glm::vec3), |
| 371 | 373 | mesh.normals.size() * sizeof(glm::vec3), mesh.normals.constData()); |
| 372 | 374 | glBufferSubData(GL_ARRAY_BUFFER, (mesh.vertices.size() + mesh.normals.size()) * sizeof(glm::vec3), |
| 373 | 375 | mesh.texCoords.size() * sizeof(glm::vec2), mesh.texCoords.constData()); |
| 376 | + glBufferSubData(GL_ARRAY_BUFFER, (mesh.vertices.size() + mesh.normals.size()) * sizeof(glm::vec3) + | |
| 377 | + mesh.texCoords.size() * sizeof(glm::vec2), mesh.clusterIndices.size() * sizeof(glm::vec4), | |
| 378 | + mesh.clusterIndices.constData()); | |
| 379 | + glBufferSubData(GL_ARRAY_BUFFER, (mesh.vertices.size() + mesh.normals.size()) * sizeof(glm::vec3) + | |
| 380 | + mesh.texCoords.size() * sizeof(glm::vec2) + mesh.clusterIndices.size() * sizeof(glm::vec4), | |
| 381 | + mesh.clusterWeights.size() * sizeof(glm::vec4), mesh.clusterWeights.constData()); | |
| 382 | + | |
| 383 | + // if there's no springiness, then the cluster indices/weights can be static | |
| 384 | + } else if (mesh.springiness == 0.0f) { | |
| 385 | + glBufferData(GL_ARRAY_BUFFER, mesh.texCoords.size() * sizeof(glm::vec2) + (mesh.clusterIndices.size() + | |
| 386 | + mesh.clusterWeights.size()) * sizeof(glm::vec4), NULL, GL_STATIC_DRAW); | |
| 387 | + glBufferSubData(GL_ARRAY_BUFFER, 0, mesh.texCoords.size() * sizeof(glm::vec2), mesh.texCoords.constData()); | |
| 388 | + glBufferSubData(GL_ARRAY_BUFFER, mesh.texCoords.size() * sizeof(glm::vec2), | |
| 389 | + mesh.clusterIndices.size() * sizeof(glm::vec4), mesh.clusterIndices.constData()); | |
| 390 | + glBufferSubData(GL_ARRAY_BUFFER, mesh.texCoords.size() * sizeof(glm::vec2) + | |
| 391 | + mesh.clusterIndices.size() * sizeof(glm::vec4), mesh.clusterWeights.size() * sizeof(glm::vec4), | |
| 392 | + mesh.clusterWeights.constData()); | |
| 374 | 393 | |
| 375 | 394 | } else { |
| 376 | − glBufferData(GL_ARRAY_BUFFER, mesh.texCoords.size() * sizeof(glm::vec2), | |
| 377 | − mesh.texCoords.constData(), GL_STATIC_DRAW); | |
| 395 | + glBufferData(GL_ARRAY_BUFFER, mesh.texCoords.size() * sizeof(glm::vec2), NULL, GL_STATIC_DRAW); | |
| 396 | + glBufferSubData(GL_ARRAY_BUFFER, 0, mesh.texCoords.size() * sizeof(glm::vec2), mesh.texCoords.constData()); | |
| 378 | 397 | } |
| 379 | 398 | |
| 380 | 399 | glBindBuffer(GL_ARRAY_BUFFER, 0); |