Remove RLVa @setsphere from the rendering pipeline since it's completely broken by now and needs to be re-implemented away

master
Ansariel 2023-02-04 15:38:26 +01:00
parent ca5c9c9215
commit b7490b0bc5
8 changed files with 76 additions and 167 deletions

View File

@ -649,10 +649,7 @@ static void settings_modify()
LLPipeline::sRenderTransparentWater = gSavedSettings.getBOOL("RenderTransparentWater");
LLPipeline::sRenderBump = TRUE; // FALSE is deprecated -- gSavedSettings.getBOOL("RenderObjectBump");
LLPipeline::sRenderDeferred = TRUE; // FALSE is deprecated -- LLPipeline::sRenderBump&& gSavedSettings.getBOOL("RenderDeferred");
// LLRenderTarget::sUseFBO = LLPipeline::sRenderDeferred;
// [RLVa:KB] - @setsphere
LLRenderTarget::sUseFBO = LLPipeline::sRenderDeferred || (gSavedSettings.getBOOL("WindLightUseAtmosShaders") && LLPipeline::sUseDepthTexture);
// [/RLVa:KB]
LLRenderTarget::sUseFBO = LLPipeline::sRenderDeferred;
LLVOSurfacePatch::sLODFactor = gSavedSettings.getF32("RenderTerrainLODFactor");
LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //square lod factor to get exponential range of [1,4]
gDebugGL = gDebugGLSession || gDebugSession;

View File

