Grindstone Game Engine v0.2.0
An open source game engine and toolkit.
Loading...
Searching...
No Matches
DescriptorSet.hpp
1#pragma once
2
3#include "DescriptorSetLayout.hpp"
4#include "Formats.hpp"
5
6namespace Grindstone::GraphicsAPI {
7 class Sampler;
8 class Image;
9 class Buffer;
10
16 public:
17 struct Binding {
18 void* itemPtr = nullptr;
19 BindingType bindingType = BindingType::None;
20 uint32_t count = 1;
21
22 Binding() = default;
23 Binding(const Binding& binding) = default;
24 Binding(Binding&& binding) = default;
25 Binding& operator=(const Binding& binding) = default;
26 Binding(void* itemPtr, BindingType bindingType, uint32_t count = 1) : itemPtr(itemPtr), bindingType(bindingType), count(count) {}
27
28 static Binding Sampler(GraphicsAPI::Sampler* samplerPtr, uint32_t count = 1) {
29 return Binding(samplerPtr, BindingType::Sampler, count);
30 }
31
32 static Binding CombinedImageSampler(std::pair<Image*, GraphicsAPI::Sampler*>* combinedSamplerPtr, uint32_t count = 1) {
33 return Binding(combinedSamplerPtr, BindingType::CombinedImageSampler, count);
34 }
35
36 static Binding SampledImage(GraphicsAPI::Image* imagePtr, uint32_t count = 1) {
37 return Binding(imagePtr, BindingType::SampledImage, count);
38 }
39
40 static Binding StorageImage(GraphicsAPI::Image* imagePtr, uint32_t count = 1) {
41 return Binding(imagePtr, BindingType::StorageImage, count);
42 }
43
44 static Binding UniformTexelBuffer(GraphicsAPI::Image* imagePtr, uint32_t count = 1) {
45 return Binding(imagePtr, BindingType::UniformTexelBuffer, count);
46 }
47
48 static Binding StorageTexelBuffer(GraphicsAPI::Image* imagePtr, uint32_t count = 1) {
49 return Binding(imagePtr, BindingType::StorageTexelBuffer, count);
50 }
51
52 static Binding UniformBuffer(GraphicsAPI::Buffer* bufferPtr, uint32_t count = 1) {
53 return Binding(bufferPtr, BindingType::UniformBuffer, count);
54 }
55
56 static Binding StorageBuffer(GraphicsAPI::Buffer* bufferPtr, uint32_t count = 1) {
57 return Binding(bufferPtr, BindingType::StorageBuffer, count);
58 }
59
60 static Binding UniformBufferDynamic(GraphicsAPI::Buffer* bufferPtr, uint32_t count = 1) {
61 return Binding(bufferPtr, BindingType::UniformBufferDynamic, count);
62 }
63
64 static Binding StorageBufferDynamic(GraphicsAPI::Buffer* bufferPtr, uint32_t count = 1) {
65 return Binding(bufferPtr, BindingType::UniformBufferDynamic, count);
66 }
67
68 };
69
70 struct CreateInfo {
71 const char* debugName = nullptr;
72 DescriptorSetLayout* layout = nullptr;
73 const Binding* bindings = nullptr;
74 uint32_t bindingCount = 0;
75 };
76 public:
77 virtual void ChangeBindings(const DescriptorSet::Binding* bindings, uint32_t bindingCount, uint32_t bindingOffset = 0) = 0;
78 };
79}
Definition Buffer.hpp:56
Definition DescriptorSetLayout.hpp:13
Definition DescriptorSet.hpp:15
Definition Image.hpp:48
Definition Sampler.hpp:31