Skip to content

Commit b2c393d

Browse files
committed
Fix screenshots - reset counters for each sensor so FramesDispatched is 0 at the beginning of each render
1 parent d0b895e commit b2c393d

File tree

3 files changed

+32
-8
lines changed

3 files changed

+32
-8
lines changed

examples_tests/22.RaytracedAO/Renderer.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -853,6 +853,8 @@ void Renderer::deinitSceneResources()
853853

854854
m_raytraceCommonData = {vec3(),0,0,0,0u};
855855
m_sceneBound = core::aabbox3df(FLT_MAX, FLT_MAX, FLT_MAX, -FLT_MAX, -FLT_MAX, -FLT_MAX);
856+
857+
m_staticViewData = {{0.f,0.f,0.f},0u,{0u,0u},0u,0u};
856858

857859
auto rr = m_rrManager->getRadeonRaysAPI();
858860
rr->DetachAll();
@@ -1207,14 +1209,22 @@ void Renderer::deinitScreenSizedResources()
12071209
m_closestHitPipeline = nullptr;
12081210
m_resolvePipeline = nullptr;
12091211

1210-
m_staticViewData = {{0.f,0.f,0.f},0u,{0u,0u},0u,0u};
1212+
m_staticViewData.imageDimensions = {0u, 0u};
1213+
m_staticViewData.samplesPerPixelPerDispatch = 0u;
12111214
m_totalRaysCast = 0ull;
12121215
m_rcpPixelSize = {0.f,0.f};
12131216
m_framesDispatched = 0u;
12141217
std::fill_n(m_prevView.pointer(),12u,0.f);
12151218
m_prevCamTform = nbl::core::matrix4x3();
12161219
}
12171220

1221+
void Renderer::resetSampleAndFrameCounters()
1222+
{
1223+
m_totalRaysCast = 0ull;
1224+
m_framesDispatched = 0u;
1225+
std::fill_n(m_prevView.pointer(),12u,0.f);
1226+
m_prevCamTform = nbl::core::matrix4x3();
1227+
}
12181228

