Vulkan Schnee
0.0.1
High-performance rendering engine
Loading...
Searching...
No Matches
NextChainBuilder.h
Go to the documentation of this file.
1
#pragma once
2
#include <type_traits>
3
#include <vulkan/vulkan_core.h>
4
9
namespace
Vulkan
{
10
class
ChainBuilder
{
11
public
:
12
ChainBuilder
() :
head
(nullptr),
tail
(nullptr) {};
13
14
template
<
typename
VulkanStruct>
15
ChainBuilder
&
add
(VulkanStruct &
object
);
16
17
template
<
typename
T>
18
T*
getHead
() {
19
return
head
;
20
}
21
22
void
*
getHead
() {
23
return
head
;
24
}
25
26
private
:
27
28
struct
BaseChain
{
29
VkStructureType
sType
;
30
void
*
pNext
;
31
};
32
33
template
<
typename
T,
typename
=
void
>
34
struct
has_pNext
: std::false_type {};
35
36
template
<
typename
T>
37
struct
has_pNext
<T,
std
::void_t<decltype(std::declval<T>().pNext)>> : std::true_type {};
38
39
void
*
head
;
40
void
*
tail
;
41
42
};
43
44
template
<
typename
VulkanStruct>
45
ChainBuilder
&
ChainBuilder::add
(VulkanStruct &
object
) {
46
static_assert
(
has_pNext<VulkanStruct>::value
,
"Type must have pNext member"
);
47
48
object
.pNext =
nullptr
;
49
50
if
(!
head
) {
51
head
= &object;
52
tail
= &object;
53
}
else
{
54
static_cast<
BaseChain
*
>
(
tail
)->pNext = &
object
;
55
tail
= &object;
56
}
57
return
*
this
;
58
}
59
}
Vulkan::ChainBuilder
Definition
NextChainBuilder.h:10
Vulkan::ChainBuilder::tail
void * tail
Definition
NextChainBuilder.h:40
Vulkan::ChainBuilder::ChainBuilder
ChainBuilder()
Definition
NextChainBuilder.h:12
Vulkan::ChainBuilder::add
ChainBuilder & add(VulkanStruct &object)
Definition
NextChainBuilder.h:45
Vulkan::ChainBuilder::head
void * head
Definition
NextChainBuilder.h:39
Vulkan::ChainBuilder::getHead
T * getHead()
Definition
NextChainBuilder.h:18
Vulkan::ChainBuilder::getHead
void * getHead()
Definition
NextChainBuilder.h:22
Vulkan
Used for vulkan specific helpers like something to chain pNexts together.
Definition
BarrierBundle.cpp:5
std
STL namespace.
Vulkan::ChainBuilder::BaseChain
Definition
NextChainBuilder.h:28
Vulkan::ChainBuilder::BaseChain::pNext
void * pNext
Definition
NextChainBuilder.h:30
Vulkan::ChainBuilder::BaseChain::sType
VkStructureType sType
Definition
NextChainBuilder.h:29
Vulkan::ChainBuilder::has_pNext
Definition
NextChainBuilder.h:34
Engine
include
Engine
Vulkan
NextChainBuilder.h
Generated by
1.14.0