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 | glGenBuffers(1, &networkMesh.vertexBufferID); | 363 | glGenBuffers(1, &networkMesh.vertexBufferID); |
| 364 | glBindBuffer(GL_ARRAY_BUFFER, networkMesh.vertexBufferID); | 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 | if (mesh.blendshapes.isEmpty() && mesh.springiness == 0.0f) { | 367 | if (mesh.blendshapes.isEmpty() && mesh.springiness == 0.0f) { |
| 367 | glBufferData(GL_ARRAY_BUFFER, (mesh.vertices.size() + mesh.normals.size()) * sizeof(glm::vec3) + | 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 | glBufferSubData(GL_ARRAY_BUFFER, 0, mesh.vertices.size() * sizeof(glm::vec3), mesh.vertices.constData()); | 371 | glBufferSubData(GL_ARRAY_BUFFER, 0, mesh.vertices.size() * sizeof(glm::vec3), mesh.vertices.constData()); |
| 370 | glBufferSubData(GL_ARRAY_BUFFER, mesh.vertices.size() * sizeof(glm::vec3), | 372 | glBufferSubData(GL_ARRAY_BUFFER, mesh.vertices.size() * sizeof(glm::vec3), |
| 371 | mesh.normals.size() * sizeof(glm::vec3), mesh.normals.constData()); | 373 | mesh.normals.size() * sizeof(glm::vec3), mesh.normals.constData()); |
| 372 | glBufferSubData(GL_ARRAY_BUFFER, (mesh.vertices.size() + mesh.normals.size()) * sizeof(glm::vec3), | 374 | glBufferSubData(GL_ARRAY_BUFFER, (mesh.vertices.size() + mesh.normals.size()) * sizeof(glm::vec3), |
| 373 | mesh.texCoords.size() * sizeof(glm::vec2), mesh.texCoords.constData()); | 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 | } else { | 394 | } else { |
| 376 | glBufferData(GL_ARRAY_BUFFER, mesh.texCoords.size() * sizeof(glm::vec2), | 395 | glBufferData(GL_ARRAY_BUFFER, mesh.texCoords.size() * sizeof(glm::vec2), NULL, GL_STATIC_DRAW); |
| 377 | mesh.texCoords.constData(), GL_STATIC_DRAW); | 396 | glBufferSubData(GL_ARRAY_BUFFER, 0, mesh.texCoords.size() * sizeof(glm::vec2), mesh.texCoords.constData()); |
| 378 | } | 397 | } |
| 379 | 398 | ||
| 380 | glBindBuffer(GL_ARRAY_BUFFER, 0); | 399 | glBindBuffer(GL_ARRAY_BUFFER, 0); |