12191229
void Renderer::takeAndSaveScreenShot(const std::string& screenShotName, const std::filesystem::path& screenshotFolderPath)
12201230
{
@@ -1355,7 +1365,6 @@ void Renderer::render(nbl::ITimer* timer)
13551365
m_driver->bindDescriptorSets(EPBP_COMPUTE,m_resolvePipeline->getLayout(),0u,1u,&m_resolveDS.get(),nullptr);
13561366
m_driver->bindComputePipeline(m_resolvePipeline.get());
13571367
m_driver->dispatch(m_raygenWorkGroups[0],m_raygenWorkGroups[1],1);
1358-
13591368
COpenGLExtensionHandler::pGlMemoryBarrier(GL_TEXTURE_FETCH_BARRIER_BIT|GL_SHADER_IMAGE_ACCESS_BARRIER_BIT
13601369
#ifndef _NBL_BUILD_OPTIX_
13611370
|GL_FRAMEBUFFER_BARRIER_BIT|GL_TEXTURE_UPDATE_BARRIER_BIT

examples_tests/22.RaytracedAO/Renderer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ class Renderer : public nbl::core::IReferenceCounted, public nbl::core::Interfac
3838

3939
void deinitScreenSizedResources();
4040

41+
void resetSampleAndFrameCounters();
42+
4143
void takeAndSaveScreenShot(const std::string& screenShotName, const std::filesystem::path& screenshotFolderPath = "");
4244

4345
void render(nbl::ITimer* timer);

examples_tests/22.RaytracedAO/main.cpp

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -293,12 +293,14 @@ int main(int argc, char** argv)
293293
std::cout << "\tSensor Type is not valid" << std::endl;
294294
return false;
295295
}
296-
296+
297297
outSensorData.samplesNeeded = sensor.sampler.sampleCount;
298298
outSensorData.staticCamera = smgr->addCameraSceneNode(nullptr);
299299
outSensorData.interactiveCamera = smgr->addCameraSceneNodeModifiedMaya(nullptr, -400.0f, 20.0f, 200.0f, -1, 2.0f, 1.0f, false, true);
300300
auto & staticCamera = outSensorData.staticCamera;
301301
auto & interactiveCamera = outSensorData.interactiveCamera;
302+
303+
std::cout << "\t SamplesPerPixelNeeded = " << outSensorData.samplesNeeded << std::endl;
302304

303305
// need to extract individual components
304306
{
@@ -416,9 +418,17 @@ int main(int argc, char** argv)
416418
std::cout << "New Injected Sensors[0] = " << std::endl;
417419
SensorData newSensor = {};
418420
extractSensorData(newSensor, globalMeta->m_global.m_sensors[0]);
419-
newSensor.staticCamera->setPosition(core::vector3df(0.0f,0.0f,0.0f));
421+
newSensor.staticCamera->setPosition(core::vector3df(0.0f,2.0f,0.0f));
422+
newSensor.staticCamera->setTarget(core::vector3df(-0.900177f, 2.0f, -0.435524f));
423+
core::vectorSIMDf UpVector(0.0f, 1.0f, 0.0f);
424+
newSensor.staticCamera->setUpVector(UpVector);
425+
newSensor.staticCamera->render(); // It's not actually "render" :| It's basically recomputeViewMatrix ;
426+
420427
newSensor.resetInteractiveCamera();
421428
sensors.push_back(newSensor);
429+
430+
sensors[0].samplesNeeded = 4u;
431+
sensors[1].samplesNeeded = 4u;
422432
#endif
423433

424434
auto driver = device->getVideoDriver();
@@ -482,6 +492,7 @@ int main(int argc, char** argv)
482492
bool needsReinit = (activeSensor == -1) || (sensors[activeSensor].width != sensors[index].width) || (sensors[activeSensor].height != sensors[index].height); // should be >= or != ?
483493
activeSensor = index;
484494

495+
renderer->resetSampleAndFrameCounters();
485496
if(needsReinit)
486497
{
487498
renderer->deinitScreenSizedResources();
@@ -521,7 +532,7 @@ int main(int argc, char** argv)
521532
}
522533

523534
driver->beginScene(false, false);
524-
535+
525536
renderer->render(device->getTimer());
526537

527538
auto oldVP = driver->getViewPort();
@@ -556,18 +567,20 @@ int main(int argc, char** argv)
556567
{
557568
const auto& sensorData = sensors[s];
558569

559-
std::cout << "-- Rendering " << filePath << " (Sensor=" << s << ") to file..." << std::endl;
560-
smgr->setActiveCamera(sensorData.staticCamera);
570+
std::cout << "-- Rendering " << filePath << ", Sensor = " << s << " to file." << std::endl;
561571

562572
bool needsReinit = (prevWidth != sensorData.width) || (prevHeight != sensorData.height); // >= or !=
563573
prevWidth = sensorData.width;
564574
prevHeight = sensorData.height;
565-
575+
576+
renderer->resetSampleAndFrameCounters(); // so that renderer->getTotalSamplesPerPixelComputed is 0 at the very beginning
566577
if(needsReinit)
567578
{
568579
renderer->deinitScreenSizedResources();
569580
renderer->initScreenSizedResources(sensorData.width, sensorData.height, std::move(sampleSequence));
570581
}
582+
583+
smgr->setActiveCamera(sensorData.staticCamera);
571584

572585
const uint32_t samplesPerPixelPerDispatch = renderer->getSamplesPerPixelPerDispatch();
573586
const uint32_t maxNeededIterations = (sensorData.samplesNeeded + samplesPerPixelPerDispatch - 1) / samplesPerPixelPerDispatch;

0 commit comments

Comments
 (0)