Foray Library
rapid prototyping framework for crossplatform development of vulkan hardware ray tracing applications
Loading...
Searching...
No Matches
foray_scenedrawing.hpp
Go to the documentation of this file.
1#pragma once
2#include "../base/foray_framerenderinfo.hpp"
3#include "../foray_basics.hpp"
4#include "../foray_glm.hpp"
5#include "../foray_vulkan.hpp"
6#include "../util/foray_hash.hpp"
8
9namespace foray::scene {
12 {
13 public:
15 int32_t MaterialIndex = -1;
16
17 inline static VkShaderStageFlags GetShaderStageFlags();
18 inline static VkPushConstantRange GetPushConstantRange();
19
20 inline void CmdPushConstant_TransformBufferOffset(VkCommandBuffer commandBuffer, VkPipelineLayout pipelineLayout, uint32_t transformBufferOffset);
21 inline void CmdPushConstant_MaterialIndex(VkCommandBuffer commandBuffer, VkPipelineLayout pipelineLayout, int32_t materialIndex);
22 };
23
24 inline VkShaderStageFlags DrawPushConstant::GetShaderStageFlags()
25 {
26 return VkShaderStageFlagBits::VK_SHADER_STAGE_VERTEX_BIT | VkShaderStageFlagBits::VK_SHADER_STAGE_FRAGMENT_BIT;
27 }
28
29 inline VkPushConstantRange DrawPushConstant::GetPushConstantRange()
30 {
31 return VkPushConstantRange{.stageFlags = GetShaderStageFlags(), .offset = 0, .size = sizeof(DrawPushConstant)};
32 }
33
34 inline void DrawPushConstant::CmdPushConstant_TransformBufferOffset(VkCommandBuffer commandBuffer, VkPipelineLayout pipelineLayout, uint32_t transformBufferOffset)
35 {
36 TransformBufferOffset = transformBufferOffset;
37 vkCmdPushConstants(commandBuffer, pipelineLayout, DrawPushConstant::GetShaderStageFlags(), offsetof(DrawPushConstant, TransformBufferOffset), sizeof(TransformBufferOffset),
39 }
40 inline void DrawPushConstant::CmdPushConstant_MaterialIndex(VkCommandBuffer commandBuffer, VkPipelineLayout pipelineLayout, int32_t materialIndex)
41 {
42 MaterialIndex = materialIndex;
43 vkCmdPushConstants(commandBuffer, pipelineLayout, DrawPushConstant::GetShaderStageFlags(), offsetof(DrawPushConstant, MaterialIndex), sizeof(MaterialIndex),
45 }
46
49 {
50 public:
52 VkCommandBuffer CmdBuffer;
53
54 inline SceneUpdateInfo(const base::FrameRenderInfo& renderInfo, base::CmdBufferIndex index);
55 inline SceneUpdateInfo(const base::FrameRenderInfo& renderInfo, VkCommandBuffer cmdBuffer);
56 };
57
58 SceneUpdateInfo::SceneUpdateInfo(const base::FrameRenderInfo& renderInfo, base::CmdBufferIndex index) : RenderInfo(renderInfo), CmdBuffer(renderInfo.GetCommandBuffer(index)) {}
59 SceneUpdateInfo::SceneUpdateInfo(const base::FrameRenderInfo& renderInfo, VkCommandBuffer cmdBuffer) : RenderInfo(renderInfo), CmdBuffer(cmdBuffer) {}
60
63 {
64 public:
66 VkCommandBuffer CmdBuffer;
67 const VkPipelineLayout PipelineLayout = nullptr;
69
70 inline SceneDrawInfo(const base::FrameRenderInfo& renderInfo, VkPipelineLayout pipelineLayout, base::CmdBufferIndex index);
71 inline SceneDrawInfo(const base::FrameRenderInfo& renderInfo, VkPipelineLayout pipelineLayout, VkCommandBuffer cmdBuffer);
72
73 inline void CmdPushConstant_TransformBufferOffset(uint32_t transformBufferOffset);
74 inline void CmdPushConstant_MaterialIndex(int32_t materialIndex);
75 };
76
81
86
87 SceneDrawInfo::SceneDrawInfo(const base::FrameRenderInfo& renderInfo, VkPipelineLayout pipelineLayout, base::CmdBufferIndex index)
88
89 : RenderInfo(renderInfo), CmdBuffer(renderInfo.GetCommandBuffer(index)), PipelineLayout(pipelineLayout), PushConstantState()
90 {
93 }
94
95 SceneDrawInfo::SceneDrawInfo(const base::FrameRenderInfo& renderInfo, VkPipelineLayout pipelineLayout, VkCommandBuffer cmdBuffer)
96
97 : RenderInfo(renderInfo), CmdBuffer(cmdBuffer), PipelineLayout(pipelineLayout), PushConstantState()
98 {
101 }
102} // namespace foray::scene
Context used for render processes. This object is rebuilt for every frame. /.
Definition foray_framerenderinfo.hpp:14
int32_t CmdBufferIndex
Definition foray_inflightframe.hpp:17
Definition foray_animation.hpp:8
Push Constant helper type.
Definition foray_scenedrawing.hpp:12
void CmdPushConstant_TransformBufferOffset(VkCommandBuffer commandBuffer, VkPipelineLayout pipelineLayout, uint32_t transformBufferOffset)
Definition foray_scenedrawing.hpp:34
uint32_t TransformBufferOffset
Definition foray_scenedrawing.hpp:14
static VkPushConstantRange GetPushConstantRange()
Definition foray_scenedrawing.hpp:29
int32_t MaterialIndex
Definition foray_scenedrawing.hpp:15
static VkShaderStageFlags GetShaderStageFlags()
Definition foray_scenedrawing.hpp:24
void CmdPushConstant_MaterialIndex(VkCommandBuffer commandBuffer, VkPipelineLayout pipelineLayout, int32_t materialIndex)
Definition foray_scenedrawing.hpp:40
Temporary type passed to components when drawing the scene.
Definition foray_scenedrawing.hpp:63
void CmdPushConstant_MaterialIndex(int32_t materialIndex)
Definition foray_scenedrawing.hpp:82
const base::FrameRenderInfo RenderInfo
Definition foray_scenedrawing.hpp:65
DrawPushConstant PushConstantState
Definition foray_scenedrawing.hpp:68
const VkPipelineLayout PipelineLayout
Definition foray_scenedrawing.hpp:67
SceneDrawInfo(const base::FrameRenderInfo &renderInfo, VkPipelineLayout pipelineLayout, base::CmdBufferIndex index)
Definition foray_scenedrawing.hpp:87
void CmdPushConstant_TransformBufferOffset(uint32_t transformBufferOffset)
Definition foray_scenedrawing.hpp:77
VkCommandBuffer CmdBuffer
Definition foray_scenedrawing.hpp:66
Temporary type passed to components when updating the scene.
Definition foray_scenedrawing.hpp:49
SceneUpdateInfo(const base::FrameRenderInfo &renderInfo, base::CmdBufferIndex index)
Definition foray_scenedrawing.hpp:58
VkCommandBuffer CmdBuffer
Definition foray_scenedrawing.hpp:52
const base::FrameRenderInfo RenderInfo
Definition foray_scenedrawing.hpp:51