| 1179 | } |
| 1180 | |
| 1181 | void Scene::UpdateMaterial(const std::shared_ptr<Material>& material) |
| 1182 | { |
| 1183 | material->FillConstantBuffer(m_Resources->materialData[material->materialID], m_UseResourceDescriptorHeapBindless); |
| 1184 | } |
| 1185 | |
| 1186 | void 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; |
nothing calls this directly
no test coverage detected