MCPcopy Create free account
hub / github.com/NVIDIA-RTX/Donut / UpdateGeometry

Method UpdateGeometry

src/engine/Scene.cpp:1181–1211  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1179}
1180
1181void Scene::UpdateMaterial(const std::shared_ptr<Material>& material)
1182{
1183 material->FillConstantBuffer(m_Resources->materialData[material->materialID], m_UseResourceDescriptorHeapBindless);
1184}
1185
1186void Scene::UpdateGeometry(const std::shared_ptr<MeshInfo>& mesh)
1187{
1188 // TODO: support 64-bit buffer offsets in the CB.
1189 for (const auto& geometry : mesh->geometries)
1190 {
1191 uint32_t indexOffset = mesh->indexOffset + geometry->indexOffsetInMesh;
1192 uint32_t vertexOffset = mesh->vertexOffset + geometry->vertexOffsetInMesh;
1193
1194 GeometryData& gdata = m_Resources->geometryData[geometry->globalGeometryIndex];
1195 gdata.numIndices = geometry->numIndices;
1196 gdata.numVertices = geometry->numVertices;
1197 gdata.indexBufferIndex = mesh->buffers->indexBufferDescriptor ? mesh->buffers->indexBufferDescriptor->Get() : -1;
1198 gdata.indexOffset = indexOffset * sizeof(uint32_t);
1199 gdata.vertexBufferIndex = mesh->buffers->vertexBufferDescriptor ? mesh->buffers->vertexBufferDescriptor->Get() : -1;
1200 gdata.positionOffset = mesh->buffers->hasAttribute(VertexAttribute::Position)
1201 ? uint32_t(vertexOffset * sizeof(float3) + mesh->buffers->getVertexBufferRange(VertexAttribute::Position).byteOffset) : ~0u;
1202 gdata.prevPositionOffset = mesh->buffers->hasAttribute(VertexAttribute::PrevPosition)
1203 ? uint32_t(vertexOffset * sizeof(float3) + mesh->buffers->getVertexBufferRange(VertexAttribute::PrevPosition).byteOffset) : ~0u;
1204 gdata.texCoord1Offset = mesh->buffers->hasAttribute(VertexAttribute::TexCoord1)
1205 ? uint32_t(vertexOffset * sizeof(float2) + mesh->buffers->getVertexBufferRange(VertexAttribute::TexCoord1).byteOffset) : ~0u;
1206 gdata.texCoord2Offset = mesh->buffers->hasAttribute(VertexAttribute::TexCoord2)
1207 ? uint32_t(vertexOffset * sizeof(float2) + mesh->buffers->getVertexBufferRange(VertexAttribute::TexCoord2).byteOffset) : ~0u;
1208 gdata.normalOffset = mesh->buffers->hasAttribute(VertexAttribute::Normal)
1209 ? uint32_t(vertexOffset * sizeof(uint32_t) + mesh->buffers->getVertexBufferRange(VertexAttribute::Normal).byteOffset) : ~0u;
1210 gdata.tangentOffset = mesh->buffers->hasAttribute(VertexAttribute::Tangent)
1211 ? uint32_t(vertexOffset * sizeof(uint32_t) + mesh->buffers->getVertexBufferRange(VertexAttribute::Tangent).byteOffset) : ~0u;
1212 gdata.curveRadiusOffset = mesh->buffers->hasAttribute(VertexAttribute::CurveRadius)
1213 ? uint32_t(vertexOffset * sizeof(float) + mesh->buffers->getVertexBufferRange(VertexAttribute::CurveRadius).byteOffset) : ~0u;
1214 gdata.materialIndex = geometry->material ? geometry->material->materialID : ~0u;

Callers

nothing calls this directly

Calls 2

hasAttributeMethod · 0.80
GetMethod · 0.45

Tested by

no test coverage detected