diff --git a/libraries/render-utils/src/RenderForwardTask.cpp b/libraries/render-utils/src/RenderForwardTask.cpp index 3567588797..b833fb47b8 100755 --- a/libraries/render-utils/src/RenderForwardTask.cpp +++ b/libraries/render-utils/src/RenderForwardTask.cpp @@ -31,8 +31,8 @@ using namespace render; extern void initForwardPipelines(ShapePlumber& plumber, - const render::ShapePipeline::BatchSetter& batchSetter, - const render::ShapePipeline::ItemSetter& itemSetter); + const render::ShapePipeline::BatchSetter& batchSetter, + const render::ShapePipeline::ItemSetter& itemSetter); void RenderForwardTask::build(JobModel& task, const render::Varying& input, render::Varying& output) { auto items = input.get(); @@ -54,29 +54,37 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend fadeEffect->build(task, opaques); - const auto framebuffer = task.addJob("PrepareFramebuffer"); - - task.addJob("DrawOpaques", opaques, shapePlumber); - task.addJob("Stencil"); - + // Prepare objects shared by several jobs const auto lightingModel = task.addJob("LightingModel"); // Filter zones from the general metas bucket const auto zones = task.addJob("ZoneRenderer", metas); - // task.addJob("DrawBackground", background); + // GPU jobs: Start preparing the main framebuffer + const auto framebuffer = task.addJob("PrepareFramebuffer"); + + // draw a stencil mask in hidden regions of the framebuffer. + task.addJob("PrepareStencil", framebuffer); + + // Draw opaques forward + task.addJob("DrawOpaques", opaques, shapePlumber); + // Similar to light stage, background stage has been filled by several potential render items and resolved for the frame in this job task.addJob("DrawBackgroundDeferred", lightingModel); + // Draw transparent objects forward + task.addJob("DrawTransparents", transparents, shapePlumber); + { // Debug the bounds of the rendered items, still look at the zbuffer task.addJob("DrawMetaBounds", metas); task.addJob("DrawBounds", opaques); + task.addJob("DrawTransparentBounds", transparents); task.addJob("DrawZones", zones); } - task.addJob("DrawTransparents", transparents, shapePlumber); + // Layered Overlays // Composite the HUD and HUD overlays task.addJob("HUD"); @@ -86,9 +94,7 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend } void PrepareFramebuffer::run(const RenderContextPointer& renderContext, gpu::FramebufferPointer& framebuffer) { - auto framebufferCache = DependencyManager::get(); - auto framebufferSize = framebufferCache->getFrameBufferSize(); - glm::uvec2 frameSize(framebufferSize.width(), framebufferSize.height()); + glm::uvec2 frameSize(renderContext->args->_viewport.z, renderContext->args->_viewport.w); // Resizing framebuffers instead of re-building them seems to cause issues with threaded rendering if (_framebuffer && _framebuffer->getSize() != frameSize) { @@ -118,8 +124,8 @@ void PrepareFramebuffer::run(const RenderContextPointer& renderContext, gpu::Fra batch.setFramebuffer(_framebuffer); batch.clearFramebuffer(gpu::Framebuffer::BUFFER_COLOR0 | gpu::Framebuffer::BUFFER_DEPTH | - gpu::Framebuffer::BUFFER_STENCIL, - vec4(vec3(0), 1), 1.0, 0, true); + gpu::Framebuffer::BUFFER_STENCIL, + vec4(vec3(0), 1), 1.0, 0, true); }); framebuffer = _framebuffer; @@ -199,4 +205,4 @@ void DrawBackground::run(const RenderContextPointer& renderContext, const Inputs renderItems(renderContext, background); }); args->_batch = nullptr; -} +} \ No newline at end of file