Engine²
Open-source game engine written in C++.
Loading...
Searching...
No Matches
ABindGroupLayoutEntry.hpp
Go to the documentation of this file.
1#pragma once
2
4#include "utils/webgpu.hpp"
5
6namespace Graphic::Utils {
7
8template <typename TDerived> class ABindGroupLayoutEntry : public IBindGroupLayoutEntry {
9 public:
10 explicit ABindGroupLayoutEntry(const std::string &name_) : name(name_)
11 {
12 this->entry.buffer.type = wgpu::BufferBindingType::BindingNotUsed;
13 this->entry.sampler.type = wgpu::SamplerBindingType::BindingNotUsed;
14 this->entry.texture.sampleType = wgpu::TextureSampleType::BindingNotUsed;
15 this->entry.storageTexture.access = wgpu::StorageTextureAccess::BindingNotUsed;
16 }
17 ~ABindGroupLayoutEntry() override = default;
18
19 inline const std::string &getName() const override { return this->name; }
20
21 inline const wgpu::BindGroupLayoutEntry &getEntry() const override { return this->entry; }
22
23 inline TDerived &setBinding(uint32_t binding)
24 {
25 this->entry.binding = binding;
26 this->isBindingSet = true;
27 return static_cast<TDerived &>(*this);
28 }
29
30 inline TDerived &setVisibility(wgpu::ShaderStage visibility)
31 {
32 this->entry.visibility = visibility;
33 this->isVisibilitySet = true;
34 return static_cast<TDerived &>(*this);
35 }
36
37 std::vector<ValidationError> validate(void) const override
38 {
39 std::vector<ValidationError> errors;
40 if (!this->isBindingSet)
41 {
42 errors.emplace_back("Binding is not set", "BindGroupLayoutEntry: " + this->name,
44 }
45 if (!this->isVisibilitySet)
46 {
47 errors.emplace_back("Visibility is not set", "BindGroupLayoutEntry: " + this->name,
49 }
50 return errors;
51 }
52
53 protected:
54 inline wgpu::BindGroupLayoutEntry &getEntry() { return this->entry; }
55
56 private:
57 wgpu::BindGroupLayoutEntry entry = wgpu::BindGroupLayoutEntry(wgpu::Default);
58 bool isBindingSet = false;
59 bool isVisibilitySet = false;
60 std::string name;
61};
62} // namespace Graphic::Utils
wgpu::BindGroupLayoutEntry & getEntry()
Definition ABindGroupLayoutEntry.hpp:54
bool isVisibilitySet
Definition ABindGroupLayoutEntry.hpp:59
const wgpu::BindGroupLayoutEntry & getEntry() const override
Definition ABindGroupLayoutEntry.hpp:21
TDerived & setVisibility(wgpu::ShaderStage visibility)
Definition ABindGroupLayoutEntry.hpp:30
const std::string & getName() const override
Definition ABindGroupLayoutEntry.hpp:19
~ABindGroupLayoutEntry() override=default
std::vector< ValidationError > validate(void) const override
Definition ABindGroupLayoutEntry.hpp:37
TDerived & setBinding(uint32_t binding)
Definition ABindGroupLayoutEntry.hpp:23
bool isBindingSet
Definition ABindGroupLayoutEntry.hpp:58
ABindGroupLayoutEntry(const std::string &name_)
Definition ABindGroupLayoutEntry.hpp:10
std::string name
Definition ABindGroupLayoutEntry.hpp:60
wgpu::BindGroupLayoutEntry entry
Definition ABindGroupLayoutEntry.hpp:57
Definition IBindGroupLayoutEntry.hpp:8
Definition DefaultSampler.hpp:6
constexpr DefaultFlag Default
Definition webgpu.hpp:78
@ Error
Definition IValidable.hpp:14