SpiecsEngine
 
Loading...
Searching...
No Matches

◆ Render()

void Spices::BasePassRenderer::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 172 of file BasePassRenderer.cpp.

173 {
175
176 if(frameInfo.m_RendererType != RendererType::Rasterization) return;
177
178 RenderBehaveBuilder builder{ this ,frameInfo.m_FrameIndex, frameInfo.m_ImageIndex };
179
180 builder.BeginRenderPassAsync();
181
182 if constexpr (m_IsUseDGC)
183 {
184 builder.Await([&](const VkCommandBuffer& cmdBuffer) {
185
186 builder.SetViewPort(cmdBuffer);
187
188 builder.BindDescriptorSet(DescriptorSetManager::GetByName("PreRenderer"), cmdBuffer);
189
190 builder.BindDescriptorSet(DescriptorSetManager::GetByName({ m_Pass->GetName(), "Mesh" }), cmdBuffer);
191
192 builder.RunDGC(cmdBuffer);
193
194 });
195 }
196 else
197 {
198 const size_t nThreads = ThreadModel::Get()->GetRHIThreadPool()->GetThreadsCount();
199 const size_t nTask = m_View ? (m_View->size() > 40 ? nThreads : 1) : 0;
200 const size_t nCount = m_View ? m_View->size() / nTask : 0;
201
202 std::vector<std::future<VkCommandBuffer>> futureCmdBuffers;
203 for(size_t i = 0; i < nTask; i++)
204 {
205 futureCmdBuffers.push_back(
206
207 builder.Async([&, i](const VkCommandBuffer& cmdBuffer) {
208
209 builder.SetViewPort(cmdBuffer);
210
211 builder.BindDescriptorSet(DescriptorSetManager::GetByName("PreRenderer"), cmdBuffer);
212
213 builder.BindDescriptorSet(DescriptorSetManager::GetByName({ m_Pass->GetName(), "Mesh" }), cmdBuffer);
214
215 IterWorldCompWithRange<MeshComponent>(frameInfo, *m_View, i * nCount, std::min((i + 1) * nCount, m_View->size() - 1), [&](int entityId, TransformComponent& transComp, MeshComponent& meshComp) {
216
217 meshComp.GetMesh()->DrawMeshTasks(cmdBuffer, [&](const uint32_t& meshpackId, const auto& meshPack) {
218
219 builder.BindPipeline(meshPack->GetMaterial()->GetName(), cmdBuffer);
220
221 builder.UpdatePushConstant<uint64_t>([&](auto& push) {
222 push = meshPack->GetMeshDesc().GetBufferAddress();
223 }, cmdBuffer);
224 });
225 });
226 })
227 );
228 }
229
230 if (nTask > 0)
231 {
232 builder.Wait(futureCmdBuffers);
233 }
234 }
235
236 builder.BeginNextSubPass("SkyBox");
237
238 builder.SetViewPort();
239
240 builder.BindDescriptorSet(DescriptorSetManager::GetByName("PreRenderer"));
241
242 builder.BindDescriptorSet(DescriptorSetManager::GetByName({ m_Pass->GetName(), "SkyBox" }));
243
244 IterWorldCompWithBreak<SkyBoxComponent>(frameInfo, [&](int entityId, TransformComponent& transComp, SkyBoxComponent& skyboxComp) {
245
246 skyboxComp.GetMesh()->DrawMeshTasks(m_VulkanState.m_GraphicCommandBuffer[frameInfo.m_FrameIndex], [&](const uint32_t& meshPackId, const auto& meshPack) {
247
248 builder.BindPipeline(meshPack->GetMaterial()->GetName());
249
250 builder.UpdatePushConstant<uint64_t>([&](auto& push) {
251 push = meshPack->GetMeshDesc().GetBufferAddress();
252 });
253 });
254
255 return true;
256 });
257
258 builder.EndRenderPass();
259 }
#define SPICES_PROFILE_ZONE
std::shared_ptr< std::vector< uint32_t > > m_View
World entities view.
static DescriptorSetInfo & GetByName(const String2 &name)
Get a DescriptorSetInfo by owner's name.
std::shared_ptr< RendererPass > m_Pass
RendererPass.
Definition Renderer.h:2012
VulkanState & m_VulkanState
This variable is passed while renderer instanced.
Definition Renderer.h:1992
static std::shared_ptr< ThreadModel > Get()
Get ThreadModel single instance.
constexpr bool m_IsUseDGC
Use DGC or not.
std::array< VkCommandBuffer, MaxFrameInFlight > m_GraphicCommandBuffer

References Spices::Renderer::RenderBehaveBuilder::Await(), Spices::Renderer::RenderBehaveBuilder::BeginNextSubPass(), Spices::Renderer::RenderBehaveBuilder::BeginRenderPassAsync(), Spices::Renderer::RenderBehaveBuilder::EndRenderPass(), Spices::FrameInfo::m_FrameIndex, Spices::FrameInfo::m_ImageIndex, Spices::m_IsUseDGC, Spices::FrameInfo::m_RendererType, Spices::Renderer::m_VulkanState, and Spices::Rasterization.