@ -226,15 +226,6 @@ static bool handleAvatarHoverOffsetChanged(const LLSD& newvalue)
bool handleSetShaderChanged(const LLSD& newvalue)
// </FS:Ansariel>
{
// [RLVa:KB] - @setenv and @setsphere
if ( (RlvActions::isRlvEnabled()) && (!RlvActions::canChangeEnvironment() || (LLVfxManager::instance().hasEffect(EVisualEffect::RlvSphere))) &&
(LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders"))&& (!gSavedSettings.getBOOL("WindLightUseAtmosShaders")) )
{
gSavedSettings.setBOOL("WindLightUseAtmosShaders", TRUE);
return true;
}
// [/RLVa:KB]
// changing shader level may invalidate existing cached bump maps, as the shader type determines the format of the bump map it expects - clear and repopulate the bump cache
gBumpImageList.destroyGL();
gBumpImageList.restoreGL();

View File

@ -202,9 +202,6 @@ LLGLSLShader gDeferredSkinnedFullbrightAlphaMaskProgram;
LLGLSLShader gDeferredSkinnedFullbrightAlphaMaskAlphaProgram;
LLGLSLShader gNormalMapGenProgram;
LLGLSLShader gDeferredGenBrdfLutProgram;
// [RLVa:KB] - @setsphere
LLGLSLShader gRlvSphereProgram;
// [/RLVa:KB]
// Deferred materials shaders
LLGLSLShader gDeferredMaterialProgram[LLMaterial::SHADER_COUNT*2];
@ -289,10 +286,6 @@ LLViewerShaderMgr::LLViewerShaderMgr() :
mShaderList.push_back(&gDeferredWLSunProgram);
mShaderList.push_back(&gDeferredPBRAlphaProgram);
mShaderList.push_back(&gDeferredSkinnedPBRAlphaProgram);
// [RLVa:KB] - @setsphere
mShaderList.push_back(&gRlvSphereProgram);
// [/RLVa:KB]
}
LLViewerShaderMgr::~LLViewerShaderMgr()

View File

@ -264,9 +264,6 @@ extern LLGLSLShader gDeferredFullbrightShinyProgram;
extern LLGLSLShader gHUDFullbrightShinyProgram;
extern LLGLSLShader gNormalMapGenProgram;
extern LLGLSLShader gDeferredGenBrdfLutProgram;
// [RLVa:KB] - @setsphere
extern LLGLSLShader gRlvSphereProgram;
// [/RLVa:KB]
// Deferred materials shaders
extern LLGLSLShader gDeferredMaterialProgram[LLMaterial::SHADER_COUNT*2];

View File

@ -349,9 +349,6 @@ bool LLPipeline::sRenderParticles; // <FS:LO> flag to hold correct, user selecte
// [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;
@ -940,17 +937,14 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
mRT->fxaaBuffer.release();
}
// 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 mRT->deferredLight for shadows OR ssao OR dof OR fxaa
if (!mRT->deferredLight.allocate(resX, resY, GL_RGBA16)) return false;
}
else
{
mRT->deferredLight.release();
}
if (shadow_detail > 0 || ssao || RenderDepthOfField || samples > 0)
{ //only need mRT->deferredLight for shadows OR ssao OR dof OR fxaa
if (!mRT->deferredLight.allocate(resX, resY, GL_RGBA16)) return false;
}
else
{
mRT->deferredLight.release();
}
allocateShadowBuffer(resX, resY);
@ -1067,7 +1061,7 @@ bool LLPipeline::allocateShadowBuffer(U32 resX, U32 resY)
//static
void LLPipeline::updateRenderTransparentWater()
{
sRenderTransparentWater = gSavedSettings.getBOOL("RenderTransparentWater");
sRenderTransparentWater = gSavedSettings.getBOOL("RenderTransparentWater");
}
//static
@ -5555,7 +5549,7 @@ void LLPipeline::setupAvatarLights(bool for_edit)
}
}
F32 backlight_mag;
if (environment.getIsSunUp()) // <FS:Ansariel> Factor out instance() calls
if (LLEnvironment::instance().getIsSunUp())
{
backlight_mag = BACKLIGHT_DAY_MAGNITUDE_OBJECT;
}
@ -7302,23 +7296,14 @@ void LLPipeline::renderPostProcess()
LLVertexBuffer::unbind();
// [RLVa:KB] - @setsphere
LLRenderTarget* pRenderBuffer = (RlvActions::hasBehaviour(RLV_BHVR_SETSPHERE)) ? &mRT->deferredLight : nullptr;
// [/RLVa:KB]
{
bool dof_enabled =
{
bool dof_enabled =
(RenderDepthOfFieldInEditMode || !LLToolMgr::getInstance()->inBuildMode()) &&
RenderDepthOfField &&
!gCubeSnapshot;
bool multisample = RenderFSAASamples > 1 && mRT->fxaaBuffer.isComplete() && !gCubeSnapshot;
exoPostProcess::instance().multisample = multisample; // <FS:CR> Import Vignette from Exodus
// [RLVa:KB] - @setsphere
if (multisample && !pRenderBuffer)
{
pRenderBuffer = &mRT->deferredLight;
}
// [/RLVa:KB]
gViewerWindow->setup3DViewport();
@ -7513,18 +7498,11 @@ void LLPipeline::renderPostProcess()
}
{ // combine result based on alpha
//if (multisample)
//{
// mRT->deferredLight.bindTarget();
// glViewport(0, 0, mRT->deferredScreen.getWidth(), mRT->deferredScreen.getHeight());
//}
// [RLVa:KB] - @setsphere
if (pRenderBuffer)
if (multisample)
{
pRenderBuffer->bindTarget();
mRT->deferredLight.bindTarget();
glViewport(0, 0, mRT->deferredScreen.getWidth(), mRT->deferredScreen.getHeight());
}
// [/RLVa:KB]
else
{
gGLViewport[0] = gViewerWindow->getWorldViewRectRaw().mLeft;
@ -7562,31 +7540,19 @@ void LLPipeline::renderPostProcess()
unbindDeferredShader(*shader);
// [RLVa:KB] - @setsphere
if (pRenderBuffer)
if (multisample)
{
pRenderBuffer->flush();
mRT->deferredLight.flush();
}
// [/RLVa:KB]
//if (multisample)
//{
// mRT->deferredLight.flush();
//}
}
}
else
{
LL_PROFILE_GPU_ZONE("no dof");
//if (multisample)
//{
// mRT->deferredLight.bindTarget();
//}
// [RLVa:KB] - @setsphere
if (pRenderBuffer)
if (multisample)
{
pRenderBuffer->bindTarget();
mRT->deferredLight.bindTarget();
}
// [/RLVa:KB]
LLGLSLShader* shader = &gDeferredPostNoDoFProgram;
bindDeferredShader(*shader);
@ -7611,16 +7577,10 @@ void LLPipeline::renderPostProcess()
unbindDeferredShader(*shader);
// [RLVa:KB] - @setsphere
if (pRenderBuffer)
if (multisample)
{
pRenderBuffer->flush();
mRT->deferredLight.flush();
}
// [/RLVa:KB]
//if (multisample)
//{
// mRT->deferredLight.flush();
//}
}
}
}
@ -7768,18 +7728,9 @@ void LLPipeline::renderFinalize()
LLVertexBuffer::unbind();
}
// [RLVa:KB] - @setsphere
LLRenderTarget* pRenderBuffer = (RlvActions::hasBehaviour(RLV_BHVR_SETSPHERE)) ? &mRT->deferredLight : nullptr;
// [/RLVa:KB]
{
llassert(!gCubeSnapshot);
bool multisample = RenderFSAASamples > 1 && mRT->fxaaBuffer.isComplete();
// [RLVa:KB] - @setsphere
if (multisample && !pRenderBuffer)
{
pRenderBuffer = &mRT->deferredLight;
}
// [/RLVa:KB]
LLGLSLShader* shader = &gGlowCombineProgram;
S32 width = mRT->screen.getWidth();
@ -7787,15 +7738,6 @@ void LLPipeline::renderFinalize()
S32 channel = -1;
// [RLVa:KB] - @setsphere
if (RlvActions::hasBehaviour(RLV_BHVR_SETSPHERE))
{
LLShaderEffectParams params(pRenderBuffer, &mRT->screen, !multisample);
LLVfxManager::instance().runEffect(EVisualEffect::RlvSphere, &params);
pRenderBuffer = params.m_pDstBuffer;
}
// [/RLVa:KB]
// Present everything.
if (multisample)
{
@ -7810,18 +7752,11 @@ void LLPipeline::renderFinalize()
shader->bind();
shader->uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES, width, height);
//channel = shader->enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, mRT->deferredLight.getUsage());
//if (channel > -1)
//{
// mRT->deferredLight.bindTexture(0, channel);
//}
// [RLVa:KB] - @setsphere
channel = shader->enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, pRenderBuffer->getUsage());
channel = shader->enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, mRT->deferredLight.getUsage());
if (channel > -1)
{
pRenderBuffer->bindTexture(0, channel);
mRT->deferredLight.bindTexture(0, channel);
}
// [RLVa:KB]
{
LLGLDepthTest depth_test(GL_FALSE, GL_FALSE, GL_ALWAYS);
@ -7831,10 +7766,7 @@ void LLPipeline::renderFinalize()
gGL.flush();
// [RLVa:KB] - @setsphere
shader->disableTexture(LLShaderMgr::DEFERRED_DIFFUSE, pRenderBuffer->getUsage());
// [/RLVa:KB]
//shader->disableTexture(LLShaderMgr::DEFERRED_DIFFUSE, mRT->deferredLight.getUsage());
shader->disableTexture(LLShaderMgr::DEFERRED_DIFFUSE, mRT->deferredLight.getUsage());
shader->unbind();
mRT->fxaaBuffer.flush();

View File

@ -656,9 +656,6 @@ 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;

View File

@ -402,29 +402,30 @@ void RlvSphereEffect::run(const LLVisualEffectParams* pParams)
LL_RECORD_BLOCK_TIME(FTM_RLV_EFFECT_SPHERE);
LLGLDepthTest depth(GL_FALSE, GL_FALSE);
gRlvSphereProgram.bind();
setShaderUniforms(&gRlvSphereProgram);
// KITTYFIXME
//gRlvSphereProgram.bind();
//setShaderUniforms(&gRlvSphereProgram);
const LLShaderEffectParams* pShaderParams = static_cast<const LLShaderEffectParams*>(pParams);
switch (m_eMode)
{
case ESphereMode::Blend:
case ESphereMode::ChromaticAberration:
case ESphereMode::Pixelate:
renderPass(&gRlvSphereProgram, pShaderParams);
break;
case ESphereMode::Blur:
case ESphereMode::BlurVariable:
gRlvSphereProgram.uniform2f(LLShaderMgr::RLV_EFFECT_PARAM5, 1.f, 0.f);
renderPass(&gRlvSphereProgram, pShaderParams);
gRlvSphereProgram.uniform2f(LLShaderMgr::RLV_EFFECT_PARAM5, 0.f, 1.f);
renderPass(&gRlvSphereProgram, pShaderParams);
break;
default:
llassert(true);
}
//const LLShaderEffectParams* pShaderParams = static_cast<const LLShaderEffectParams*>(pParams);
//switch (m_eMode)
//{
// case ESphereMode::Blend:
// case ESphereMode::ChromaticAberration:
// case ESphereMode::Pixelate:
// renderPass(&gRlvSphereProgram, pShaderParams);
// break;
// case ESphereMode::Blur:
// case ESphereMode::BlurVariable:
// gRlvSphereProgram.uniform2f(LLShaderMgr::RLV_EFFECT_PARAM5, 1.f, 0.f);
// renderPass(&gRlvSphereProgram, pShaderParams);
// gRlvSphereProgram.uniform2f(LLShaderMgr::RLV_EFFECT_PARAM5, 0.f, 1.f);
// renderPass(&gRlvSphereProgram, pShaderParams);
// break;
// default:
// llassert(true);
//}
gRlvSphereProgram.unbind();
//gRlvSphereProgram.unbind();
}
// ====================================================================================

