History

Migrating the model rendering code to use the new gpu api for input buffers and stream format

Sam Gateau committed 12 years ago

Commit fba15261 parent 46c430514 files · +341 −163Browse files

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

Unified · Split

interface/src/renderer/GeometryCache.cpp+30−24
@@ -878,22 +878,24 @@ void NetworkGeometry::setGeometry(const FBXGeometry& geometry) { · 877 unmodified lines
878 mesh.clusterWeights.size() * sizeof(glm::vec4), (gpu::Resource::Byte*) mesh.clusterWeights.constData());878 mesh.clusterWeights.size() * sizeof(glm::vec4), (gpu::Resource::Byte*) mesh.clusterWeights.constData());
879 879
880 // otherwise, at least the cluster indices/weights can be static880 // otherwise, at least the cluster indices/weights can be static
881 networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, 0, sizeof(glm::vec3));881 networkMesh._vertexStream = gpu::StreamPtr(new gpu::Stream());
882 if (mesh.normals.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, normalsOffset, sizeof(glm::vec3));882 networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, 0, sizeof(glm::vec3));
883 if (mesh.tangents.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, tangentsOffset, sizeof(glm::vec3));883 if (mesh.normals.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, normalsOffset, sizeof(glm::vec3));
884 if (mesh.colors.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, colorsOffset, sizeof(glm::vec3));884 if (mesh.tangents.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, tangentsOffset, sizeof(glm::vec3));
885 if (mesh.texCoords.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, texCoordsOffset, sizeof(glm::vec2));885 if (mesh.colors.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, colorsOffset, sizeof(glm::vec3));
886 if (mesh.clusterIndices.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, clusterIndicesOffset, sizeof(glm::vec4));886 if (mesh.texCoords.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, texCoordsOffset, sizeof(glm::vec2));
887 if (mesh.clusterWeights.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, clusterWeightsOffset, sizeof(glm::vec4));887 if (mesh.clusterIndices.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, clusterIndicesOffset, sizeof(glm::vec4));
888 if (mesh.clusterWeights.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, clusterWeightsOffset, sizeof(glm::vec4));
888 889
889 int channelNum = 0;890 int channelNum = 0;
890 networkMesh._vertexFormat.setAttribute(gpu::StreamFormat::SLOT_POSITION, channelNum++, gpu::Element(gpu::Element::DIM_VEC3, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);891 networkMesh._vertexFormat = gpu::StreamFormatPtr(new gpu::StreamFormat());
891 if (mesh.normals.size()) networkMesh._vertexFormat.setAttribute(gpu::StreamFormat::SLOT_NORMAL, channelNum++, gpu::Element(gpu::Element::DIM_VEC3, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);892 networkMesh._vertexFormat->setAttribute(gpu::StreamFormat::SLOT_POSITION, channelNum++, gpu::Element(gpu::Element::DIM_VEC3, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);
892 if (mesh.tangents.size()) networkMesh._vertexFormat.setAttribute(gpu::StreamFormat::SLOT_TANGENT, channelNum++, gpu::Element(gpu::Element::DIM_VEC3, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);893 if (mesh.normals.size()) networkMesh._vertexFormat->setAttribute(gpu::StreamFormat::SLOT_NORMAL, channelNum++, gpu::Element(gpu::Element::DIM_VEC3, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);
893 if (mesh.colors.size()) networkMesh._vertexFormat.setAttribute(gpu::StreamFormat::SLOT_COLOR, channelNum++, gpu::Element(gpu::Element::DIM_VEC3, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);894 if (mesh.tangents.size()) networkMesh._vertexFormat->setAttribute(gpu::StreamFormat::SLOT_TANGENT, channelNum++, gpu::Element(gpu::Element::DIM_VEC3, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);
894 if (mesh.texCoords.size()) networkMesh._vertexFormat.setAttribute(gpu::StreamFormat::SLOT_TEXCOORD, channelNum++, gpu::Element(gpu::Element::DIM_VEC2, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);895 if (mesh.colors.size()) networkMesh._vertexFormat->setAttribute(gpu::StreamFormat::SLOT_COLOR, channelNum++, gpu::Element(gpu::Element::DIM_VEC3, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);
895 if (mesh.clusterIndices.size()) networkMesh._vertexFormat.setAttribute(gpu::StreamFormat::SLOT_SKIN_CLUSTER_INDEX, channelNum++, gpu::Element(gpu::Element::DIM_VEC4, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);896 if (mesh.texCoords.size()) networkMesh._vertexFormat->setAttribute(gpu::StreamFormat::SLOT_TEXCOORD, channelNum++, gpu::Element(gpu::Element::DIM_VEC2, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);
896 if (mesh.clusterWeights.size()) networkMesh._vertexFormat.setAttribute(gpu::StreamFormat::SLOT_SKIN_CLUSTER_WEIGHT, channelNum++, gpu::Element(gpu::Element::DIM_VEC4, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);897 if (mesh.clusterIndices.size()) networkMesh._vertexFormat->setAttribute(gpu::StreamFormat::SLOT_SKIN_CLUSTER_INDEX, channelNum++, gpu::Element(gpu::Element::DIM_VEC4, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);
898 if (mesh.clusterWeights.size()) networkMesh._vertexFormat->setAttribute(gpu::StreamFormat::SLOT_SKIN_CLUSTER_WEIGHT, channelNum++, gpu::Element(gpu::Element::DIM_VEC4, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);
897 }899 }
898 else {900 else {
899 int colorsOffset = mesh.tangents.size() * sizeof(glm::vec3);901 int colorsOffset = mesh.tangents.size() * sizeof(glm::vec3);
@@ -911,18 +913,22 @@ void NetworkGeometry::setGeometry(const FBXGeometry& geometry) { · 11 unmodified lines
911 networkMesh._vertexBuffer->setSubData(clusterWeightsOffset,913 networkMesh._vertexBuffer->setSubData(clusterWeightsOffset,
912 mesh.clusterWeights.size() * sizeof(glm::vec4), (gpu::Resource::Byte*) mesh.clusterWeights.constData());914 mesh.clusterWeights.size() * sizeof(glm::vec4), (gpu::Resource::Byte*) mesh.clusterWeights.constData());
913 915
914 if (mesh.tangents.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, 0, sizeof(glm::vec3));916 networkMesh._vertexStream = gpu::StreamPtr(new gpu::Stream());
915 if (mesh.colors.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, colorsOffset, sizeof(glm::vec3));917 if (mesh.tangents.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, 0, sizeof(glm::vec3));
916 if (mesh.texCoords.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, texCoordsOffset, sizeof(glm::vec2));918 if (mesh.colors.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, colorsOffset, sizeof(glm::vec3));
917 if (mesh.clusterIndices.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, clusterIndicesOffset, sizeof(glm::vec4));919 if (mesh.texCoords.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, texCoordsOffset, sizeof(glm::vec2));
918 if (mesh.clusterWeights.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, clusterWeightsOffset, sizeof(glm::vec4));920 if (mesh.clusterIndices.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, clusterIndicesOffset, sizeof(glm::vec4));
921 if (mesh.clusterWeights.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, clusterWeightsOffset, sizeof(glm::vec4));
919 922
920 int channelNum = 0;923 int channelNum = 0;
921 if (mesh.tangents.size()) networkMesh._vertexFormat.setAttribute(gpu::StreamFormat::SLOT_TANGENT, channelNum++, gpu::Element(gpu::Element::DIM_VEC3, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);924 networkMesh._vertexFormat = gpu::StreamFormatPtr(new gpu::StreamFormat());
922 if (mesh.colors.size()) networkMesh._vertexFormat.setAttribute(gpu::StreamFormat::SLOT_COLOR, channelNum++, gpu::Element(gpu::Element::DIM_VEC3, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);925 networkMesh._vertexFormat->setAttribute(gpu::StreamFormat::SLOT_POSITION, channelNum++, gpu::Element(gpu::Element::DIM_VEC3, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);
923 if (mesh.texCoords.size()) networkMesh._vertexFormat.setAttribute(gpu::StreamFormat::SLOT_TEXCOORD, channelNum++, gpu::Element(gpu::Element::DIM_VEC2, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);926 if (mesh.normals.size()) networkMesh._vertexFormat->setAttribute(gpu::StreamFormat::SLOT_NORMAL, channelNum++, gpu::Element(gpu::Element::DIM_VEC3, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);
924 if (mesh.clusterIndices.size()) networkMesh._vertexFormat.setAttribute(gpu::StreamFormat::SLOT_SKIN_CLUSTER_INDEX, channelNum++, gpu::Element(gpu::Element::DIM_VEC4, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);927 if (mesh.tangents.size()) networkMesh._vertexFormat->setAttribute(gpu::StreamFormat::SLOT_TANGENT, channelNum++, gpu::Element(gpu::Element::DIM_VEC3, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);
925 if (mesh.clusterWeights.size()) networkMesh._vertexFormat.setAttribute(gpu::StreamFormat::SLOT_SKIN_CLUSTER_WEIGHT, channelNum++, gpu::Element(gpu::Element::DIM_VEC4, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);928 if (mesh.colors.size()) networkMesh._vertexFormat->setAttribute(gpu::StreamFormat::SLOT_COLOR, channelNum++, gpu::Element(gpu::Element::DIM_VEC3, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);
929 if (mesh.texCoords.size()) networkMesh._vertexFormat->setAttribute(gpu::StreamFormat::SLOT_TEXCOORD, channelNum++, gpu::Element(gpu::Element::DIM_VEC2, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);
930 if (mesh.clusterIndices.size()) networkMesh._vertexFormat->setAttribute(gpu::StreamFormat::SLOT_SKIN_CLUSTER_INDEX, channelNum++, gpu::Element(gpu::Element::DIM_VEC4, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);
931 if (mesh.clusterWeights.size()) networkMesh._vertexFormat->setAttribute(gpu::StreamFormat::SLOT_SKIN_CLUSTER_WEIGHT, channelNum++, gpu::Element(gpu::Element::DIM_VEC4, gpu::Element::TYPE_FLOAT, gpu::Element::SEMANTIC_POS_XYZ), 0);
926 932
927 }933 }
928 }934 }