void ModelViewer::RenderObjects( GraphicsContext& gfxContext, const Matrix4& ViewProjMat ) { struct VSConstants { Matrix4 modelToProjection; Matrix4 modelToShadow; XMFLOAT3 viewerPos; } vsConstants; vsConstants.modelToProjection = ViewProjMat; vsConstants.modelToShadow = m_SunShadow.GetShadowMatrix(); XMStoreFloat3(&vsConstants.viewerPos, m_Camera.GetPosition()); gfxContext.SetDynamicConstantBufferView(0, sizeof(vsConstants), &vsConstants); uint32_t materialIdx = 0xFFFFFFFFul; uint32_t VertexStride = m_Model.m_VertexStride; for (unsigned int meshIndex = 0; meshIndex < m_Model.m_Header.meshCount; meshIndex++) { const Model::Mesh& mesh = m_Model.m_pMesh[meshIndex]; uint32_t indexCount = mesh.indexCount; uint32_t startIndex = mesh.indexDataByteOffset / sizeof(uint16_t); uint32_t baseVertex = mesh.vertexDataByteOffset / VertexStride; if (mesh.materialIndex != materialIdx) { materialIdx = mesh.materialIndex; gfxContext.SetDynamicDescriptors(3, 0, 6, m_Model.GetSRVs(materialIdx) ); } #if USE_VERTEX_BUFFER gfxContext.DrawIndexed(indexCount, startIndex, baseVertex); #else gfxContext.SetConstants(5, baseVertex); gfxContext.DrawIndexed(indexCount, startIndex); #endif } }