diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index bf0e3ed1601b954d59011e35bbd1bcd2cff50cbe..9532770e17fc74527a74e9a3ef3a7e7b8f99b5b4 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -966,7 +966,10 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples) mFXAABuffer.release(); } - if (shadow_detail > 0 || ssao || RenderDepthOfField || samples > 0) +// if (shadow_detail > 0 || ssao || RenderDepthOfField || samples > 0) +// [RLVa:KB] - @setsphere + if (shadow_detail > 0 || ssao || RenderDepthOfField || samples > 0 || RlvActions::hasPostProcess()) +// [/RLVa:KB] { //only need mDeferredLight for shadows OR ssao OR dof OR fxaa if (!mDeferredLight.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE)) return false; } diff --git a/indra/newview/rlvactions.cpp b/indra/newview/rlvactions.cpp index 6629fc519b37de78d367d62ba32922fa243b39ee..912a8092f5942226c6ba816213441053dbe11802 100644 --- a/indra/newview/rlvactions.cpp +++ b/indra/newview/rlvactions.cpp @@ -18,6 +18,7 @@ #include "llagent.h" #include "llimview.h" #include "llviewercamera.h" +#include "llvisualeffect.h" #include "llvoavatarself.h" #include "llworld.h" @@ -397,6 +398,11 @@ bool RlvActions::canChangeEnvironment(const LLUUID& idRlvObject) return (idRlvObject.isNull()) ? !gRlvHandler.hasBehaviour(RLV_BHVR_SETENV) : !gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETENV, idRlvObject); } +bool RlvActions::hasPostProcess() +{ + return LLVfxManager::instance().hasEffect(EVisualEffect::RlvSphere); +} + // ============================================================================ // World interaction // diff --git a/indra/newview/rlvactions.h b/indra/newview/rlvactions.h index 217eb21a5881c7bf9fe7a8ea0441398b9b537933..36b59c2a1b53f4b1d1381b3b1f8b45596091d9ab 100644 --- a/indra/newview/rlvactions.h +++ b/indra/newview/rlvactions.h @@ -236,6 +236,10 @@ class RlvActions */ static bool canChangeEnvironment(const LLUUID& idRlvObject = LLUUID::null); + /* + * Returns true if a postprocessing shader is currently active + */ + static bool hasPostProcess(); // ================= // World interaction diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 26022657b9e88acf1f9a45128a30d7cdce2e7abb..0bf2c0f3f43d16d86426bc130184ae3fc7befe0d 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -2124,6 +2124,8 @@ ERlvCmdRet RlvBehaviourHandler<RLV_BHVR_SETSPHERE>::onCommand(const RlvCommand& { if (gRlvHandler.hasBehaviour(rlvCmd.getObjectID(), rlvCmd.getBehaviourType())) { + LLVfxManager::instance().addEffect(new RlvSphereEffect(rlvCmd.getObjectID())); + Rlv::forceAtmosphericShadersIfAvailable(); // If we're not using deferred but are using Windlight shaders we need to force use of FBO and depthmap texture @@ -2137,8 +2139,13 @@ ERlvCmdRet RlvBehaviourHandler<RLV_BHVR_SETSPHERE>::onCommand(const RlvCommand& gPipeline.resetVertexBuffers(); LLViewerShaderMgr::instance()->setShaders(); } - - LLVfxManager::instance().addEffect(new RlvSphereEffect(rlvCmd.getObjectID())); + else if (!gPipeline.mDeferredLight.isComplete()) + { + // In case of deferred with no shadows, no ambient occlusion, no depth of field, and no antialiasing + gPipeline.releaseGLBuffers(); + gPipeline.createGLBuffers(); + RLV_ASSERT(gPipeline.mDeferredLight.isComplete()); + } } else {