From 05eff8ca6fcee87765db9b9bd89121965fdf2797 Mon Sep 17 00:00:00 2001 From: Dynamitos Date: Thu, 28 Mar 2024 09:48:55 +0100 Subject: [PATCH] Trying to fix flickering lighting --- src/Engine/Graphics/CMakeLists.txt | 6 +++--- src/Engine/Scene/LightEnvironment.cpp | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/Engine/Graphics/CMakeLists.txt b/src/Engine/Graphics/CMakeLists.txt index fe1ec82..e197bc6 100644 --- a/src/Engine/Graphics/CMakeLists.txt +++ b/src/Engine/Graphics/CMakeLists.txt @@ -57,6 +57,6 @@ target_sources(Engine add_subdirectory(RenderPass/) add_subdirectory(Vulkan/) -if(APPLE) - add_subdirectory(Metal/) -endif() \ No newline at end of file +#if(APPLE) +# add_subdirectory(Metal/) +#endif() \ No newline at end of file diff --git a/src/Engine/Scene/LightEnvironment.cpp b/src/Engine/Scene/LightEnvironment.cpp index d5b0205..2b67b32 100644 --- a/src/Engine/Scene/LightEnvironment.cpp +++ b/src/Engine/Scene/LightEnvironment.cpp @@ -60,6 +60,19 @@ void LightEnvironment::addPointLight(Component::PointLight pointLight) void LightEnvironment::commit() { + + lightEnvBuffer->pipelineBarrier( + Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_ALL_COMMANDS_BIT, + Gfx::SE_ACCESS_TRANSFER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_TRANSFER_BIT + ); + pointLights->pipelineBarrier( + Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_ALL_COMMANDS_BIT, + Gfx::SE_ACCESS_TRANSFER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_TRANSFER_BIT + ); + directionalLights->pipelineBarrier( + Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_ALL_COMMANDS_BIT, + Gfx::SE_ACCESS_TRANSFER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_TRANSFER_BIT + ); lightEnv.numDirectionalLights = dirs.size(); lightEnv.numPointLights = points.size(); lightEnvBuffer->updateContents(DataSource{ @@ -102,6 +115,18 @@ void LightEnvironment::commit() .data = (uint8*)points.data(), }); } + lightEnvBuffer->pipelineBarrier( + Gfx::SE_ACCESS_TRANSFER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_TRANSFER_BIT, + Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_ALL_COMMANDS_BIT + ); + pointLights->pipelineBarrier( + Gfx::SE_ACCESS_TRANSFER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_TRANSFER_BIT, + Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_ALL_COMMANDS_BIT + ); + directionalLights->pipelineBarrier( + Gfx::SE_ACCESS_TRANSFER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_TRANSFER_BIT, + Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_ALL_COMMANDS_BIT + ); set->updateBuffer(0, lightEnvBuffer); set->updateBuffer(1, directionalLights); set->updateBuffer(2, pointLights);