Make @setsphere work with only Windlight enabled by forcing use of FBO
parent
22a5734051
commit
978aa9a540
|
|
@ -616,7 +616,10 @@ static void settings_to_globals()
|
|||
|
||||
static void settings_modify()
|
||||
{
|
||||
LLRenderTarget::sUseFBO = gSavedSettings.getBOOL("RenderDeferred");
|
||||
// LLRenderTarget::sUseFBO = gSavedSettings.getBOOL("RenderDeferred");
|
||||
// [RLVa:KB] - @setsphere
|
||||
LLRenderTarget::sUseFBO = gSavedSettings.getBOOL("RenderDeferred") || (gSavedSettings.getBOOL("WindLightUseAtmosShaders") && LLPipeline::sUseDepthTexture);
|
||||
// [/RLVa:KB]
|
||||
LLPipeline::sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");
|
||||
LLPipeline::sRenderDeferred = LLPipeline::sRenderBump && gSavedSettings.getBOOL("RenderDeferred");
|
||||
LLVOSurfacePatch::sLODFactor = gSavedSettings.getF32("RenderTerrainLODFactor");
|
||||
|
|
|
|||
|
|
@ -395,9 +395,21 @@ static bool handleRenderLocalLightsChanged(const LLSD& newvalue)
|
|||
return true;
|
||||
}
|
||||
|
||||
// [RLVa:KB] - @setsphere
|
||||
static bool handleWindLightAtmosShadersChanged(const LLSD& newvalue)
|
||||
{
|
||||
LLRenderTarget::sUseFBO = newvalue.asBoolean() && LLPipeline::sUseDepthTexture;
|
||||
handleSetShaderChanged(LLSD());
|
||||
return true;
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
||||
static bool handleRenderDeferredChanged(const LLSD& newvalue)
|
||||
{
|
||||
LLRenderTarget::sUseFBO = newvalue.asBoolean();
|
||||
// LLRenderTarget::sUseFBO = newvalue.asBoolean();
|
||||
// [RLVa:KB] - @setsphere
|
||||
LLRenderTarget::sUseFBO = newvalue.asBoolean() || (gSavedSettings.getBOOL("WindLightUseAtmosShaders") && LLPipeline::sUseDepthTexture);
|
||||
// [/RLVa:KB]
|
||||
if (gPipeline.isInit())
|
||||
{
|
||||
LLPipeline::refreshCachedSettings();
|
||||
|
|
@ -419,7 +431,10 @@ static bool handleRenderDeferredChanged(const LLSD& newvalue)
|
|||
//
|
||||
static bool handleRenderBumpChanged(const LLSD& newval)
|
||||
{
|
||||
LLRenderTarget::sUseFBO = newval.asBoolean();
|
||||
// LLRenderTarget::sUseFBO = newval.asBoolean();
|
||||
// [RLVa:KB] - @setsphere
|
||||
LLRenderTarget::sUseFBO = newval.asBoolean() || (gSavedSettings.getBOOL("WindLightUseAtmosShaders") && LLPipeline::sUseDepthTexture);
|
||||
// [/RLVa:KB]
|
||||
if (gPipeline.isInit())
|
||||
{
|
||||
gPipeline.updateRenderBump();
|
||||
|
|
@ -624,7 +639,10 @@ void settings_setup_listeners()
|
|||
gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
gSavedSettings.getControl("RenderGlowResolutionPow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderAvatarCloth")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
// gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
// [RLVa:KB] - @setsphere
|
||||
gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleWindLightAtmosShadersChanged, _2));
|
||||
// [/RLVa:KB]
|
||||
gSavedSettings.getControl("RenderGammaFull")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
gSavedSettings.getControl("RenderVolumeLODFactor")->getSignal()->connect(boost::bind(&handleVolumeLODChanged, _2));
|
||||
gSavedSettings.getControl("RenderAvatarLODFactor")->getSignal()->connect(boost::bind(&handleAvatarLODChanged, _2));
|
||||
|
|
|
|||
|
|
@ -1036,6 +1036,15 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
|
|||
{
|
||||
gPipeline.renderDeferredLighting();
|
||||
}
|
||||
// [RLVa:KB] - @setsphere
|
||||
else if (LLRenderTarget::sUseFBO && LLPipeline::sUseDepthTexture)
|
||||
{
|
||||
if (RlvActions::hasBehaviour(RLV_BHVR_SETSPHERE))
|
||||
{
|
||||
LLVfxManager::instance().runEffect(EVisualEffect::RlvSphere);
|
||||
}
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
||||
LLPipeline::sUnderWaterRender = FALSE;
|
||||
|
||||
|
|
|
|||
|
|
@ -244,7 +244,7 @@ LLGLSLShader gDeferredSkinnedFullbrightShinyProgram;
|
|||
LLGLSLShader gDeferredSkinnedFullbrightProgram;
|
||||
LLGLSLShader gNormalMapGenProgram;
|
||||
// [RLVa:KB] - @setsphere
|
||||
LLGLSLShader gDeferredRlvProgram;
|
||||
LLGLSLShader gRlvSphereProgram;
|
||||
// [/RLVa:KB]
|
||||
|
||||
// Deferred materials shaders
|
||||
|
|
@ -352,7 +352,7 @@ LLViewerShaderMgr::LLViewerShaderMgr() :
|
|||
mShaderList.push_back(&gDeferredWLSkyProgram);
|
||||
mShaderList.push_back(&gDeferredWLCloudProgram);
|
||||
// [RLVa:KB] - @setsphere
|
||||
mShaderList.push_back(&gDeferredRlvProgram);
|
||||
mShaderList.push_back(&gRlvSphereProgram);
|
||||
// [/RLVa:KB]
|
||||
}
|
||||
|
||||
|
|
@ -1181,9 +1181,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
|
|||
gDeferredFullbrightShinyProgram.unload();
|
||||
gDeferredSkinnedFullbrightShinyProgram.unload();
|
||||
gDeferredSkinnedFullbrightProgram.unload();
|
||||
// [RLVa:KB] - @setsphere
|
||||
gDeferredRlvProgram.unload();
|
||||
// [/RLVa:KB]
|
||||
|
||||
gDeferredHighlightProgram.unload();
|
||||
gDeferredHighlightNormalProgram.unload();
|
||||
|
|
@ -2096,18 +2093,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
|
|||
success = gNormalMapGenProgram.createShader(NULL, NULL);
|
||||
}
|
||||
|
||||
// [RLVa:KB] - @setsphere
|
||||
if (success)
|
||||
{
|
||||
gDeferredRlvProgram.mName = "Deferred (RLVa) Post Processing Shader";
|
||||
gDeferredRlvProgram.mShaderFiles.clear();
|
||||
gDeferredRlvProgram.mShaderFiles.push_back(make_pair("deferred/rlvV.glsl", GL_VERTEX_SHADER_ARB));
|
||||
gDeferredRlvProgram.mShaderFiles.push_back(make_pair("deferred/rlvF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gDeferredRlvProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
|
||||
success = gDeferredRlvProgram.createShader(NULL, NULL);
|
||||
}
|
||||
// [/RLV:KB]
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
|
@ -3417,6 +3402,9 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()
|
|||
{
|
||||
gWLSkyProgram.unload();
|
||||
gWLCloudProgram.unload();
|
||||
// [RLVa:KB] - @setsphere
|
||||
gRlvSphereProgram.unload();
|
||||
// [/RLVa:KB]
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -3444,6 +3432,18 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()
|
|||
success = gWLCloudProgram.createShader(NULL, NULL);
|
||||
}
|
||||
|
||||
// [RLVa:KB] - @setsphere
|
||||
if (success)
|
||||
{
|
||||
gRlvSphereProgram.mName = "RLVa Sphere Post Processing Shader";
|
||||
gRlvSphereProgram.mShaderFiles.clear();
|
||||
gRlvSphereProgram.mShaderFiles.push_back(make_pair("deferred/rlvV.glsl", GL_VERTEX_SHADER_ARB));
|
||||
gRlvSphereProgram.mShaderFiles.push_back(make_pair("deferred/rlvF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gRlvSphereProgram.mShaderLevel = mVertexShaderLevel[SHADER_WINDLIGHT];
|
||||
success = gRlvSphereProgram.createShader(NULL, NULL);
|
||||
}
|
||||
// [/RLV:KB]
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -345,7 +345,7 @@ extern LLGLSLShader gDeferredSkinnedFullbrightShinyProgram;
|
|||
extern LLGLSLShader gDeferredSkinnedFullbrightProgram;
|
||||
extern LLGLSLShader gNormalMapGenProgram;
|
||||
// [RLVa:KB] - @setsphere
|
||||
extern LLGLSLShader gDeferredRlvProgram;
|
||||
extern LLGLSLShader gRlvSphereProgram;
|
||||
// [/RLVa:KB]
|
||||
|
||||
// Deferred materials shaders
|
||||
|
|
|
|||
|
|
@ -260,9 +260,6 @@ LLTrace::BlockTimerStatHandle FTM_STATESORT("Sort Draw State");
|
|||
LLTrace::BlockTimerStatHandle FTM_PIPELINE("Pipeline");
|
||||
LLTrace::BlockTimerStatHandle FTM_CLIENT_COPY("Client Copy");
|
||||
LLTrace::BlockTimerStatHandle FTM_RENDER_DEFERRED("Deferred Shading");
|
||||
// [RLVa:KB] - @setsphere
|
||||
LLTrace::BlockTimerStatHandle FTM_POST_DEFERRED_RLV("Post-process (Deferred RLVa)");
|
||||
// [/RLVa:KB]
|
||||
|
||||
|
||||
static LLTrace::BlockTimerStatHandle FTM_STATESORT_DRAWABLE("Sort Drawables");
|
||||
|
|
@ -412,6 +409,9 @@ bool LLPipeline::sRenderingHUDs;
|
|||
// [SL:KB] - Patch: Render-TextureToggle (Catznip-4.0)
|
||||
bool LLPipeline::sRenderTextures = true;
|
||||
// [/SL:KB]
|
||||
// [RLVa:KB] - @setsphere
|
||||
bool LLPipeline::sUseDepthTexture = false;
|
||||
// [/RLVa:KB]
|
||||
|
||||
// EventHost API LLPipeline listener.
|
||||
static LLPipelineListener sPipelineListener;
|
||||
|
|
@ -1069,9 +1069,22 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
|
|||
mFXAABuffer.release();
|
||||
mScreen.release();
|
||||
mDeferredScreen.release(); //make sure to release any render targets that share a depth buffer with mDeferredScreen first
|
||||
mDeferredDepth.release();
|
||||
mOcclusionDepth.release();
|
||||
|
||||
// [RLVa:KB] - @setsphere
|
||||
if (!LLRenderTarget::sUseFBO || !LLPipeline::sUseDepthTexture)
|
||||
{
|
||||
mDeferredDepth.release();
|
||||
mOcclusionDepth.release();
|
||||
}
|
||||
else
|
||||
{
|
||||
const U32 occlusion_divisor = 3;
|
||||
if (!mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;
|
||||
if (!mOcclusionDepth.allocate(resX / occlusion_divisor, resY / occlusion_divisor, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
// mDeferredDepth.release();
|
||||
// mOcclusionDepth.release();
|
||||
|
||||
if (!mScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE)) return false;
|
||||
}
|
||||
|
||||
|
|
@ -4509,7 +4522,17 @@ void LLPipeline::renderGeom(LLCamera& camera, bool forceVBOUpdate)
|
|||
gGLLastMatrix = NULL;
|
||||
gGL.loadMatrix(gGLModelView);
|
||||
LLGLSLShader::bindNoShader();
|
||||
doOcclusion(camera);
|
||||
// [RLVa:KB] - @setsphere
|
||||
if (LLPipeline::RenderDeferred || !LLRenderTarget::sUseFBO || !LLPipeline::sUseDepthTexture)
|
||||
{
|
||||
doOcclusion(camera);
|
||||
}
|
||||
else
|
||||
{
|
||||
doOcclusion(camera, mScreen, mOcclusionDepth, &mDeferredDepth);
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
// doOcclusion(camera);
|
||||
}
|
||||
|
||||
pool_set_t::iterator iter2 = iter1;
|
||||
|
|
@ -9087,7 +9110,6 @@ void LLPipeline::renderDeferredLighting()
|
|||
// [RLVa:KB] - @setsphere
|
||||
if (RlvActions::hasBehaviour(RLV_BHVR_SETSPHERE))
|
||||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_POST_DEFERRED_RLV);
|
||||
LLVfxManager::instance().runEffect(EVisualEffect::RlvSphere);
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
|
|
|||
|
|
@ -592,6 +592,9 @@ public:
|
|||
// [SL:KB] - Patch: Render-TextureToggle (Catznip-4.0)
|
||||
static bool sRenderTextures;
|
||||
// [/SL:KB]
|
||||
// [RLVa:KB] - @setsphere
|
||||
static bool sUseDepthTexture;
|
||||
// [/RLVa:KB]
|
||||
|
||||
static LLTrace::EventStatHandle<S64> sStatBatchSize;
|
||||
|
||||
|
|
|
|||
|
|
@ -24,10 +24,8 @@
|
|||
// Forward declarations
|
||||
//
|
||||
|
||||
class LLGLSLShader;
|
||||
class LLInventoryCategory;
|
||||
class LLInventoryItem;
|
||||
class LLRenderTarget;
|
||||
|
||||
// ============================================================================
|
||||
// RlvActions class declaration - developer-friendly non-RLVa code facing class, use in lieu of RlvHandler whenever possible
|
||||
|
|
|
|||
|
|
@ -271,6 +271,7 @@ enum ERlvBehaviourModifier
|
|||
RLV_MODIFIER_SETCAM_TEXTURE, // Specifies the UUID of the texture used to texture the world view
|
||||
RLV_MODIFIER_SITTPDIST,
|
||||
RLV_MODIFIER_TPLOCALDIST,
|
||||
|
||||
RLV_MODIFIER_COUNT,
|
||||
RLV_MODIFIER_UNKNOWN
|
||||
};
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llfasttimer.h"
|
||||
#include "llglslshader.h"
|
||||
#include "llrender2dutils.h"
|
||||
#include "llviewershadermgr.h"
|
||||
|
|
@ -383,27 +384,30 @@ void RlvSphereEffect::renderPass(LLGLSLShader* pShader) const
|
|||
gPipeline.mScreen.flush();
|
||||
}
|
||||
|
||||
LLTrace::BlockTimerStatHandle FTM_RLV_EFFECT_SPHERE("Post-process (RLVa sphere)");
|
||||
|
||||
void RlvSphereEffect::run()
|
||||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_RLV_EFFECT_SPHERE);
|
||||
LLGLDepthTest depth(GL_FALSE, GL_FALSE);
|
||||
|
||||
gDeferredRlvProgram.bind();
|
||||
setShaderUniforms(&gDeferredRlvProgram, &gPipeline.mScreen);
|
||||
gRlvSphereProgram.bind();
|
||||
setShaderUniforms(&gRlvSphereProgram, &gPipeline.mScreen);
|
||||
|
||||
switch (m_eMode)
|
||||
{
|
||||
case ESphereMode::Blend:
|
||||
renderPass(&gDeferredRlvProgram);
|
||||
renderPass(&gRlvSphereProgram);
|
||||
break;
|
||||
case ESphereMode::Blur:
|
||||
gDeferredRlvProgram.uniform2f(LLShaderMgr::RLV_EFFECT_PARAM5, 1.f, 0.f);
|
||||
renderPass(&gDeferredRlvProgram);
|
||||
gDeferredRlvProgram.uniform2f(LLShaderMgr::RLV_EFFECT_PARAM5, 0.f, 1.f);
|
||||
renderPass(&gDeferredRlvProgram);
|
||||
gRlvSphereProgram.uniform2f(LLShaderMgr::RLV_EFFECT_PARAM5, 1.f, 0.f);
|
||||
renderPass(&gRlvSphereProgram);
|
||||
gRlvSphereProgram.uniform2f(LLShaderMgr::RLV_EFFECT_PARAM5, 0.f, 1.f);
|
||||
renderPass(&gRlvSphereProgram);
|
||||
break;
|
||||
}
|
||||
|
||||
gDeferredRlvProgram.unbind();
|
||||
gRlvSphereProgram.unbind();
|
||||
}
|
||||
|
||||
// ====================================================================================
|
||||
|
|
|
|||
|
|
@ -51,8 +51,10 @@
|
|||
#include "lltabcontainer.h" // @showinv - Tab container control for inventory tabs
|
||||
#include "lltoolmgr.h" // @edit
|
||||
#include "llviewercamera.h" // @setcam and related
|
||||
#include "llviewershadermgr.h" // @setsphere
|
||||
#include "llworldmapmessage.h" // @tpto
|
||||
#include "llviewertexturelist.h" // @setcam_texture
|
||||
#include "pipeline.h" // @setsphere
|
||||
|
||||
// RLVa includes
|
||||
#include "rlvactions.h"
|
||||
|
|
@ -2066,6 +2068,18 @@ ERlvCmdRet RlvBehaviourHandler<RLV_BHVR_SETSPHERE>::onCommand(const RlvCommand&
|
|||
ERlvCmdRet eRet = RlvBehaviourGenericHandler<RLV_OPTION_NONE_OR_MODIFIER>::onCommand(rlvCmd, fRefCount);
|
||||
if ( (RLV_RET_SUCCESS == eRet) && (!rlvCmd.isModifier()) )
|
||||
{
|
||||
// If we're not using deferred but are using Windlight shaders we need to force use of FBO and depthmap texture
|
||||
if ( (!LLPipeline::RenderDeferred) && (LLPipeline::WindLightUseAtmosShaders) && (!LLPipeline::sUseDepthTexture) )
|
||||
{
|
||||
LLRenderTarget::sUseFBO = true;
|
||||
LLPipeline::sUseDepthTexture = true;
|
||||
|
||||
gPipeline.releaseGLBuffers();
|
||||
gPipeline.createGLBuffers();
|
||||
gPipeline.resetVertexBuffers();
|
||||
LLViewerShaderMgr::instance()->setShaders();
|
||||
}
|
||||
|
||||
if (gRlvHandler.hasBehaviour(rlvCmd.getObjectID(), rlvCmd.getBehaviourType()))
|
||||
LLVfxManager::instance().addEffect(new RlvSphereEffect(rlvCmd.getObjectID()));
|
||||
else
|
||||
|
|
|
|||
Loading…
Reference in New Issue