Showing the changes to interface/src/renderer/GeometryCache.cpp (1 of 5 files). Show all
Unified · Split
| @@ -743,7 +743,7 @@ void NetworkGeometry::setGeometry(const FBXGeometry& geometry) { · 742 unmodified lines | |||
| 743 | _geometry = geometry; | 743 | _geometry = geometry; |
| 744 | 744 | ||
| 745 | foreach (const FBXMesh& mesh, _geometry.meshes) { | 745 | foreach (const FBXMesh& mesh, _geometry.meshes) { |
| 746 | NetworkMesh networkMesh = { QOpenGLBuffer(QOpenGLBuffer::IndexBuffer), QOpenGLBuffer(QOpenGLBuffer::VertexBuffer) }; | 746 | NetworkMesh networkMesh; |
| 747 | 747 | ||
| 748 | int totalIndices = 0; | 748 | int totalIndices = 0; |
| 749 | foreach (const FBXMeshPart& part, mesh.parts) { | 749 | foreach (const FBXMeshPart& part, mesh.parts) { |
| @@ -773,26 +773,9 @@ void NetworkGeometry::setGeometry(const FBXGeometry& geometry) { · 23 unmodified lines | |||
| 773 | 773 | ||
| 774 | totalIndices += (part.quadIndices.size() + part.triangleIndices.size()); | 774 | totalIndices += (part.quadIndices.size() + part.triangleIndices.size()); |
| 775 | } | 775 | } |
| 776 | /* | 776 | |
| 777 | networkMesh.indexBuffer.create(); | ||
| 778 | networkMesh.indexBuffer.bind(); | ||
| 779 | networkMesh.indexBuffer.setUsagePattern(QOpenGLBuffer::StaticDraw); | ||
| 780 | networkMesh.indexBuffer.allocate(totalIndices * sizeof(int)); | ||
| 781 | int offset = 0; | ||
| 782 | foreach (const FBXMeshPart& part, mesh.parts) { | ||
| 783 | glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, offset, part.quadIndices.size() * sizeof(int), | ||
| 784 | part.quadIndices.constData()); | ||
| 785 | offset += part.quadIndices.size() * sizeof(int); | ||
| 786 | glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, offset, part.triangleIndices.size() * sizeof(int), | ||
| 787 | part.triangleIndices.constData()); | ||
| 788 | offset += part.triangleIndices.size() * sizeof(int); | ||
| 789 | } | ||
| 790 | networkMesh.indexBuffer.release(); | ||
| 791 | */ | ||
| 792 | { | 777 | { |
| 793 | networkMesh._indexBuffer = gpu::BufferPtr(new gpu::Buffer()); | 778 | networkMesh._indexBuffer = gpu::BufferPtr(new gpu::Buffer()); |
| 794 | //networkMesh._indexBuffer.bind(); | ||
| 795 | //networkMesh._indexBuffer.setUsagePattern(QOpenGLBuffer::StaticDraw); | ||
| 796 | networkMesh._indexBuffer->resize(totalIndices * sizeof(int)); | 779 | networkMesh._indexBuffer->resize(totalIndices * sizeof(int)); |
| 797 | int offset = 0; | 780 | int offset = 0; |
| 798 | foreach(const FBXMeshPart& part, mesh.parts) { | 781 | foreach(const FBXMeshPart& part, mesh.parts) { |
| @@ -803,54 +786,8 @@ void NetworkGeometry::setGeometry(const FBXGeometry& geometry) { · 4 unmodified lines | |||
| 803 | (gpu::Resource::Byte*) part.triangleIndices.constData()); | 786 | (gpu::Resource::Byte*) part.triangleIndices.constData()); |
| 804 | offset += part.triangleIndices.size() * sizeof(int); | 787 | offset += part.triangleIndices.size() * sizeof(int); |
| 805 | } | 788 | } |
| 806 | // networkMesh.indexBuffer.release(); | ||
| 807 | } | 789 | } |
| 808 | 790 | ||
| 809 | /* networkMesh.vertexBuffer.create(); | ||
| 810 | networkMesh.vertexBuffer.bind(); | ||
| 811 | networkMesh.vertexBuffer.setUsagePattern(QOpenGLBuffer::StaticDraw); | ||
| 812 | |||
| 813 | // if we don't need to do any blending, the positions/normals can be static | ||
| 814 | if (mesh.blendshapes.isEmpty()) { | ||
| 815 | int normalsOffset = mesh.vertices.size() * sizeof(glm::vec3); | ||
| 816 | int tangentsOffset = normalsOffset + mesh.normals.size() * sizeof(glm::vec3); | ||
| 817 | int colorsOffset = tangentsOffset + mesh.tangents.size() * sizeof(glm::vec3); | ||
| 818 | int texCoordsOffset = colorsOffset + mesh.colors.size() * sizeof(glm::vec3); | ||
| 819 | int clusterIndicesOffset = texCoordsOffset + mesh.texCoords.size() * sizeof(glm::vec2); | ||
| 820 | int clusterWeightsOffset = clusterIndicesOffset + mesh.clusterIndices.size() * sizeof(glm::vec4); | ||
| 821 | |||
| 822 | networkMesh.vertexBuffer.allocate(clusterWeightsOffset + mesh.clusterWeights.size() * sizeof(glm::vec4)); | ||
| 823 | networkMesh.vertexBuffer.write(0, mesh.vertices.constData(), mesh.vertices.size() * sizeof(glm::vec3)); | ||
| 824 | networkMesh.vertexBuffer.write(normalsOffset, mesh.normals.constData(), mesh.normals.size() * sizeof(glm::vec3)); | ||
| 825 | networkMesh.vertexBuffer.write(tangentsOffset, mesh.tangents.constData(), | ||
| 826 | mesh.tangents.size() * sizeof(glm::vec3)); | ||
| 827 | networkMesh.vertexBuffer.write(colorsOffset, mesh.colors.constData(), mesh.colors.size() * sizeof(glm::vec3)); | ||
| 828 | networkMesh.vertexBuffer.write(texCoordsOffset, mesh.texCoords.constData(), | ||
| 829 | mesh.texCoords.size() * sizeof(glm::vec2)); | ||
| 830 | networkMesh.vertexBuffer.write(clusterIndicesOffset, mesh.clusterIndices.constData(), | ||
| 831 | mesh.clusterIndices.size() * sizeof(glm::vec4)); | ||
| 832 | networkMesh.vertexBuffer.write(clusterWeightsOffset, mesh.clusterWeights.constData(), | ||
| 833 | mesh.clusterWeights.size() * sizeof(glm::vec4)); | ||
| 834 | |||
| 835 | // otherwise, at least the cluster indices/weights can be static | ||
| 836 | } else { | ||
| 837 | int colorsOffset = mesh.tangents.size() * sizeof(glm::vec3); | ||
| 838 | int texCoordsOffset = colorsOffset + mesh.colors.size() * sizeof(glm::vec3); | ||
| 839 | int clusterIndicesOffset = texCoordsOffset + mesh.texCoords.size() * sizeof(glm::vec2); | ||
| 840 | int clusterWeightsOffset = clusterIndicesOffset + mesh.clusterIndices.size() * sizeof(glm::vec4); | ||
| 841 | networkMesh.vertexBuffer.allocate(clusterWeightsOffset + mesh.clusterWeights.size() * sizeof(glm::vec4)); | ||
| 842 | networkMesh.vertexBuffer.write(0, mesh.tangents.constData(), mesh.tangents.size() * sizeof(glm::vec3)); | ||
| 843 | networkMesh.vertexBuffer.write(colorsOffset, mesh.colors.constData(), mesh.colors.size() * sizeof(glm::vec3)); | ||
| 844 | networkMesh.vertexBuffer.write(texCoordsOffset, mesh.texCoords.constData(), | ||
| 845 | mesh.texCoords.size() * sizeof(glm::vec2)); | ||
| 846 | networkMesh.vertexBuffer.write(clusterIndicesOffset, mesh.clusterIndices.constData(), | ||
| 847 | mesh.clusterIndices.size() * sizeof(glm::vec4)); | ||
| 848 | networkMesh.vertexBuffer.write(clusterWeightsOffset, mesh.clusterWeights.constData(), | ||
| 849 | mesh.clusterWeights.size() * sizeof(glm::vec4)); | ||
| 850 | } | ||
| 851 | |||
| 852 | networkMesh.vertexBuffer.release(); | ||
| 853 | */ | ||
| 854 | { | 791 | { |
| 855 | networkMesh._vertexBuffer = gpu::BufferPtr(new gpu::Buffer()); | 792 | networkMesh._vertexBuffer = gpu::BufferPtr(new gpu::Buffer()); |
| 856 | // if we don't need to do any blending, the positions/normals can be static | 793 | // if we don't need to do any blending, the positions/normals can be static |
| @@ -932,7 +869,7 @@ void NetworkGeometry::setGeometry(const FBXGeometry& geometry) { · 75 unmodified lines | |||
| 932 | 869 | ||
| 933 | } | 870 | } |
| 934 | } | 871 | } |
| 935 | 872 | ||
| 936 | _meshes.append(networkMesh); | 873 | _meshes.append(networkMesh); |
| 937 | } | 874 | } |
| 938 | 875 | ||