Skip to content

Commit e790c84

Browse files
author
devsh
committed
more improvements to make the Simple Debug Renderer more runtime friendly
1 parent 86cc7dd commit e790c84

File tree

3 files changed

+219
-101
lines changed

3 files changed

+219
-101
lines changed

09_GeometryCreator/main.cpp

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,25 +37,32 @@ class GeometryCreatorApp final : public MonoWindowApplication, public BuiltinRes
3737
}
3838

3939
const uint32_t addtionalBufferOwnershipFamilies[] = {getGraphicsQueue()->getFamilyIndex()};
40-
// we want to use the vertex data through UTBs
41-
using usage_f = IGPUBuffer::E_USAGE_FLAGS;
42-
CAssetConverter::patch_t<asset::ICPUPolygonGeometry> patch = {};
43-
patch.positionBufferUsages = usage_f::EUF_UNIFORM_TEXEL_BUFFER_BIT;
44-
patch.indexBufferUsages = usage_f::EUF_INDEX_BUFFER_BIT;
45-
patch.otherBufferUsages = usage_f::EUF_UNIFORM_TEXEL_BUFFER_BIT;
4640
m_scene = CGeometryCreatorScene::create(
4741
{
4842
.transferQueue = getTransferUpQueue(),
4943
.utilities = m_utils.get(),
5044
.logger = m_logger.get(),
5145
.addtionalBufferOwnershipFamilies = addtionalBufferOwnershipFamilies
52-
},patch
46+
},
47+
CSimpleDebugRenderer::DefaultPolygonGeometryPatch // we want to use the vertex data through UTBs
5348
);
5449

5550
auto scRes = static_cast<CDefaultSwapchainFramebuffers*>(m_surface->getSwapchainResources());
56-
m_renderer = CSimpleDebugRenderer::create(m_assetMgr.get(),scRes->getRenderpass(),0,m_scene.get());
57-
if (!m_renderer)
51+
const auto& geometries = m_scene->getInitParams().geometries;
52+
m_renderer = CSimpleDebugRenderer::create(m_assetMgr.get(),scRes->getRenderpass(),0,{&geometries.front().get(),geometries.size()});
53+
if (!m_renderer || m_renderer->getGeometries().size() != geometries.size())
5854
return logFail("Could not create Renderer!");
55+
// special case
56+
{
57+
const auto& pipelines = m_renderer->getInitParams().pipelines;
58+
auto ix = 0u;
59+
for (const auto& name : m_scene->getInitParams().geometryNames)
60+
{
61+
if (name=="Cone")
62+
m_renderer->getGeometry(ix).pipeline = pipelines[CSimpleDebugRenderer::SInitParams::PipelineType::Cone];
63+
ix++;
64+
}
65+
}
5966
m_renderer->m_instances.resize(1);
6067
m_renderer->m_instances[0].world = float32_t3x4(
6168
float32_t4(1,0,0,0),
@@ -143,7 +150,7 @@ class GeometryCreatorApp final : public MonoWindowApplication, public BuiltinRes
143150
const auto viewParams = CSimpleDebugRenderer::SViewParams(viewMatrix,viewProjMatrix);
144151

145152
// tear down scene every frame
146-
m_renderer->m_instances[0].packedGeo = m_renderer->getInitParams().geoms.data()+gcIndex;
153+
m_renderer->m_instances[0].packedGeo = m_renderer->getGeometries().data()+gcIndex;
147154
m_renderer->render(cb,viewParams);
148155

149156
cb->endRenderPass();
@@ -185,7 +192,7 @@ class GeometryCreatorApp final : public MonoWindowApplication, public BuiltinRes
185192
std::string caption = "[Nabla Engine] Geometry Creator";
186193
{
187194
caption += ", displaying [";
188-
caption += m_scene->getGeometries()[gcIndex].name;
195+
caption += m_scene->getInitParams().geometryNames[gcIndex];
189196
caption += "]";
190197
m_window->setCaption(caption);
191198
}
@@ -258,7 +265,7 @@ class GeometryCreatorApp final : public MonoWindowApplication, public BuiltinRes
258265
if (ev.type==nbl::ui::SMouseEvent::EET_SCROLL && m_renderer)
259266
{
260267
gcIndex += int16_t(core::sign(ev.scrollEvent.verticalScroll));
261-
gcIndex = core::clamp(gcIndex,0ull,m_renderer->getInitParams().geoms.size()-1);
268+
gcIndex = core::clamp(gcIndex,0ull,m_renderer->getGeometries().size()-1);
262269
}
263270
}
264271
}