View File

@ -2148,38 +2148,39 @@ ERlvCmdRet RlvBehaviourHandler<RLV_BHVR_SETSPHERE>::onCommand(const RlvCommand&
return RLV_RET_FAILED_LOCK;
ERlvCmdRet eRet = RlvBehaviourGenericHandler<RLV_OPTION_NONE_OR_MODIFIER>::onCommand(rlvCmd, fRefCount);
if ( (RLV_RET_SUCCESS == eRet) && (!rlvCmd.isModifier()) )
{
if (gRlvHandler.hasBehaviour(rlvCmd.getObjectID(), rlvCmd.getBehaviourType()))
{
LLVfxManager::instance().addEffect(new RlvSphereEffect(rlvCmd.getObjectID()));
// KITTYFIXME
//if ( (RLV_RET_SUCCESS == eRet) && (!rlvCmd.isModifier()) )
//{
// if (gRlvHandler.hasBehaviour(rlvCmd.getObjectID(), rlvCmd.getBehaviourType()))
// {
// LLVfxManager::instance().addEffect(new RlvSphereEffect(rlvCmd.getObjectID()));
Rlv::forceAtmosphericShadersIfAvailable();
// Rlv::forceAtmosphericShadersIfAvailable();
// If we're not using deferred but are using Windlight shaders we need to force use of FBO and depthmap texture
if ( (!LLPipeline::sRenderDeferred) && (LLPipeline::WindLightUseAtmosShaders) && (!LLPipeline::sUseDepthTexture) )
{
LLRenderTarget::sUseFBO = true;
LLPipeline::sUseDepthTexture = true;
// // If we're not using deferred but are using Windlight shaders we need to force use of FBO and depthmap texture
// if ( (!LLPipeline::sRenderDeferred) && (LLPipeline::WindLightUseAtmosShaders) && (!LLPipeline::sUseDepthTexture) )
// {
// LLRenderTarget::sUseFBO = true;
// LLPipeline::sUseDepthTexture = true;
gPipeline.releaseGLBuffers();
gPipeline.createGLBuffers();
gPipeline.resetVertexBuffers();
LLViewerShaderMgr::instance()->setShaders();
}
else if (!gPipeline.mRT->deferredLight.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.mRT->deferredLight.isComplete());
}
}
else
{
LLVfxManager::instance().removeEffect<RlvSphereEffect>(gRlvHandler.getCurrentObject());
}
}
// gPipeline.releaseGLBuffers();
// gPipeline.createGLBuffers();
// gPipeline.resetVertexBuffers();
// LLViewerShaderMgr::instance()->setShaders();
// }
// else if (!gPipeline.mRT->deferredLight.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.mRT->deferredLight.isComplete());
// }
// }
// else
// {
// LLVfxManager::instance().removeEffect<RlvSphereEffect>(gRlvHandler.getCurrentObject());
// }
//}
return eRet;
}