SpiecsEngine
 
Loading...
Searching...
No Matches

◆ Render()

void Spices::RayTracingRenderer::Render ( TimeStep & ts,
FrameInfo & frameInfo )
overridevirtual

The interface is inherited from Renderer.

Parameters
[in]tsTimeStep.
[in]frameInfoThe current frame data.

Implements Spices::Renderer.

Definition at line 116 of file RayTracingRenderer.cpp.

117 {
119
120 if (m_VulkanRayTracing->GetAccelerationStructure() == VK_NULL_HANDLE) return;
121
123
124 if(frameInfo.m_RendererType != RendererType::PathTracing) return;
125
126 RayTracingRenderBehaveBuilder builder{ this, m_VulkanRayTracing.get(), frameInfo.m_FrameIndex, frameInfo.m_ImageIndex};
127
128 builder.BeginRenderPass();
129
130 builder.BindDescriptorSet(DescriptorSetManager::GetByName("PreRenderer"));
131
132 builder.BindDescriptorSet(DescriptorSetManager::GetByName("RayTracing"));
133
134 builder.BindPipeline("RayTracingRenderer.RayTracing.Default");
135
136 builder.UpdateAccelerationStructure(2, 0, m_VulkanRayTracing->GetAccelerationStructure());
137
138 builder.UpdateStorageBuffer(3, 0, m_VulkanRayTracing->GetMeshDesc().buffer);
139
140 builder.UpdateStorageBuffer<RayTracingR::DirectionalLightBuffer>(3, 1, [&](auto& ssbo) {
141 GetDirectionalLight(frameInfo, ssbo.lights);
142 });
143
144 builder.UpdateStorageBuffer<RayTracingR::PointLightBuffer>(3, 2, [&](auto& ssbo) {
145 GetPointLight(frameInfo, ssbo.lights);
146 });
147
148 builder.UpdatePushConstant<RayTracingR::PushConstant>([&](auto& push) {
149 IterWorldCompWithBreak<SkyBoxComponent>(frameInfo, [&](int entityId, TransformComponent& transComp, SkyBoxComponent& camComp){
150 push.entityID = entityId;
151 return true;
152 });
153 });
154
155 builder.TraceRays();
156
157 builder.EndRenderPass();
158 }
#define SPICES_PROFILE_ZONE
static DescriptorSetInfo & GetByName(const String2 &name)
Get a DescriptorSetInfo by owner's name.
static std::shared_ptr< VulkanRayTracing > m_VulkanRayTracing
In Used VulkanRayTracing.
void UpdateTopLevelAS(FrameInfo &frameInfo, std::shared_ptr< VulkanRayTracing > rayTracingInstance, bool update=true)
Update TopLevelAS.
void GetDirectionalLight(FrameInfo &frameInfo, std::array< SpicesShader::DirectionalLight, SpicesShader::DIRECTIONALLIGHT_BUFFER_MAXNUM > &dLightBuffer)
Get DirectionalLightComponent's render data in World.
Definition Renderer.cpp:371
void GetPointLight(FrameInfo &frameInfo, std::array< SpicesShader::PointLight, SpicesShader::POINTLIGHT_BUFFER_MAXNUM > &pLightBuffer)
Get PointLightComponent's render data in World.
Definition Renderer.cpp:445

References Spices::Renderer::RayTracingRenderBehaveBuilder::BeginRenderPass(), Spices::Renderer::RayTracingRenderBehaveBuilder::EndRenderPass(), Spices::Renderer::GetDirectionalLight(), Spices::Renderer::GetPointLight(), Spices::FrameInfo::m_RendererType, Spices::PathTracing, and Spices::Renderer::RayTracingRenderBehaveBuilder::TraceRays().