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