@@ -21,6 +21,7 @@ VulkanRenderer::VulkanRenderer(const RendererConfig& config, Window& window, Cam
2121 m_uniformManager = std::make_unique<UniformManager>(*m_allocator, m_frameManager->getFramesInFlightCount ());
2222 m_uniformManager->registerUBO <SceneUBO>(" scene" );
2323 m_uniformManager->registerUBO <CompositeUBO>(" composite" );
24+ m_uniformManager->registerUBO <DirectionalLightUBO>(" lighting" );
2425
2526 createPipelineAndDescriptors ();
2627 setupUI ();
@@ -60,6 +61,8 @@ void VulkanRenderer::createPipelineAndDescriptors()
6061
6162 const std::vector bindings = {
6263 vk::DescriptorSetLayoutBinding (0 , vk::DescriptorType::eUniformBuffer, 1 , vk::ShaderStageFlagBits::eVertex),
64+ vk::DescriptorSetLayoutBinding (1 , vk::DescriptorType::eUniformBuffer, 1 , vk::ShaderStageFlagBits::eFragment)
65+
6366 };
6467 m_descriptorSet = std::make_unique<DescriptorSet>(m_context->device (), 2 , bindings);
6568 const std::vector setLayouts = {m_descriptorSet->getLayout ()};
@@ -266,17 +269,31 @@ void VulkanRenderer::drawFrame()
266269 ubo.view = m_camera.getViewMatrix ();
267270 ubo.projection = m_camera.getProjectionMatrix ();
268271
272+ m_uniformManager->update <DirectionalLightUBO>(frameIdx, m_light);
273+
269274 m_uniformManager->update <SceneUBO>(frameIdx, ubo);
270275
276+ // Get descriptor info for both UBOs
271277 vk::DescriptorBufferInfo sceneBufferInfo = m_uniformManager->getDescriptorInfo <SceneUBO>(frameIdx);
278+ vk::DescriptorBufferInfo lightBufferInfo = m_uniformManager->getDescriptorInfo <DirectionalLightUBO>(frameIdx);
279+
280+ // Create write for Scene UBO at binding 0
272281 vk::WriteDescriptorSet sceneWrite{};
273282 sceneWrite.dstSet = m_descriptorSet->getCurrentSet (frameIdx);
274283 sceneWrite.dstBinding = 0 ;
275284 sceneWrite.descriptorType = vk::DescriptorType::eUniformBuffer;
276285 sceneWrite.descriptorCount = 1 ;
277286 sceneWrite.pBufferInfo = &sceneBufferInfo;
278287
279- m_descriptorSet->updateSet ({sceneWrite});
288+ // Create write for Light UBO at binding 1
289+ vk::WriteDescriptorSet lightWrite{};
290+ lightWrite.dstSet = m_descriptorSet->getCurrentSet (frameIdx);
291+ lightWrite.dstBinding = 1 ; // Target binding 1
292+ lightWrite.descriptorType = vk::DescriptorType::eUniformBuffer;
293+ lightWrite.descriptorCount = 1 ;
294+ lightWrite.pBufferInfo = &lightBufferInfo;
295+
296+ m_descriptorSet->updateSet ({sceneWrite, lightWrite});
280297
281298 beginCommandBuffer (cmd);
282299
0 commit comments