61_UI/main.cpp

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,14 @@ class UISampleApp final : public MonoWindowApplication, public BuiltinResourcesA
4040
}
4141

4242
const uint32_t addtionalBufferOwnershipFamilies[] = {getGraphicsQueue()->getFamilyIndex()};
43-
// we want to use the vertex data through UTBs
44-
using usage_f = IGPUBuffer::E_USAGE_FLAGS;
45-
CAssetConverter::patch_t<asset::ICPUPolygonGeometry> patch = {};
46-
patch.positionBufferUsages = usage_f::EUF_UNIFORM_TEXEL_BUFFER_BIT;
47-
patch.indexBufferUsages = usage_f::EUF_INDEX_BUFFER_BIT;
48-
patch.otherBufferUsages = usage_f::EUF_UNIFORM_TEXEL_BUFFER_BIT;
4943
m_scene = CGeometryCreatorScene::create(
5044
{
5145
.transferQueue = getTransferUpQueue(),
5246
.utilities = m_utils.get(),
5347
.logger = m_logger.get(),
5448
.addtionalBufferOwnershipFamilies = addtionalBufferOwnershipFamilies
55-
},patch
49+
},
50+
CSimpleDebugRenderer::DefaultPolygonGeometryPatch
5651
);
5752

5853
// for the scene drawing pass
@@ -137,7 +132,19 @@ class UISampleApp final : public MonoWindowApplication, public BuiltinResourcesA
137132
if (!m_renderpass)
138133
return logFail("Failed to create Scene Renderpass!");
139134
}
140-
m_renderer = CSimpleDebugRenderer::create(m_assetMgr.get(),m_renderpass.get(),0,m_scene.get());
135+
const auto& geometries = m_scene->getInitParams().geometries;
136+
m_renderer = CSimpleDebugRenderer::create(m_assetMgr.get(),m_renderpass.get(),0,{&geometries.front().get(),geometries.size()});
137+
// special case
138+
{
139+
const auto& pipelines = m_renderer->getInitParams().pipelines;
140+
auto ix = 0u;
141+
for (const auto& name : m_scene->getInitParams().geometryNames)
142+
{
143+
if (name=="Cone")
144+
m_renderer->getGeometry(ix).pipeline = pipelines[CSimpleDebugRenderer::SInitParams::PipelineType::Cone];
145+
ix++;
146+
}
147+
}
141148
// we'll only display one thing at a time
142149
m_renderer->m_instances.resize(1);
143150

@@ -258,7 +265,7 @@ class UISampleApp final : public MonoWindowApplication, public BuiltinResourcesA
258265
// tear down scene every frame
259266
auto& instance = m_renderer->m_instances[0];
260267
memcpy(&instance.world,&interface.model,sizeof(instance.world));
261-
instance.packedGeo = m_renderer->getInitParams().geoms.data()+interface.gcIndex;
268+
instance.packedGeo = m_renderer->getGeometries().data() + interface.gcIndex;
262269
m_renderer->render(cb,viewParams);
263270
}
264271
cb->endRenderPass();
@@ -418,7 +425,7 @@ class UISampleApp final : public MonoWindowApplication, public BuiltinResourcesA
418425
if (e.type==nbl::ui::SMouseEvent::EET_SCROLL && m_renderer)
419426
{
420427
interface.gcIndex += int16_t(core::sign(e.scrollEvent.verticalScroll));
421-
interface.gcIndex = core::clamp(interface.gcIndex,0ull,m_renderer->getInitParams().geoms.size()-1);
428+
interface.gcIndex = core::clamp(interface.gcIndex,0ull,m_renderer->getGeometries().size()-1);
422429
}
423430
}
424431
},
@@ -453,7 +460,7 @@ class UISampleApp final : public MonoWindowApplication, public BuiltinResourcesA
453460
.keyboardEvents = uiEvents.keyboard
454461
};
455462

456-
interface.objectName = m_scene->getGeometries()[interface.gcIndex].name;
463+
interface.objectName = m_scene->getInitParams().geometryNames[interface.gcIndex];
457464
interface.imGUI->update(params);
458465
}
459466

0 commit comments

Comments
 (0)