layout(set = 0, binding = 0) uniform UboVS {
mat4 mvp;
} uboVS;
layout(location = 0) in vec3 inPosition;
layout(location = 0) out vec3 fragColor;
void main() {
gl_Position = uboVS.mvp * vec4(inPosition, 1.0);
fragColor = inPosition;
}
layout(set = 1, binding = 0) uniform UboMaterial {
vec4 color;
float roughness;
} material;
layout(location = 0) in vec3 fragColor;
layout(location = 0) out vec4 outColor;
void main() {
outColor = material.color * vec4(fragColor, 1.0);
}
#include <vulkan/vulkan.h>
#include <vector>
#include <stdexcept>
#include <array>
VkDevice device;
VkPhysicalDevice physicalDevice;
uint32_t queueFamilyIndex;
struct UniformBufferObject {
glm::mat4 mvp;
};
struct MaterialProperties {
glm::vec4 color;
float roughness;
};
VkBuffer createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkDeviceMemory& bufferMemory) {
VkBuffer buffer;
return buffer;
}
class VulkanMultipleDescriptorSets {
public:
void setup() {
createDescriptorSetLayouts();
createUniformBuffers();
createDescriptorPool();
createDescriptorSets();
createPipelineLayout();
}
void cleanup() {
vkDestroyBuffer(device, uniformBufferMVP, nullptr);
vkFreeMemory(device, uniformBufferMemoryMVP