-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDescriptorSetLayoutBuilder.cpp
More file actions
56 lines (44 loc) · 1.42 KB
/
DescriptorSetLayoutBuilder.cpp
File metadata and controls
56 lines (44 loc) · 1.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include"DescriptorSetLayoutBuilder.h"
DescriptorSetLayoutBuilder::DescriptorSetLayoutBuilder()
{
}
//プロパティの初期化
std::shared_ptr<DescriptorSetLayoutBuilder> DescriptorSetLayoutBuilder::initProperty()
{
properties.clear();
return shared_from_this();
}
//タイプと使うシェーダの設定
std::shared_ptr<DescriptorSetLayoutBuilder> DescriptorSetLayoutBuilder::setProperty(VkDescriptorType type, VkShaderStageFlagBits stage)
{
properties.push_back({ type,stage });
return shared_from_this();
}
//フラグを複合させたとき用
std::shared_ptr<DescriptorSetLayoutBuilder> DescriptorSetLayoutBuilder::setProperty(int type, int stage)
{
properties.push_back({ static_cast<VkDescriptorType>(type),static_cast<VkShaderStageFlagBits>(stage) });
return shared_from_this();
}
//VkDescriptorSetLayoutの作成
std::vector<VkDescriptorSetLayoutBinding> DescriptorSetLayoutBuilder::Build()
{
if (properties.size() == 0)
{
throw std::runtime_error("DescriptorSetLayoutBuilder : Build() : プロパティが設定されていません");
}
std::vector<VkDescriptorSetLayoutBinding> bindings(properties.size());
for (int i = 0; i < bindings.size(); i++)
{
VkDescriptorSetLayoutBinding binding{};
binding.binding = i;
binding.descriptorCount = 1;
binding.descriptorType = properties[i].first;
binding.pImmutableSamplers = nullptr;
binding.stageFlags = properties[i].second;
bindings[i] = binding;
}
//プロパティの初期化
initProperty();
return bindings;
}