SpiecsEngine
 
Loading...
Searching...
No Matches

◆ Render()

void Spices::PostProcessRenderer::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 84 of file PostProcessRenderer.cpp.

85 {
87
88 const auto bloomImage = m_RendererResourcePool->AccessRowResource("Bloom").get();
89
90 ComputeRenderBehaveBuilder builder{ this ,frameInfo.m_FrameIndex, frameInfo.m_ImageIndex, m_VulkanState.m_GraphicCommandBuffer };
91
92 builder.BeginRenderPass();
93
94 builder.BindDescriptorSet(DescriptorSetManager::GetByName("PreRenderer"));
95
96 builder.BindDescriptorSet(DescriptorSetManager::GetByName({ m_Pass->GetName(), "DownSample" }));
97
98 builder.BindPipeline("PostProcessRenderer.DownSample.Default");
99
100 for (uint32_t i = 0; i < bloomImage->GetMipLevels(); i++)
101 {
102 builder.UpdatePushConstant<uint32_t>([&](auto& push) {
103 push = i;
104 });
105
106 builder.Dispatch((bloomImage->GetWidth() >> i) / 32 + 1, (bloomImage->GetHeight() >> i) / 32 + 1, 1);
107
108 builder.InternalBarriers();
109 }
110
111 builder.BeginNextSubPass("Bloom");
112
113 builder.BindDescriptorSet(DescriptorSetManager::GetByName({ m_Pass->GetName(), "Bloom" }));
114
115 builder.BindPipeline("PostProcessRenderer.Bloom.Default");
116
117 for (int i = bloomImage->GetMipLevels() - 1; i >= 0; i--)
118 {
119 builder.UpdatePushConstant<PostProcessR::BloomPushConstant>([&](auto& push) {
120 push.materialAddress = GetDefaultMaterial("Bloom")->GetMaterialParamsAddress();
121 push.mipmap = i;
122 push.weight = i == 0 ? 0.08f : 1.0f;
123 });
124
125 builder.Dispatch(((bloomImage->GetWidth() * 2) >> i) / 32 + 1, ((bloomImage->GetHeight() * 2) >> i) / 32 + 1, 1);
126
127 builder.InternalBarriers();
128 }
129
130 builder.BeginNextSubPass("TAA");
131
132 builder.BindDescriptorSet(DescriptorSetManager::GetByName({ m_Pass->GetName(), "TAA" }));
133
134 builder.BindPipeline("PostProcessRenderer.TAA.Default");
135
136 builder.Dispatch(1, 1, 1);
137
138 builder.InternalBarriers();
139
140 builder.BeginNextSubPass("ToneMapping");
141
142 const auto sceneColor = m_RendererResourcePool->AccessRowResource("SceneColor").get();
143
144 builder.BindDescriptorSet(DescriptorSetManager::GetByName({ m_Pass->GetName(), "ToneMapping" }));
145
146 builder.BindPipeline("PostProcessRenderer.ToneMapping.Default");
147
148 builder.UpdatePushConstant<uint64_t>([&](auto& push) {
149 push = GetDefaultMaterial("ToneMapping")->GetMaterialParamsAddress();
150 });
151
152 builder.Dispatch(sceneColor->GetWidth() / 32 + 1, sceneColor->GetHeight() / 32 + 1, 1);
153
154 builder.InternalBarriers();
155
156 builder.EndRenderPass();
157 }
#define SPICES_PROFILE_ZONE
static DescriptorSetInfo & GetByName(const String2 &name)
Get a DescriptorSetInfo by owner's name.
std::shared_ptr< RendererPass > m_Pass
RendererPass.
Definition Renderer.h:2012
std::shared_ptr< Material > GetDefaultMaterial(const std::string &subPassName) const
Get default material using sub pass Name.
Definition Renderer.cpp:220
std::shared_ptr< RendererResourcePool > m_RendererResourcePool
RendererResourcePool, Passed by instanced.
Definition Renderer.h:2007
VulkanState & m_VulkanState
This variable is passed while renderer instanced.
Definition Renderer.h:1992
std::array< VkCommandBuffer, MaxFrameInFlight > m_GraphicCommandBuffer

References Spices::Renderer::ComputeRenderBehaveBuilder::BeginNextSubPass(), Spices::Renderer::ComputeRenderBehaveBuilder::BeginRenderPass(), Spices::Renderer::ComputeRenderBehaveBuilder::Dispatch(), Spices::Renderer::ComputeRenderBehaveBuilder::EndRenderPass(), Spices::FrameInfo::m_FrameIndex, Spices::FrameInfo::m_ImageIndex, and Spices::Renderer::m_VulkanState.