vOOlkan
An object oriented approach to Vulkan
DynamicState.h
Go to the documentation of this file.
1#ifndef VULKAN_DYNAMICSTATE
2#define VULKAN_DYNAMICSTATE
3
4#include <vulkan/vulkan.h>
5#include <vector>
6#include <concepts>
7#include <set>
8#include <iterator>
9
10
11namespace Vulkan::PipelineOptions { class DynamicState; }
12
13
18public:
19
20 template<typename... DS> requires (std::same_as<DS, VkDynamicState> && ...)
21 DynamicState(DS... dynamicStates) : dynamicState{}, usedDynamicStates{ VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR } {
22 std::set<VkDynamicState> enumerateDynamicStates;
23 (enumerateDynamicStates.insert(dynamicStates), ...); //put the dynamic states into a set in order to avoid duplicates
24 std::copy(enumerateDynamicStates.begin(), enumerateDynamicStates.end(), std::back_inserter(usedDynamicStates)); //copy the set into the vector
25
26 dynamicState.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
27 dynamicState.dynamicStateCount = static_cast<uint32_t>(usedDynamicStates.size());
28 dynamicState.pDynamicStates = usedDynamicStates.data();
29 }
30
31
32 const VkPipelineDynamicStateCreateInfo& operator+() const {
33 return dynamicState;
34 }
35
36
37private:
38 VkPipelineDynamicStateCreateInfo dynamicState;
39 std::vector<VkDynamicState> usedDynamicStates;
40};
41
42#endif
Describes what can be changed in the pipeline without having to create a new pipeline....
Definition: DynamicState.h:17
const VkPipelineDynamicStateCreateInfo & operator+() const
Definition: DynamicState.h:32
DynamicState(DS... dynamicStates)
Definition: DynamicState.h:21
Definition: Attachment.h:11