History

Repaired Luci shadow cascade and depth visualisation

Olivier Prat committed 8 years ago

Commit d1d67821 parent a3e1eb93 files · +44 −3Browse files

Showing the changes to libraries/render-utils/src/RenderDeferredTask.cpp (1 of 3 files). Show all

Unified · Split

libraries/render-utils/src/RenderDeferredTask.cpp+26−0
@@ -211,6 +211,9 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren · 210 unmodified lines
211 const auto overlaysInFrontOpaque = filteredOverlaysOpaque.getN<FilterLayeredItems::Outputs>(0);211 const auto overlaysInFrontOpaque = filteredOverlaysOpaque.getN<FilterLayeredItems::Outputs>(0);
212 const auto overlaysInFrontTransparent = filteredOverlaysTransparent.getN<FilterLayeredItems::Outputs>(0);212 const auto overlaysInFrontTransparent = filteredOverlaysTransparent.getN<FilterLayeredItems::Outputs>(0);
213 213
214 // We don't want the overlay to clear the deferred frame buffer depth because we would like to keep it for debugging visualisation
215 task.addJob<SetSeparateDeferredDepthBuffer>("SeparateDepthForOverlay", deferredFramebuffer);
216
214 const auto overlayInFrontOpaquesInputs = DrawOverlay3D::Inputs(overlaysInFrontOpaque, lightingModel, jitter).asVarying();217 const auto overlayInFrontOpaquesInputs = DrawOverlay3D::Inputs(overlaysInFrontOpaque, lightingModel, jitter).asVarying();
215 const auto overlayInFrontTransparentsInputs = DrawOverlay3D::Inputs(overlaysInFrontTransparent, lightingModel, jitter).asVarying();218 const auto overlayInFrontTransparentsInputs = DrawOverlay3D::Inputs(overlaysInFrontTransparent, lightingModel, jitter).asVarying();
216 task.addJob<DrawOverlay3D>("DrawOverlayInFrontOpaque", overlayInFrontOpaquesInputs, true);219 task.addJob<DrawOverlay3D>("DrawOverlayInFrontOpaque", overlayInFrontOpaquesInputs, true);
@@ -451,3 +454,26 @@ void DrawStateSortDeferred::run(const RenderContextPointer& renderContext, const · 234 unmodified lines
451 454
452 config->setNumDrawn((int)inItems.size());455 config->setNumDrawn((int)inItems.size());
453}456}
457
458void SetSeparateDeferredDepthBuffer::run(const render::RenderContextPointer& renderContext, const Inputs& inputs) {
459 assert(renderContext->args);
460
461 const auto deferredFramebuffer = inputs->getDeferredFramebuffer();
462 const auto frameSize = deferredFramebuffer->getSize();
463 const auto renderbufferCount = deferredFramebuffer->getNumRenderBuffers();
464
465 if (!_framebuffer || _framebuffer->getSize() != frameSize || _framebuffer->getNumRenderBuffers() != renderbufferCount) {
466 auto depthFormat = deferredFramebuffer->getDepthStencilBufferFormat();
467 auto depthStencilTexture = gpu::TexturePointer(gpu::Texture::createRenderBuffer(depthFormat, frameSize.x, frameSize.y));
468 _framebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("deferredFramebufferSeparateDepth"));
469 _framebuffer->setDepthStencilBuffer(depthStencilTexture, depthFormat);
470 for (decltype(deferredFramebuffer->getNumRenderBuffers()) i = 0; i < renderbufferCount; i++) {
471 _framebuffer->setRenderBuffer(i, deferredFramebuffer->getRenderBuffer(i));
472 }
473 }
474
475 RenderArgs* args = renderContext->args;
476 gpu::doInBatch("SetSeparateDeferredDepthBuffer::run", args->_context, [this](gpu::Batch& batch) {
477 batch.setFramebuffer(_framebuffer);
478 });
479}