Skip to content

Commit 617523b

Browse files
committed
Ported example 5
1 parent 8d3d0f1 commit 617523b

File tree

1 file changed

+61
-26
lines changed
  • examples_tests/05.NablaTutorialExample

1 file changed

+61
-26
lines changed

examples_tests/05.NablaTutorialExample/main.cpp

Lines changed: 61 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@ class NablaTutorialExampleApp : public ApplicationBase
5757
nbl::core::smart_refctd_ptr<nbl::video::IUtilities> utilities;
5858
nbl::core::smart_refctd_ptr<nbl::video::ILogicalDevice> logicalDevice;
5959
nbl::video::IPhysicalDevice* physicalDevice;
60-
std::array<nbl::video::IGPUQueue*, CommonAPI::InitOutput<SC_IMG_COUNT>::EQT_COUNT> queues = { nullptr, nullptr, nullptr, nullptr };
60+
std::array<nbl::video::IGPUQueue*, CommonAPI::InitOutput::MaxQueuesCount> queues = { nullptr, nullptr, nullptr, nullptr };
6161
nbl::core::smart_refctd_ptr<nbl::video::ISwapchain> swapchain;
6262
nbl::core::smart_refctd_ptr<nbl::video::IGPURenderpass> renderpass;
63-
std::array<nbl::core::smart_refctd_ptr<nbl::video::IGPUFramebuffer>, SC_IMG_COUNT> fbos;
64-
nbl::core::smart_refctd_ptr<nbl::video::IGPUCommandPool> commandPool; // TODO: Multibuffer and reset the commandpools
63+
std::array<nbl::core::smart_refctd_ptr<nbl::video::IGPUFramebuffer>, CommonAPI::InitOutput::MaxSwapChainImageCount> fbo;
64+
std::array<nbl::core::smart_refctd_ptr<nbl::video::IGPUCommandPool>, CommonAPI::InitOutput::MaxQueuesCount> commandPools; // TODO: Multibuffer and reset the commandpools
6565
nbl::core::smart_refctd_ptr<nbl::system::ISystem> system;
6666
nbl::core::smart_refctd_ptr<nbl::asset::IAssetManager> assetManager;
6767
nbl::video::IGPUObjectFromAssetConverter::SParams cpu2gpuParams;
@@ -84,8 +84,8 @@ class NablaTutorialExampleApp : public ApplicationBase
8484
core::smart_refctd_ptr<video::IGPUSemaphore> renderFinished[FRAMES_IN_FLIGHT] = { nullptr };
8585
core::smart_refctd_ptr<video::IGPUCommandBuffer> commandBuffers[FRAMES_IN_FLIGHT];
8686

87-
CommonAPI::InputSystem::ChannelReader<IMouseEventChannel> mouse;
88-
CommonAPI::InputSystem::ChannelReader<IKeyboardEventChannel> keyboard;
87+
CommonAPI::InputSystem::ChannelReader<ui::IMouseEventChannel> mouse;
88+
CommonAPI::InputSystem::ChannelReader<ui::IKeyboardEventChannel> keyboard;
8989
Camera camera = Camera(vectorSIMDf(0, 0, 0), vectorSIMDf(0, 0, 0), matrix4SIMD());
9090

9191
uint32_t ds1UboBinding = 0;
@@ -120,14 +120,54 @@ class NablaTutorialExampleApp : public ApplicationBase
120120
{
121121
return window.get();
122122
}
123+
video::IAPIConnection* getAPIConnection() override
124+
{
125+
return apiConnection.get();
126+
}
127+
video::ILogicalDevice* getLogicalDevice() override
128+
{
129+
return logicalDevice.get();
130+
}
131+
video::IGPURenderpass* getRenderpass() override
132+
{
133+
return renderpass.get();
134+
}
135+
void setSurface(core::smart_refctd_ptr<video::ISurface>&& s) override
136+
{
137+
surface = std::move(s);
138+
}
139+
void setFBOs(std::vector<core::smart_refctd_ptr<video::IGPUFramebuffer>>& f) override
140+
{
141+
for (int i = 0; i < f.size(); i++)
142+
{
143+
fbo[i] = core::smart_refctd_ptr(f[i]);
144+
}
145+
}
146+
void setSwapchain(core::smart_refctd_ptr<video::ISwapchain>&& s) override
147+
{
148+
swapchain = std::move(s);
149+
}
150+
uint32_t getSwapchainImageCount() override
151+
{
152+
return SC_IMG_COUNT;
153+
}
154+
virtual nbl::asset::E_FORMAT getDepthFormat() override
155+
{
156+
return nbl::asset::EF_D32_SFLOAT;
157+
}
123158

124159
APP_CONSTRUCTOR(NablaTutorialExampleApp)
125160

