Foray Library
rapid prototyping framework for crossplatform development of vulkan hardware ray tracing applications
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
foray_defaultraytracingstage.hpp
Go to the documentation of this file.
1#pragma once
2#include "../core/foray_core_declares.hpp"
3#include "../rtpipe/foray_rtpipeline.hpp"
4#include "../scene/foray_scene_declares.hpp"
5#include "../util/foray_pipelinelayout.hpp"
8
9namespace foray::stages {
22 {
23 public:
28 void Init(core::Context* context, scene::Scene* scene, core::CombinedImageSampler* envMap = nullptr, core::ManagedImage* noiseImage = nullptr);
29
31 virtual void RecordFrame(VkCommandBuffer cmdBuffer, base::FrameRenderInfo& renderInfo) override;
34 virtual void Resize(const VkExtent2D& extent) override;
35
37 virtual void Destroy() override;
38
40 inline static constexpr std::string_view OutputName = "Rt.Output";
41
42 inline core::ManagedImage* GetRtOutput() { return &mOutput; }
43
44 protected:
47 virtual void CreateOutputImages();
48
50 virtual void CreatePipelineLayout();
52 virtual void ApiCreateRtPipeline() = 0;
54 virtual void ApiDestroyRtPipeline() = 0;
55
57 virtual void ApiCustomObjectsCreate() {}
59 virtual void ApiCustomObjectsDestroy() {}
60
64 virtual void DestroyDescriptors();
65
67 virtual void ReloadShaders() override;
68
70 virtual void RecordFramePrepare(VkCommandBuffer cmdBuffer, base::FrameRenderInfo& renderInfo);
72 virtual void RecordFrameBind(VkCommandBuffer cmdBuffer, base::FrameRenderInfo& renderInfo);
74 virtual void RecordFrameTraceRays(VkCommandBuffer cmdBuffer, base::FrameRenderInfo& renderInfo);
75
77 scene::Scene* mScene = nullptr;
82
88 VkWriteDescriptorSetAccelerationStructureKHR mDescriptorAccelerationStructureInfo{};
89
94
96 uint32_t mRngSeedPushCOffset = 0;
97 };
98} // namespace foray::stages
Context used for render processes. This object is rebuilt for every frame. /.
Definition foray_framerenderinfo.hpp:14
Wraps an image + sampler combination.
Definition foray_samplercollection.hpp:61
Helps with the creation of a VkDescriptorSetLayout and VkDescriptorSet.
Definition foray_descriptorset.hpp:15
Wraps allocation and lifetime functionality of VkImage.
Definition foray_managedimage.hpp:13
Helper class wrapping 4 SBTs (Raygen, Miss, Callable, Hitgroup) and a raytracing pipeline.
Definition foray_rtpipeline.hpp:15
Provides registries and methods as the anchor of a component based scene.
Definition foray_scene.hpp:17
Extended version of MinimalRaytracingStageBase limited to a single output image, descriptorset but pr...
Definition foray_defaultraytracingstage.hpp:22
core::CombinedImageSampler * mEnvironmentMap
(Optional) Environment Map
Definition foray_defaultraytracingstage.hpp:79
virtual void ReloadShaders() override
Calls ApiDestroyRtPipeline(), ApiCreateRtPipeline() in this order.
virtual void CreateOrUpdateDescriptors()
Creates a fully populated descriptorset. See rtbindpoints and shaders/rt_common/bindpoints....
virtual void RecordFrame(VkCommandBuffer cmdBuffer, base::FrameRenderInfo &renderInfo) override
Calls RecordFramePrepare(), RecordFrameBind(), RecordFrameTraceRays() in this order.
core::DescriptorSet mDescriptorSet
Main DescriptorSet & Layout.
Definition foray_defaultraytracingstage.hpp:86
uint32_t mRngSeedPushCOffset
If set to anything other than ~0U a uint push constant containing the current frame idx as a seed val...
Definition foray_defaultraytracingstage.hpp:96
virtual void Resize(const VkExtent2D &extent) override
Calls RenderStage::Resize(..) which resizes any image registered to mImageOutputs,...
virtual void RecordFramePrepare(VkCommandBuffer cmdBuffer, base::FrameRenderInfo &renderInfo)
Pipeline barriers.
virtual void ApiDestroyRtPipeline()=0
Destroys mPipeline and all shaders registered to RenderStage::mShaders.
virtual void ApiCustomObjectsDestroy()
Inheriting types may use this function to destroy options created during ApiCustomObjectsCreate()
Definition foray_defaultraytracingstage.hpp:59
util::PipelineLayout mPipelineLayout
The pipeline layout manages descriptorset and pushconstant layouts.
Definition foray_defaultraytracingstage.hpp:91
virtual void ApiCreateRtPipeline()=0
Inheriting types should create mPipeline here (load shaders, configure sbts, build)
core::ManagedImage * mNoiseTexture
(Optional) Noise source image
Definition foray_defaultraytracingstage.hpp:81
virtual void CreatePipelineLayout()
Creates Pipeline layout with mDescriptorSets layout and an optional single uint pushconstant (see mRn...
static constexpr std::string_view OutputName
Image Output of the Raytracing Stage.
Definition foray_defaultraytracingstage.hpp:40
virtual void DestroyDescriptors()
Destroys the descriptor set.
core::ManagedImage mOutput
Image output.
Definition foray_defaultraytracingstage.hpp:84
virtual void CreateOutputImages()
Initializes mOutput.
core::ManagedImage * GetRtOutput()
Definition foray_defaultraytracingstage.hpp:42
VkWriteDescriptorSetAccelerationStructureKHR mDescriptorAccelerationStructureInfo
DescriptorSet::SetDescriptorAt requires persistent .pNext objects.
Definition foray_defaultraytracingstage.hpp:88
virtual void RecordFrameBind(VkCommandBuffer cmdBuffer, base::FrameRenderInfo &renderInfo)
Bind pipeline and descriptorset.
virtual void RecordFrameTraceRays(VkCommandBuffer cmdBuffer, base::FrameRenderInfo &renderInfo)
Push constant and Trace rays.
virtual void ApiCustomObjectsCreate()
Inheriting types may use this function to initialize stage specific objects such as configuration Ubo...
Definition foray_defaultraytracingstage.hpp:57
void Init(core::Context *context, scene::Scene *scene, core::CombinedImageSampler *envMap=nullptr, core::ManagedImage *noiseImage=nullptr)
Nominal init for DefaultRaytracingStageBase.
scene::Scene * mScene
Provides Camera, Tlas, Geometry and Materials.
Definition foray_defaultraytracingstage.hpp:77
virtual void Destroy() override
Calls ApiDestroyRtPipeline(), mPipelineLayout.Destroy(), DestroyDescriptors(), ApiCustomObjectsDestro...
rtpipe::RtPipeline mPipeline
The pipeline manages shader binding tables.
Definition foray_defaultraytracingstage.hpp:93
Render stage base class giving a common interface for rendering processes.
Definition foray_renderstage.hpp:15
Class that holds memory ownership of a vulkan pipeline layout.
Definition foray_pipelinelayout.hpp:12
Definition foray_blitstage.hpp:4
Non owning context object.
Definition foray_context.hpp:16