fixing the bug that kept AO when ao is off...

This commit is contained in:
samcake 2016-01-20 11:13:50 -08:00
parent 320c799379
commit 35ea04ae7c
4 changed files with 14 additions and 5 deletions

View file

@ -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) { gpu::doInBatch(args->_context, [&](gpu::Batch& batch) {
// Allocate the parameters buffer used by all the deferred shaders // 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 // perform deferred lighting, rendering to free fbo
auto framebufferCache = DependencyManager::get<FramebufferCache>(); auto framebufferCache = DependencyManager::get<FramebufferCache>();
auto textureCache = DependencyManager::get<TextureCache>();
QSize framebufferSize = framebufferCache->getFrameBufferSize(); 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_NORMAL_UNIT, framebufferCache->getDeferredNormalTexture());
batch.setResourceTexture(DEFERRED_BUFFER_EMISSIVE_UNIT, framebufferCache->getDeferredSpecularTexture()); batch.setResourceTexture(DEFERRED_BUFFER_EMISSIVE_UNIT, framebufferCache->getDeferredSpecularTexture());
batch.setResourceTexture(DEFERRED_BUFFER_DEPTH_UNIT, framebufferCache->getPrimaryDepthTexture()); 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); assert(_lightStage.lights.size() > 0);
const auto& globalShadow = _lightStage.lights[0]->shadow; const auto& globalShadow = _lightStage.lights[0]->shadow;

View file

@ -21,6 +21,8 @@
#include "model/Stage.h" #include "model/Stage.h"
#include "model/Geometry.h" #include "model/Geometry.h"
#include "render/Context.h"
#include "LightStage.h" #include "LightStage.h"
class RenderArgs; class RenderArgs;
@ -42,7 +44,7 @@ public:
float intensity = 0.5f, const glm::quat& orientation = glm::quat(), float exponent = 0.0f, float cutoff = PI); float intensity = 0.5f, const glm::quat& orientation = glm::quat(), float exponent = 0.0f, float cutoff = PI);
void prepare(RenderArgs* args); void prepare(RenderArgs* args);
void render(RenderArgs* args); void render(const render::RenderContextPointer& renderContext);
void setupTransparent(RenderArgs* args, int lightBufferUnit); void setupTransparent(RenderArgs* args, int lightBufferUnit);

View file

@ -64,7 +64,7 @@ void PrepareDeferred::run(const SceneContextPointer& sceneContext, const RenderC
} }
void RenderDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { void RenderDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {
DependencyManager::get<DeferredLightingEffect>()->render(renderContext->getArgs()); DependencyManager::get<DeferredLightingEffect>()->render(renderContext);
} }
void ToneMappingDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { void ToneMappingDeferred::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {

View file

@ -13,6 +13,7 @@
#include <ViewFrustum.h> #include <ViewFrustum.h>
#include "render/Context.h"
#include "DeferredLightingEffect.h" #include "DeferredLightingEffect.h"
#include "FramebufferCache.h" #include "FramebufferCache.h"
@ -116,7 +117,7 @@ RenderShadowTask::RenderShadowTask() : Task() {
addJob<RenderShadowMap>("RenderShadowMap", shadowShapes, shapePlumber); addJob<RenderShadowMap>("RenderShadowMap", shadowShapes, shapePlumber);
} }
void RenderShadowTask::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { void RenderShadowTask::run(const SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext) {
assert(sceneContext); assert(sceneContext);
RenderArgs* args = renderContext->getArgs(); RenderArgs* args = renderContext->getArgs();