diff --git a/data/shaders/multiview/viewdisplay.frag b/data/shaders/multiview/viewdisplay.frag index daf2e282..0549b851 100644 --- a/data/shaders/multiview/viewdisplay.frag +++ b/data/shaders/multiview/viewdisplay.frag @@ -2,6 +2,11 @@ layout (binding = 1) uniform sampler2DArray samplerView; +layout (binding = 0) uniform UBO +{ + layout(offset = 272) float distortionAlpha; +} ubo; + layout (location = 0) in vec2 inUV; layout (location = 0) out vec4 outColor; @@ -9,7 +14,7 @@ layout (constant_id = 0) const float VIEW_LAYER = 0.0f; void main() { - const float alpha = 0.2; + const float alpha = ubo.distortionAlpha; vec2 p1 = vec2(2.0 * inUV - 1.0); vec2 p2 = p1 / (1.0 - alpha * length(p1)); diff --git a/data/shaders/multiview/viewdisplay.frag.spv b/data/shaders/multiview/viewdisplay.frag.spv index cac563e4..464fde04 100644 Binary files a/data/shaders/multiview/viewdisplay.frag.spv and b/data/shaders/multiview/viewdisplay.frag.spv differ diff --git a/examples/multiview/multiview.cpp b/examples/multiview/multiview.cpp index 167a9bfa..f07ffa81 100644 --- a/examples/multiview/multiview.cpp +++ b/examples/multiview/multiview.cpp @@ -56,6 +56,7 @@ public: glm::mat4 projection[2]; glm::mat4 modelview[2]; glm::vec4 lightPos = glm::vec4(-2.5f, -3.5f, 0.0f, 1.0f); + float distortionAlpha = 0.2f; } ubo; vks::Buffer uniformBuffer; @@ -470,7 +471,7 @@ public: Layouts */ std::vector setLayoutBindings = { - vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), + vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0), vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 1) }; VkDescriptorSetLayoutCreateInfo descriptorLayout = vks::initializers::descriptorSetLayoutCreateInfo(setLayoutBindings); @@ -484,7 +485,6 @@ public: VkDescriptorSetAllocateInfo allocateInfo = vks::initializers::descriptorSetAllocateInfo(descriptorPool, &descriptorSetLayout, 1); VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocateInfo, &descriptorSet)); std::vector writeDescriptorSets = { - // Binding 0: Vertex shader UBO vks::initializers::writeDescriptorSet(descriptorSet, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffer.descriptor), vks::initializers::writeDescriptorSet(descriptorSet, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &multiviewPass.descriptor), }; @@ -726,6 +726,9 @@ public: if (overlay->sliderFloat("Eye separation", &eyeSeparation, -1.0f, 1.0f)) { updateUniformBuffers(); } + if (overlay->sliderFloat("Barrel distortion", &ubo.distortionAlpha, -0.6f, 0.6f)) { + updateUniformBuffers(); + } } }