diff --git a/libraries/gpu/src/gpu/State.h b/libraries/gpu/src/gpu/State.h index abe0cd7731..2e8a3f2cab 100755 --- a/libraries/gpu/src/gpu/State.h +++ b/libraries/gpu/src/gpu/State.h @@ -246,7 +246,7 @@ public: struct Flags { Flags() : - frontFaceClockwise(false), depthClampEnable(false), scissorEnable(false), multisampleEnable(false), + frontFaceClockwise(false), depthClampEnable(false), scissorEnable(false), multisampleEnable(true), antialisedLineEnable(true), alphaToCoverageEnable(false), _spare1(0) {} bool frontFaceClockwise : 1; bool depthClampEnable : 1; diff --git a/libraries/render-utils/src/RenderCommonTask.cpp b/libraries/render-utils/src/RenderCommonTask.cpp index b4a77479db..9a70b1c1b3 100644 --- a/libraries/render-utils/src/RenderCommonTask.cpp +++ b/libraries/render-utils/src/RenderCommonTask.cpp @@ -101,7 +101,7 @@ void DrawOverlay3D::run(const RenderContextPointer& renderContext, const Inputs& } } -void CompositeHUD::run(const RenderContextPointer& renderContext) { +void CompositeHUD::run(const RenderContextPointer& renderContext, const gpu::FramebufferPointer& inputs) { assert(renderContext->args); assert(renderContext->args->_context); @@ -119,6 +119,9 @@ void CompositeHUD::run(const RenderContextPointer& renderContext) { renderContext->args->getViewFrustum().evalViewTransform(viewMat); batch.setProjectionTransform(projMat); batch.setViewTransform(viewMat, true); + if (inputs) { + batch.setFramebuffer(inputs); + } if (renderContext->args->_hudOperator) { renderContext->args->_hudOperator(batch, renderContext->args->_hudTexture, renderContext->args->_renderMode == RenderArgs::RenderMode::MIRROR_RENDER_MODE); } diff --git a/libraries/render-utils/src/RenderCommonTask.h b/libraries/render-utils/src/RenderCommonTask.h index a1de50abba..bc1031a18c 100644 --- a/libraries/render-utils/src/RenderCommonTask.h +++ b/libraries/render-utils/src/RenderCommonTask.h @@ -77,10 +77,12 @@ protected: class CompositeHUD { public: - using JobModel = render::Job::Model; + // IF specified the input Framebuffer is actively set by the batch of this job before calling the HUDOperator. + // If not, the current Framebuffer is left unchanged. + //using Inputs = gpu::FramebufferPointer; + using JobModel = render::Job::ModelI; - CompositeHUD() {} - void run(const render::RenderContextPointer& renderContext); + void run(const render::RenderContextPointer& renderContext, const gpu::FramebufferPointer& inputs); }; class Blit { diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index a685f3998e..44b38c0d8d 100644 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -258,7 +258,7 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren const auto primaryFramebuffer = task.addJob("PrimaryBufferUpscale", scaledPrimaryFramebuffer); // Composite the HUD and HUD overlays - task.addJob("HUD"); + task.addJob("HUD", primaryFramebuffer); const auto nullJitter = Varying(glm::vec2(0.0f, 0.0f)); const auto overlayHUDOpaquesInputs = DrawOverlay3D::Inputs(overlaysHUDOpaque, lightingModel, nullJitter).asVarying(); diff --git a/libraries/render-utils/src/RenderForwardTask.cpp b/libraries/render-utils/src/RenderForwardTask.cpp index c47935c6fc..850de8eae9 100755 --- a/libraries/render-utils/src/RenderForwardTask.cpp +++ b/libraries/render-utils/src/RenderForwardTask.cpp @@ -130,20 +130,20 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend } // Just resolve the msaa -/* const auto resolveInputs = + const auto resolveInputs = ResolveFramebuffer::Inputs(framebuffer, static_cast(nullptr)).asVarying(); - auto resolvedFramebuffer = task.addJob("Resolve", resolveInputs); */ - auto resolvedFramebuffer = task.addJob("Resolve", framebuffer); + const auto resolvedFramebuffer = task.addJob("Resolve", resolveInputs); + //auto resolvedFramebuffer = task.addJob("Resolve", framebuffer); // Lighting Buffer ready for tone mapping // Forward rendering on GLES doesn't support tonemapping to and from the same FBO, so we specify // the output FBO as null, which causes the tonemapping to target the blit framebuffer - const auto toneMappingInputs = ToneMappingDeferred::Inputs(resolvedFramebuffer, static_cast(nullptr)).asVarying(); - task.addJob("ToneMapping", toneMappingInputs); + //const auto toneMappingInputs = ToneMappingDeferred::Inputs(resolvedFramebuffer, static_cast(nullptr)).asVarying(); + //task.addJob("ToneMapping", toneMappingInputs); // Layered Overlays // Composite the HUD and HUD overlays - task.addJob("HUD"); + task.addJob("HUD", resolvedFramebuffer); // Disable blit because we do tonemapping and compositing directly to the blit FBO // Blit!