From 35ea04ae7cf6994b65d62815e43ee62d472d17a8 Mon Sep 17 00:00:00 2001 From: samcake Date: Wed, 20 Jan 2016 11:13:50 -0800 Subject: [PATCH] fixing the bug that kept AO when ao is off... --- libraries/render-utils/src/DeferredLightingEffect.cpp | 10 ++++++++-- libraries/render-utils/src/DeferredLightingEffect.h | 4 +++- libraries/render-utils/src/RenderDeferredTask.cpp | 2 +- libraries/render-utils/src/RenderShadowTask.cpp | 3 ++- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/libraries/render-utils/src/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp index e43e76c87a..a69343fb34 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.cpp +++ b/libraries/render-utils/src/DeferredLightingEffect.cpp @@ -155,7 +155,8 @@ void DeferredLightingEffect::prepare(RenderArgs* args) { }); } -void DeferredLightingEffect::render(RenderArgs* args) { +void DeferredLightingEffect::render(const render::RenderContextPointer& renderContext) { + auto args = renderContext->getArgs(); gpu::doInBatch(args->_context, [&](gpu::Batch& batch) { // Allocate the parameters buffer used by all the deferred shaders @@ -170,6 +171,7 @@ void DeferredLightingEffect::render(RenderArgs* args) { // perform deferred lighting, rendering to free fbo auto framebufferCache = DependencyManager::get(); + auto textureCache = DependencyManager::get(); QSize framebufferSize = framebufferCache->getFrameBufferSize(); @@ -185,7 +187,11 @@ void DeferredLightingEffect::render(RenderArgs* args) { batch.setResourceTexture(DEFERRED_BUFFER_NORMAL_UNIT, framebufferCache->getDeferredNormalTexture()); batch.setResourceTexture(DEFERRED_BUFFER_EMISSIVE_UNIT, framebufferCache->getDeferredSpecularTexture()); batch.setResourceTexture(DEFERRED_BUFFER_DEPTH_UNIT, framebufferCache->getPrimaryDepthTexture()); - batch.setResourceTexture(DEFERRED_BUFFER_OBSCURANCE_UNIT, framebufferCache->getOcclusionTexture()); + if (renderContext->getOcclusionStatus()) { + batch.setResourceTexture(DEFERRED_BUFFER_OBSCURANCE_UNIT, framebufferCache->getOcclusionTexture()); + } else { + batch.setResourceTexture(DEFERRED_BUFFER_OBSCURANCE_UNIT, textureCache->getWhiteTexture()); + } assert(_lightStage.lights.size() > 0); const auto& globalShadow = _lightStage.lights[0]->shadow; diff --git a/libraries/render-utils/src/DeferredLightingEffect.h b/libraries/render-utils/src/DeferredLightingEffect.h index d11dee7d49..314cf47202 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.h +++ b/libraries/render-utils/src/DeferredLightingEffect.h @@ -21,6 +21,8 @@ #include "model/Stage.h" #include "model/Geometry.h" +#include "render/Context.h" + #include "LightStage.h" class RenderArgs; @@ -42,7 +44,7 @@ public: float intensity = 0.5f, const glm::quat& orientation = glm::quat(), float exponent = 0.0f, float cutoff = PI); void prepare(RenderArgs* args); - void render(RenderArgs* args); + void render(const render::RenderContextPointer& renderContext); void setupTransparent(RenderArgs* args, int lightBufferUnit); diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index 3396e44d58..3419adafe8 100755 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -64,7 +64,7 @@ void PrepareDeferred::run(const SceneContextPointer& sceneContext, const RenderC } void RenderDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { - DependencyManager::get()->render(renderContext->getArgs()); + DependencyManager::get()->render(renderContext); } void ToneMappingDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { diff --git a/libraries/render-utils/src/RenderShadowTask.cpp b/libraries/render-utils/src/RenderShadowTask.cpp index b6b9f15f60..bc1c17e0d0 100644 --- a/libraries/render-utils/src/RenderShadowTask.cpp +++ b/libraries/render-utils/src/RenderShadowTask.cpp @@ -13,6 +13,7 @@ #include +#include "render/Context.h" #include "DeferredLightingEffect.h" #include "FramebufferCache.h" @@ -116,7 +117,7 @@ RenderShadowTask::RenderShadowTask() : Task() { addJob("RenderShadowMap", shadowShapes, shapePlumber); } -void RenderShadowTask::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { +void RenderShadowTask::run(const SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext) { assert(sceneContext); RenderArgs* args = renderContext->getArgs();