Code cleanup

This commit is contained in:
Sascha Willems 2024-01-19 13:38:29 +01:00
parent 9ac41c788d
commit 54f25af1d4
2 changed files with 169 additions and 214 deletions

View file

@ -36,12 +36,12 @@ public:
vkglTF::Model floor;
} models;
struct {
struct UniformDataOffscreen {
glm::mat4 projection;
glm::mat4 model;
glm::mat4 view;
glm::vec4 instancePos[3];
} uboOffscreenVS;
} uniformDataOffscreen;
struct Light {
glm::vec4 position;
@ -49,11 +49,11 @@ public:
float radius;
};
struct {
struct UniformDataComposition {
Light lights[6];
glm::vec4 viewPos;
int debugDisplayTarget = 0;
} uboComposition;
} uniformDataComposition;
struct {
vks::Buffer offscreen{ VK_NULL_HANDLE };
@ -583,8 +583,8 @@ public:
void preparePipelines()
{
// Pipeline layout
VkPipelineLayoutCreateInfo pPipelineLayoutCreateInfo = vks::initializers::pipelineLayoutCreateInfo(&descriptorSetLayout, 1);
VK_CHECK_RESULT(vkCreatePipelineLayout(device, &pPipelineLayoutCreateInfo, nullptr, &pipelineLayout));
VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo = vks::initializers::pipelineLayoutCreateInfo(&descriptorSetLayout, 1);
VK_CHECK_RESULT(vkCreatePipelineLayout(device, &pipelineLayoutCreateInfo, nullptr, &pipelineLayout));
// Pipelines
VkPipelineInputAssemblyStateCreateInfo inputAssemblyState = vks::initializers::pipelineInputAssemblyStateCreateInfo(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, 0, VK_FALSE);
@ -648,19 +648,19 @@ public:
void prepareUniformBuffers()
{
// Offscreen vertex shader
VK_CHECK_RESULT(vulkanDevice->createBuffer(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, &uniformBuffers.offscreen, sizeof(uboOffscreenVS)));
VK_CHECK_RESULT(vulkanDevice->createBuffer(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, &uniformBuffers.offscreen, sizeof(UniformDataOffscreen)));
// Deferred fragment shader
VK_CHECK_RESULT(vulkanDevice->createBuffer(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, &uniformBuffers.composition, sizeof(uboComposition)));
VK_CHECK_RESULT(vulkanDevice->createBuffer(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, &uniformBuffers.composition, sizeof(UniformDataComposition)));
// Map persistent
VK_CHECK_RESULT(uniformBuffers.offscreen.map());
VK_CHECK_RESULT(uniformBuffers.composition.map());
// Setup instanced model positions
uboOffscreenVS.instancePos[0] = glm::vec4(0.0f);
uboOffscreenVS.instancePos[1] = glm::vec4(-4.0f, 0.0, -4.0f, 0.0f);
uboOffscreenVS.instancePos[2] = glm::vec4(4.0f, 0.0, -4.0f, 0.0f);
uniformDataOffscreen.instancePos[0] = glm::vec4(0.0f);
uniformDataOffscreen.instancePos[1] = glm::vec4(-4.0f, 0.0, -4.0f, 0.0f);
uniformDataOffscreen.instancePos[2] = glm::vec4(4.0f, 0.0, -4.0f, 0.0f);
// Update
updateUniformBufferOffscreen();
@ -670,64 +670,64 @@ public:
// Update matrices used for the offscreen rendering of the scene
void updateUniformBufferOffscreen()
{
uboOffscreenVS.projection = camera.matrices.perspective;
uboOffscreenVS.view = camera.matrices.view;
uboOffscreenVS.model = glm::mat4(1.0f);
memcpy(uniformBuffers.offscreen.mapped, &uboOffscreenVS, sizeof(uboOffscreenVS));
uniformDataOffscreen.projection = camera.matrices.perspective;
uniformDataOffscreen.view = camera.matrices.view;
uniformDataOffscreen.model = glm::mat4(1.0f);
memcpy(uniformBuffers.offscreen.mapped, &uniformDataOffscreen, sizeof(UniformDataOffscreen));
}
// Update lights and parameters passed to the composition shaders
void updateUniformBufferComposition()
{
// White
uboComposition.lights[0].position = glm::vec4(0.0f, 0.0f, 1.0f, 0.0f);
uboComposition.lights[0].color = glm::vec3(1.5f);
uboComposition.lights[0].radius = 15.0f * 0.25f;
uniformDataComposition.lights[0].position = glm::vec4(0.0f, 0.0f, 1.0f, 0.0f);
uniformDataComposition.lights[0].color = glm::vec3(1.5f);
uniformDataComposition.lights[0].radius = 15.0f * 0.25f;
// Red
uboComposition.lights[1].position = glm::vec4(-2.0f, 0.0f, 0.0f, 0.0f);
uboComposition.lights[1].color = glm::vec3(1.0f, 0.0f, 0.0f);
uboComposition.lights[1].radius = 15.0f;
uniformDataComposition.lights[1].position = glm::vec4(-2.0f, 0.0f, 0.0f, 0.0f);
uniformDataComposition.lights[1].color = glm::vec3(1.0f, 0.0f, 0.0f);
uniformDataComposition.lights[1].radius = 15.0f;
// Blue
uboComposition.lights[2].position = glm::vec4(2.0f, -1.0f, 0.0f, 0.0f);
uboComposition.lights[2].color = glm::vec3(0.0f, 0.0f, 2.5f);
uboComposition.lights[2].radius = 5.0f;
uniformDataComposition.lights[2].position = glm::vec4(2.0f, -1.0f, 0.0f, 0.0f);
uniformDataComposition.lights[2].color = glm::vec3(0.0f, 0.0f, 2.5f);
uniformDataComposition.lights[2].radius = 5.0f;
// Yellow
uboComposition.lights[3].position = glm::vec4(0.0f, -0.9f, 0.5f, 0.0f);
uboComposition.lights[3].color = glm::vec3(1.0f, 1.0f, 0.0f);
uboComposition.lights[3].radius = 2.0f;
uniformDataComposition.lights[3].position = glm::vec4(0.0f, -0.9f, 0.5f, 0.0f);
uniformDataComposition.lights[3].color = glm::vec3(1.0f, 1.0f, 0.0f);
uniformDataComposition.lights[3].radius = 2.0f;
// Green
uboComposition.lights[4].position = glm::vec4(0.0f, -0.5f, 0.0f, 0.0f);
uboComposition.lights[4].color = glm::vec3(0.0f, 1.0f, 0.2f);
uboComposition.lights[4].radius = 5.0f;
uniformDataComposition.lights[4].position = glm::vec4(0.0f, -0.5f, 0.0f, 0.0f);
uniformDataComposition.lights[4].color = glm::vec3(0.0f, 1.0f, 0.2f);
uniformDataComposition.lights[4].radius = 5.0f;
// Yellow
uboComposition.lights[5].position = glm::vec4(0.0f, -1.0f, 0.0f, 0.0f);
uboComposition.lights[5].color = glm::vec3(1.0f, 0.7f, 0.3f);
uboComposition.lights[5].radius = 25.0f;
uniformDataComposition.lights[5].position = glm::vec4(0.0f, -1.0f, 0.0f, 0.0f);
uniformDataComposition.lights[5].color = glm::vec3(1.0f, 0.7f, 0.3f);
uniformDataComposition.lights[5].radius = 25.0f;
// Animate the lights
if (!paused) {
uboComposition.lights[0].position.x = sin(glm::radians(360.0f * timer)) * 5.0f;
uboComposition.lights[0].position.z = cos(glm::radians(360.0f * timer)) * 5.0f;
uniformDataComposition.lights[0].position.x = sin(glm::radians(360.0f * timer)) * 5.0f;
uniformDataComposition.lights[0].position.z = cos(glm::radians(360.0f * timer)) * 5.0f;
uboComposition.lights[1].position.x = -4.0f + sin(glm::radians(360.0f * timer) + 45.0f) * 2.0f;
uboComposition.lights[1].position.z = 0.0f + cos(glm::radians(360.0f * timer) + 45.0f) * 2.0f;
uniformDataComposition.lights[1].position.x = -4.0f + sin(glm::radians(360.0f * timer) + 45.0f) * 2.0f;
uniformDataComposition.lights[1].position.z = 0.0f + cos(glm::radians(360.0f * timer) + 45.0f) * 2.0f;
uboComposition.lights[2].position.x = 4.0f + sin(glm::radians(360.0f * timer)) * 2.0f;
uboComposition.lights[2].position.z = 0.0f + cos(glm::radians(360.0f * timer)) * 2.0f;
uniformDataComposition.lights[2].position.x = 4.0f + sin(glm::radians(360.0f * timer)) * 2.0f;
uniformDataComposition.lights[2].position.z = 0.0f + cos(glm::radians(360.0f * timer)) * 2.0f;
uboComposition.lights[4].position.x = 0.0f + sin(glm::radians(360.0f * timer + 90.0f)) * 5.0f;
uboComposition.lights[4].position.z = 0.0f - cos(glm::radians(360.0f * timer + 45.0f)) * 5.0f;
uniformDataComposition.lights[4].position.x = 0.0f + sin(glm::radians(360.0f * timer + 90.0f)) * 5.0f;
uniformDataComposition.lights[4].position.z = 0.0f - cos(glm::radians(360.0f * timer + 45.0f)) * 5.0f;
uboComposition.lights[5].position.x = 0.0f + sin(glm::radians(-360.0f * timer + 135.0f)) * 10.0f;
uboComposition.lights[5].position.z = 0.0f - cos(glm::radians(-360.0f * timer - 45.0f)) * 10.0f;
uniformDataComposition.lights[5].position.x = 0.0f + sin(glm::radians(-360.0f * timer + 135.0f)) * 10.0f;
uniformDataComposition.lights[5].position.z = 0.0f - cos(glm::radians(-360.0f * timer - 45.0f)) * 10.0f;
}
// Current view position
uboComposition.viewPos = glm::vec4(camera.position, 0.0f) * glm::vec4(-1.0f, 1.0f, -1.0f, 1.0f);
uniformDataComposition.viewPos = glm::vec4(camera.position, 0.0f) * glm::vec4(-1.0f, 1.0f, -1.0f, 1.0f);
uboComposition.debugDisplayTarget = debugDisplayTarget;
uniformDataComposition.debugDisplayTarget = debugDisplayTarget;
memcpy(uniformBuffers.composition.mapped, &uboComposition, sizeof(uboComposition));
memcpy(uniformBuffers.composition.mapped, &uniformDataComposition, sizeof(UniformDataComposition));
}
void prepare()