History

fix the bug for blend shape when more than one and clean the model rendering with the new stream and buffer gpu api

Sam Gateau committed 12 years ago

Commit f413f931 parent ed067795 files · +37 −220Browse files

Showing the changes to interface/src/renderer/GeometryCache.cpp (1 of 5 files). Show all

Unified · Split

interface/src/renderer/GeometryCache.cpp+3−66
@@ -743,7 +743,7 @@ void NetworkGeometry::setGeometry(const FBXGeometry& geometry) { · 742 unmodified lines
743743 _geometry = geometry;
744744
745745 foreach (const FBXMesh& mesh, _geometry.meshes) {
746− NetworkMesh networkMesh = { QOpenGLBuffer(QOpenGLBuffer::IndexBuffer), QOpenGLBuffer(QOpenGLBuffer::VertexBuffer) };
746+ NetworkMesh networkMesh;
747747
748748 int totalIndices = 0;
749749 foreach (const FBXMeshPart& part, mesh.parts) {
@@ -773,26 +773,9 @@ void NetworkGeometry::setGeometry(const FBXGeometry& geometry) { · 23 unmodified lines
773773
774774 totalIndices += (part.quadIndices.size() + part.triangleIndices.size());
775775 }
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− */
776+
792777 {
793778 networkMesh._indexBuffer = gpu::BufferPtr(new gpu::Buffer());
794− //networkMesh._indexBuffer.bind();
795− //networkMesh._indexBuffer.setUsagePattern(QOpenGLBuffer::StaticDraw);
796779 networkMesh._indexBuffer->resize(totalIndices * sizeof(int));
797780 int offset = 0;
798781 foreach(const FBXMeshPart& part, mesh.parts) {
@@ -803,54 +786,8 @@ void NetworkGeometry::setGeometry(const FBXGeometry& geometry) { · 4 unmodified lines
803786 (gpu::Resource::Byte*) part.triangleIndices.constData());
804787 offset += part.triangleIndices.size() * sizeof(int);
805788 }
806− // networkMesh.indexBuffer.release();
807789 }
808790
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−*/
854791 {
855792 networkMesh._vertexBuffer = gpu::BufferPtr(new gpu::Buffer());
856793 // 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
932869
933870 }
934871 }
935−
872+
936873 _meshes.append(networkMesh);
937874 }
938875