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
878878 mesh.clusterWeights.size() * sizeof(glm::vec4), (gpu::Resource::Byte*) mesh.clusterWeights.constData());
879879
880880 // otherwise, at least the cluster indices/weights can be static
881− networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, 0, sizeof(glm::vec3));
882− if (mesh.normals.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, normalsOffset, sizeof(glm::vec3));
883− if (mesh.tangents.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, tangentsOffset, sizeof(glm::vec3));
884− if (mesh.colors.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, colorsOffset, sizeof(glm::vec3));
885− if (mesh.texCoords.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, texCoordsOffset, sizeof(glm::vec2));
886− if (mesh.clusterIndices.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, clusterIndicesOffset, sizeof(glm::vec4));
887− if (mesh.clusterWeights.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, clusterWeightsOffset, sizeof(glm::vec4));
881+ networkMesh._vertexStream = gpu::StreamPtr(new gpu::Stream());
882+ networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, 0, sizeof(glm::vec3));
883+ if (mesh.normals.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, normalsOffset, sizeof(glm::vec3));
884+ if (mesh.tangents.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, tangentsOffset, sizeof(glm::vec3));
885+ if (mesh.colors.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, colorsOffset, sizeof(glm::vec3));
886+ if (mesh.texCoords.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, texCoordsOffset, sizeof(glm::vec2));
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));
888889
889890 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− 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− 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.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.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.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.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);
891+ networkMesh._vertexFormat = gpu::StreamFormatPtr(new gpu::StreamFormat());
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);
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);
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);
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);
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);
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);
897899 }
898900 else {
899901 int colorsOffset = mesh.tangents.size() * sizeof(glm::vec3);
@@ -911,18 +913,22 @@ void NetworkGeometry::setGeometry(const FBXGeometry& geometry) { · 11 unmodified lines
911913 networkMesh._vertexBuffer->setSubData(clusterWeightsOffset,
912914 mesh.clusterWeights.size() * sizeof(glm::vec4), (gpu::Resource::Byte*) mesh.clusterWeights.constData());
913915
914− if (mesh.tangents.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, 0, sizeof(glm::vec3));
915− if (mesh.colors.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, colorsOffset, sizeof(glm::vec3));
916− if (mesh.texCoords.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, texCoordsOffset, sizeof(glm::vec2));
917− if (mesh.clusterIndices.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, clusterIndicesOffset, sizeof(glm::vec4));
918− if (mesh.clusterWeights.size()) networkMesh._vertexStream.addBuffer(networkMesh._vertexBuffer, clusterWeightsOffset, sizeof(glm::vec4));
916+ networkMesh._vertexStream = gpu::StreamPtr(new gpu::Stream());
917+ if (mesh.tangents.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, 0, sizeof(glm::vec3));
918+ if (mesh.colors.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, colorsOffset, sizeof(glm::vec3));
919+ if (mesh.texCoords.size()) networkMesh._vertexStream->addBuffer(networkMesh._vertexBuffer, texCoordsOffset, sizeof(glm::vec2));
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));
919922
920923 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);
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);
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);
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);
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);
924+ networkMesh._vertexFormat = gpu::StreamFormatPtr(new gpu::StreamFormat());
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);
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);
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);
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);
926932
927933 }
928934 }