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;
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 std::move(Binding(samplerPtr, BindingType::Sampler, count));
30 }
31
32 static Binding&& CombinedImageSampler(std::pair<Image*, GraphicsAPI::Sampler*>* combinedSamplerPtr, uint32_t count = 1) {
33 return std::move(Binding(combinedSamplerPtr, BindingType::CombinedImageSampler, count));
34 }
35
36 static Binding&& SampledImage(GraphicsAPI::Image* imagePtr, uint32_t count = 1) {
37 return std::move(Binding(imagePtr, BindingType::SampledImage, count));
38 }
39
40 static Binding&& StorageImage(GraphicsAPI::Image* imagePtr, uint32_t count = 1) {
41 return std::move(Binding(imagePtr, BindingType::StorageImage, count));
42 }
43
44 static Binding&& UniformTexelBuffer(GraphicsAPI::Image* imagePtr, uint32_t count = 1) {
45 return std::move(Binding(imagePtr, BindingType::UniformTexelBuffer, count));
46 }
47
48 static Binding&& StorageTexelBuffer(GraphicsAPI::Image* imagePtr, uint32_t count = 1) {
49 return std::move(Binding(imagePtr, BindingType::StorageTexelBuffer, count));
50 }
51
52 static Binding&& UniformBuffer(GraphicsAPI::Buffer* bufferPtr, uint32_t count = 1) {
53 return std::move(Binding(bufferPtr, BindingType::UniformBuffer, count));
54 }
55
56 static Binding&& StorageBuffer(GraphicsAPI::Buffer* bufferPtr, uint32_t count = 1) {
57 return std::move(Binding(bufferPtr, BindingType::StorageBuffer, count));
58 }
59
60 static Binding&& UniformBufferDynamic(GraphicsAPI::Buffer* bufferPtr, uint32_t count = 1) {
61 return std::move(Binding(bufferPtr, BindingType::UniformBufferDynamic, count));
62 }
63
64 static Binding&& StorageBufferDynamic(GraphicsAPI::Buffer* bufferPtr, uint32_t count = 1) {
65 return std::move(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