Trying to fix flickering lighting

This commit is contained in:
Dynamitos
2024-03-28 09:48:55 +01:00
parent 6b197b0b56
commit 05eff8ca6f
2 changed files with 28 additions and 3 deletions
+3 -3
View File
@@ -57,6 +57,6 @@ target_sources(Engine
add_subdirectory(RenderPass/) add_subdirectory(RenderPass/)
add_subdirectory(Vulkan/) add_subdirectory(Vulkan/)
if(APPLE) #if(APPLE)
add_subdirectory(Metal/) # add_subdirectory(Metal/)
endif() #endif()
+25
View File
@@ -60,6 +60,19 @@ void LightEnvironment::addPointLight(Component::PointLight pointLight)
void LightEnvironment::commit() 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.numDirectionalLights = dirs.size();
lightEnv.numPointLights = points.size(); lightEnv.numPointLights = points.size();
lightEnvBuffer->updateContents(DataSource{ lightEnvBuffer->updateContents(DataSource{
@@ -102,6 +115,18 @@ void LightEnvironment::commit()
.data = (uint8*)points.data(), .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(0, lightEnvBuffer);
set->updateBuffer(1, directionalLights); set->updateBuffer(1, directionalLights);
set->updateBuffer(2, pointLights); set->updateBuffer(2, pointLights);