126161
void onAppInitialized_impl() override
127162
{
128-
CommonAPI::InitOutput<SC_IMG_COUNT> initOutput;
129-
initOutput.window = core::smart_refctd_ptr(window);
130-
CommonAPI::Init<WIN_W, WIN_H, SC_IMG_COUNT>(initOutput, video::EAT_OPENGL, "NablaTutorialExample", nbl::asset::EF_D32_SFLOAT);
163+
CommonAPI::InitOutput initOutput;
164+
initOutput.window = core::smart_refctd_ptr(window);
165+
initOutput.system = core::smart_refctd_ptr(system);
166+
167+
const auto swapchainImageUsage = static_cast<asset::IImage::E_USAGE_FLAGS>(asset::IImage::EUF_COLOR_ATTACHMENT_BIT);
168+
const video::ISurface::SFormat surfaceFormat(asset::EF_R8G8B8A8_SRGB, asset::ECP_COUNT, asset::EOTF_UNKNOWN);
169+
170+
CommonAPI::InitWithDefaultExt(initOutput, video::EAT_OPENGL_ES, "NablaTutorialExample", WIN_W, WIN_H, SC_IMG_COUNT, swapchainImageUsage, surfaceFormat, nbl::asset::EF_D32_SFLOAT);
131171
window = std::move(initOutput.window);
132172
windowCb = std::move(initOutput.windowCb);
133173
apiConnection = std::move(initOutput.apiConnection);
@@ -138,8 +178,8 @@ class NablaTutorialExampleApp : public ApplicationBase
138178
queues = std::move(initOutput.queues);
139179
swapchain = std::move(initOutput.swapchain);
140180
renderpass = std::move(initOutput.renderpass);
141-
fbos = std::move(initOutput.fbo);
142-
commandPool = std::move(initOutput.commandPool);
181+
fbo = std::move(initOutput.fbo);
182+
commandPools = std::move(initOutput.commandPools);
143183
system = std::move(initOutput.system);
144184
assetManager = std::move(initOutput.assetManager);
145185
cpu2gpuParams = std::move(initOutput.cpu2gpuParams);
@@ -149,12 +189,6 @@ class NablaTutorialExampleApp : public ApplicationBase
149189
gpuTransferFence = logicalDevice->createFence(static_cast<video::IGPUFence::E_CREATE_FLAGS>(0));
150190
gpuComputeFence = logicalDevice->createFence(static_cast<video::IGPUFence::E_CREATE_FLAGS>(0));
151191

152-
nbl::video::IGPUObjectFromAssetConverter cpu2gpu;
153-
{
154-
cpu2gpuParams.perQueue[nbl::video::IGPUObjectFromAssetConverter::EQU_TRANSFER].fence = &gpuTransferFence;
155-
cpu2gpuParams.perQueue[nbl::video::IGPUObjectFromAssetConverter::EQU_COMPUTE].fence = &gpuComputeFence;
156-
}
157-
158192
/*
159193
Helpfull class for managing basic geometry objects.
160194
Thanks to it you can get half filled pipeline for your
@@ -181,6 +215,7 @@ class NablaTutorialExampleApp : public ApplicationBase
181215
image view through the driver.
182216
*/
183217

218+
cpu2gpuParams.beginCommandBuffers();
184219
auto gpuImage = cpu2gpu.getGPUObjectsFromAssets(&image_raw, &image_raw + 1, cpu2gpuParams)->front();
185220
cpu2gpuParams.waitForCreationToComplete();
186221
auto& gpuParams = gpuImage->getCreationParameters();
@@ -217,7 +252,7 @@ class NablaTutorialExampleApp : public ApplicationBase
217252
gpuSamplerBinding.binding = ds0SamplerBinding;
218253
gpuSamplerBinding.type = EDT_COMBINED_IMAGE_SAMPLER;
219254
gpuSamplerBinding.count = 1u;
220-
gpuSamplerBinding.stageFlags = static_cast<IGPUSpecializedShader::E_SHADER_STAGE>(IGPUSpecializedShader::ESS_FRAGMENT);
255+
gpuSamplerBinding.stageFlags = static_cast<IGPUShader::E_SHADER_STAGE>(IGPUShader::ESS_FRAGMENT);
221256
gpuSamplerBinding.samplers = nullptr;
222257

223258
/*
@@ -227,7 +262,7 @@ class NablaTutorialExampleApp : public ApplicationBase
227262
IGPUDescriptorSetLayout::SBinding gpuUboBinding;
228263
gpuUboBinding.count = 1u;
229264
gpuUboBinding.binding = ds1UboBinding;
230-
gpuUboBinding.stageFlags = static_cast<asset::ICPUSpecializedShader::E_SHADER_STAGE>(asset::ICPUSpecializedShader::ESS_VERTEX | asset::ICPUSpecializedShader::ESS_FRAGMENT);
265+
gpuUboBinding.stageFlags = static_cast<asset::ICPUShader::E_SHADER_STAGE>(asset::ICPUShader::ESS_VERTEX | asset::ICPUShader::ESS_FRAGMENT);
231266
gpuUboBinding.type = asset::EDT_UNIFORM_BUFFER;
232267

233268
/*
@@ -383,7 +418,7 @@ class NablaTutorialExampleApp : public ApplicationBase
383418
gpuDescriptorSet3 = std::get<4>(gpuRectangle);
384419
gpuGraphicsPipeline = std::get<5>(gpuRectangle);
385420

386-
logicalDevice->createCommandBuffers(commandPool.get(), video::IGPUCommandBuffer::EL_PRIMARY, FRAMES_IN_FLIGHT, commandBuffers);
421+
logicalDevice->createCommandBuffers(commandPools[CommonAPI::InitOutput::EQT_GRAPHICS].get(), video::IGPUCommandBuffer::EL_PRIMARY, FRAMES_IN_FLIGHT, commandBuffers);
387422

388423
for (uint32_t i = 0u; i < FRAMES_IN_FLIGHT; i++)
389424
{
@@ -439,8 +474,8 @@ class NablaTutorialExampleApp : public ApplicationBase
439474
inputSystem->getDefaultKeyboard(&keyboard);
440475

441476
camera.beginInputProcessing(nextPresentationTimeStamp);
442-
mouse.consumeEvents([&](const IMouseEventChannel::range_t& events) -> void { camera.mouseProcess(events); }, logger.get());
443-
keyboard.consumeEvents([&](const IKeyboardEventChannel::range_t& events) -> void { camera.keyboardProcess(events); }, logger.get());
477+
mouse.consumeEvents([&](const ui::IMouseEventChannel::range_t& events) -> void { camera.mouseProcess(events); }, logger.get());
478+
keyboard.consumeEvents([&](const ui::IKeyboardEventChannel::range_t& events) -> void { camera.keyboardProcess(events); }, logger.get());
444479
camera.endInputProcessing(nextPresentationTimeStamp);
445480

446481
const auto& viewMatrix = camera.getViewMatrix();
@@ -473,7 +508,7 @@ class NablaTutorialExampleApp : public ApplicationBase
473508
clear[1].depthStencil.depth = 0.f;
474509

475510
beginInfo.clearValueCount = 2u;
476-
beginInfo.framebuffer = fbos[acquiredNextFBO];
511+
beginInfo.framebuffer = fbo[acquiredNextFBO];
477512
beginInfo.renderpass = renderpass;
478513
beginInfo.renderArea = area;
479514
beginInfo.clearValues = clear;
@@ -511,8 +546,8 @@ class NablaTutorialExampleApp : public ApplicationBase
511546
*/
512547

513548
commandBuffer->bindGraphicsPipeline(gpuGraphicsPipeline.get());
514-
commandBuffer->bindDescriptorSets(asset::EPBP_GRAPHICS, gpuRenderpassIndependentPipeline->getLayout(), 1u, 1u, &gpuDescriptorSet1.get(), nullptr);
515-
commandBuffer->bindDescriptorSets(asset::EPBP_GRAPHICS, gpuRenderpassIndependentPipeline->getLayout(), 3u, 1u, &gpuDescriptorSet3.get(), nullptr);
549+
commandBuffer->bindDescriptorSets(asset::EPBP_GRAPHICS, gpuRenderpassIndependentPipeline->getLayout(), 1u, 1u, &gpuDescriptorSet1.get(), 0u);
550+
commandBuffer->bindDescriptorSets(asset::EPBP_GRAPHICS, gpuRenderpassIndependentPipeline->getLayout(), 3u, 1u, &gpuDescriptorSet3.get(), 0u);
516551

517552
/*
518553
Drawing a mesh (created rectangle) with it's gpu mesh buffer usage.
@@ -523,8 +558,8 @@ class NablaTutorialExampleApp : public ApplicationBase
523558
commandBuffer->endRenderPass();
524559
commandBuffer->end();
525560

526-
CommonAPI::Submit(logicalDevice.get(), swapchain.get(), commandBuffer.get(), queues[CommonAPI::InitOutput<1>::EQT_GRAPHICS], imageAcquire[resourceIx].get(), renderFinished[resourceIx].get(), fence.get());
527-
CommonAPI::Present(logicalDevice.get(), swapchain.get(), queues[CommonAPI::InitOutput<1>::EQT_GRAPHICS], renderFinished[resourceIx].get(), acquiredNextFBO);
561+
CommonAPI::Submit(logicalDevice.get(), swapchain.get(), commandBuffer.get(), queues[CommonAPI::InitOutput::EQT_GRAPHICS], imageAcquire[resourceIx].get(), renderFinished[resourceIx].get(), fence.get());
562+
CommonAPI::Present(logicalDevice.get(), swapchain.get(), queues[CommonAPI::InitOutput::EQT_GRAPHICS], renderFinished[resourceIx].get(), acquiredNextFBO);
528563
}
529564

530565
bool keepRunning() override

0 commit comments

Comments
 (0)