@@ -323,8 +323,9 @@ Renderer::InitializationData Renderer::initSceneObjects(const SAssetBundle& mesh
323
323
}
324
324
}
325
325
326
- // set up BVH
326
+ // this wont get rid of identical pipelines
327
327
IMeshManipulator::homogenizePrimitiveTypeAndIndices (meshBuffersToProcess.begin (), meshBuffersToProcess.end (), EPT_TRIANGLE_LIST);
328
+ // set up BLAS
328
329
m_rrManager->makeRRShapes (rrShapeCache, meshBuffersToProcess.begin (), meshBuffersToProcess.end ());
329
330
330
331
// convert to GPU objects
@@ -350,7 +351,7 @@ Renderer::InitializationData Renderer::initSceneObjects(const SAssetBundle& mesh
350
351
}
351
352
);
352
353
353
- // set up Radeon Rays instances
354
+ // set up Radeon Rays instances and TLAS
354
355
{
355
356
core::vector<ext::RadeonRays::MockSceneManager::ObjectGUID> ids (m_mock_smgr.m_objectData .size ());
356
357
std::iota (ids.begin (),ids.end (),0u );
@@ -361,7 +362,7 @@ Renderer::InitializationData Renderer::initSceneObjects(const SAssetBundle& mesh
361
362
362
363
core::vector<DrawElementsIndirectCommand_t> mdiData;
363
364
{
364
- core::unordered_map <uint32_t , uint32_t > meshbufferIDToDrawID;
365
+ core::vector <uint32_t > meshbufferIDToDrawID (gpuMeshBuffers. size ()) ;
365
366
{
366
367
MDICall call;
367
368
auto initNewMDI = [&call](const core::smart_refctd_ptr<IGPUMeshBuffer>& gpumb) -> void
@@ -378,7 +379,7 @@ Renderer::InitializationData Renderer::initSceneObjects(const SAssetBundle& mesh
378
379
m_mdiDrawCalls.emplace_back (call);
379
380
};
380
381
uint32_t drawBaseInstance = 0u ;
381
- for (auto item : gpuMeshBuffers)
382
+ for (const auto & item : gpuMeshBuffers)
382
383
{
383
384
const auto gpumb = std::get<core::smart_refctd_ptr<IGPUMeshBuffer>>(item);
384
385
@@ -413,8 +414,8 @@ Renderer::InitializationData Renderer::initSceneObjects(const SAssetBundle& mesh
413
414
}
414
415
queueUpMDI (call);
415
416
}
416
- for (auto cull : cullData)
417
- cull.drawID = meshbufferIDToDrawID[cull.drawID ];
417
+ for (auto & cull : cullData)
418
+ cull.drawID = meshbufferIDToDrawID[cull.globalObjectID ];
418
419
}
419
420
m_cullPushConstants.currentCommandBufferIx = 0x0u ;
420
421
m_cullPushConstants.maxDrawCount = mdiData.size ();
@@ -473,7 +474,7 @@ void Renderer::initSceneNonAreaLights(Renderer::InitializationData& initData)
473
474
{
474
475
core::vectorSIMDf _envmapBaseColor;
475
476
_envmapBaseColor.set (0 .f ,0 .f ,0 .f ,1 .f );
476
- for (auto emitter : initData.globalMeta ->emitters )
477
+ for (const auto & emitter : initData.globalMeta ->emitters )
477
478
{
478
479
float weight = 0 .f ;
479
480
switch (emitter.type )
@@ -1051,7 +1052,7 @@ void Renderer::render(nbl::ITimer* timer)
1051
1052
m_driver->clearColorBuffer (EFAP_COLOR_ATTACHMENT2, zero);
1052
1053
}
1053
1054
m_driver->bindDescriptorSets (EPBP_GRAPHICS,m_visibilityBufferFillPipelineLayoutGPU.get (),1u ,1u ,descriptors+1u ,nullptr );
1054
- for (auto call : m_mdiDrawCalls)
1055
+ for (const auto & call : m_mdiDrawCalls)
1055
1056
{
1056
1057
m_driver->bindGraphicsPipeline (call.pipeline .get ());
1057
1058
m_driver->drawIndexedIndirect (call.vertexBindings ,EPT_TRIANGLE_LIST,EIT_32BIT,call.indexBuffer .get (),m_indirectDrawBuffers[m_cullPushConstants.currentCommandBufferIx ].get (),call.mdiOffset ,call.mdiCount ,sizeof (DrawElementsIndirectCommand_t));
0 commit comments