Polyphase Game Engine
Loading...
Searching...
No Matches
DescriptorSet.h
Go to the documentation of this file.
1#pragma once
2
3#if API_VULKAN
4
7
9
10#include <stdint.h>
11#include <vulkan/vulkan.h>
12
13class Buffer;
14class UniformBuffer;
15struct UniformBlock;
16
17struct DescriptorBinding
18{
19 VkDescriptorType mType = VK_DESCRIPTOR_TYPE_MAX_ENUM;
20 void* mObject = nullptr;
21 uint32_t mOffset = 0;
22 uint32_t mSize = 0; // Only filled for Uniform Blocks
23 uint32_t mCount = 1;
24 std::vector<Image*> mImageArray;
25
26 int32_t mBinding = -1;
27};
28
29class DescriptorSet
30{
31public:
32
33 static DescriptorSet Begin(const char* name = "");
34
35 // Updates the current frame's descriptor.
36 DescriptorSet& WriteImage(int32_t binding, Image* image);
37 DescriptorSet& WriteImageArray(int32_t binding, const std::vector<Image*>& imageArray);
38 DescriptorSet& WriteUniformBuffer(int32_t binding, UniformBuffer* uniformBuffer);
39 DescriptorSet& WriteUniformBuffer(int32_t binding, const UniformBlock& block);
40 DescriptorSet& WriteStorageBuffer(int32_t binding, Buffer* storageBuffer);
41 DescriptorSet& WriteStorageImage(int32_t binding, Image* storageImage);
42
43 DescriptorSet& Build();
44
45 void Bind(VkCommandBuffer cb, uint32_t index);
46
47 VkDescriptorSet Get() const;
48 VkDescriptorSetLayout GetLayout() const;
49
50private:
51
52 void UpdateDescriptors();
53
54 std::vector<DescriptorBinding> mBindings;
55 //std::vector<VkDescriptorImageInfo> mImages;
56 //std::vector<VkDescriptorBufferInfo> mBuffers;
57
58 VkDescriptorSet mDescriptorSet = VK_NULL_HANDLE;
59 VkDescriptorSetLayout mLayout = VK_NULL_HANDLE;
60 uint32_t mFrameBuilt = UINT_MAX;
61 const char* mName = nullptr;
62};
63
64#endif // API_VULKAN