#pragma once #define VULKAN_HPP_NO_STRUCT_CONSTRUCTORS #include #include #include #include /* Uniform: * * layout (set = 0, binding = 0) uniform Matrices { * vec2 viewport; * float time; * vec3 cam_pos; * vec3 cam_dir; * }; * */ struct UniformData { glm::vec2 viewport; float time; glm::vec3 cam_pos; glm::vec3 cam_dir; }; struct UniformBuffer { UniformBuffer(vk::PhysicalDevice phys_dev, vk::Device dev); std::unique_ptr buffer; void upload(const UniformData& data); inline operator vk::Buffer& () const { return *buffer; } inline vk::DescriptorSetLayoutBinding binding(uint32_t binding, vk::ShaderStageFlags stages = vk::ShaderStageFlagBits::eAll) { return vk::DescriptorSetLayoutBinding { .binding = binding, .descriptorType = vk::DescriptorType::eUniformBuffer, .descriptorCount = 1, .stageFlags = stages, .pImmutableSamplers = nullptr, }; } };