SL-12007 Toggling 'Transparent water' checkbox has no effect
Opaque water is not compatible with ALMmaster
parent
deb1c21a7a
commit
812e6285c5
|
|
@ -604,8 +604,9 @@ static void settings_to_globals()
|
|||
static void settings_modify()
|
||||
{
|
||||
LLRenderTarget::sUseFBO = gSavedSettings.getBOOL("RenderDeferred");
|
||||
LLPipeline::sRenderTransparentWater = gSavedSettings.getBOOL("RenderTransparentWater");
|
||||
LLPipeline::sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");
|
||||
LLPipeline::sRenderDeferred = LLPipeline::sRenderBump && gSavedSettings.getBOOL("RenderDeferred");
|
||||
LLPipeline::sRenderDeferred = LLPipeline::sRenderTransparentWater && LLPipeline::sRenderBump && gSavedSettings.getBOOL("RenderDeferred");
|
||||
LLVOSurfacePatch::sLODFactor = gSavedSettings.getF32("RenderTerrainLODFactor");
|
||||
LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //square lod factor to get exponential range of [1,4]
|
||||
gDebugGL = gSavedSettings.getBOOL("RenderDebugGL") || gDebugSession;
|
||||
|
|
|
|||
|
|
@ -170,7 +170,7 @@ void LLDrawPoolWater::render(S32 pass)
|
|||
std::sort(mDrawFace.begin(), mDrawFace.end(), LLFace::CompareDistanceGreater());
|
||||
|
||||
// See if we are rendering water as opaque or not
|
||||
if (!gSavedSettings.getBOOL("RenderTransparentWater"))
|
||||
if (!LLPipeline::sRenderTransparentWater)
|
||||
{
|
||||
// render water for low end hardware
|
||||
renderOpaqueLegacyWater();
|
||||
|
|
|
|||
|
|
@ -1342,7 +1342,10 @@ void LLFloaterPreferenceGraphicsAdvanced::refreshEnabledState()
|
|||
BOOL reflections = gGLManager.mHasCubeMap && LLCubeMap::sUseCubeMaps;
|
||||
ctrl_reflections->setEnabled(reflections);
|
||||
reflections_text->setEnabled(reflections);
|
||||
|
||||
|
||||
// Transparent Water
|
||||
LLCheckBoxCtrl* transparent_water_ctrl = getChild<LLCheckBoxCtrl>("TransparentWater");
|
||||
|
||||
// Bump & Shiny
|
||||
LLCheckBoxCtrl* bumpshiny_ctrl = getChild<LLCheckBoxCtrl>("BumpShiny");
|
||||
bool bumpshiny = gGLManager.mHasCubeMap && LLCubeMap::sUseCubeMaps && LLFeatureManager::getInstance()->isFeatureAvailable("RenderObjectBump");
|
||||
|
|
@ -1393,6 +1396,7 @@ void LLFloaterPreferenceGraphicsAdvanced::refreshEnabledState()
|
|||
|
||||
BOOL enabled = LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
|
||||
((bumpshiny_ctrl && bumpshiny_ctrl->get()) ? TRUE : FALSE) &&
|
||||
((transparent_water_ctrl && transparent_water_ctrl->get()) ? TRUE : FALSE) &&
|
||||
gGLManager.mHasFramebufferObject &&
|
||||
gSavedSettings.getBOOL("RenderAvatarVP") &&
|
||||
(ctrl_wind_light->get()) ? TRUE : FALSE;
|
||||
|
|
|
|||
|
|
@ -187,6 +187,16 @@ static bool handleRenderPerfTestChanged(const LLSD& newvalue)
|
|||
|
||||
bool handleRenderTransparentWaterChanged(const LLSD& newvalue)
|
||||
{
|
||||
LLRenderTarget::sUseFBO = newvalue.asBoolean();
|
||||
if (gPipeline.isInit())
|
||||
{
|
||||
gPipeline.updateRenderTransparentWater();
|
||||
gPipeline.updateRenderDeferred();
|
||||
gPipeline.releaseGLBuffers();
|
||||
gPipeline.createGLBuffers();
|
||||
gPipeline.resetVertexBuffers();
|
||||
LLViewerShaderMgr::instance()->setShaders();
|
||||
}
|
||||
LLWorld::getInstance()->updateWaterObjects();
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ BOOL LLVOWater::updateGeometry(LLDrawable *drawable)
|
|||
static const unsigned int vertices_per_quad = 4;
|
||||
static const unsigned int indices_per_quad = 6;
|
||||
|
||||
const S32 size = gSavedSettings.getBOOL("RenderTransparentWater") && LLGLSLShader::sNoFixedFunction ? 16 : 1;
|
||||
const S32 size = LLPipeline::sRenderTransparentWater && LLGLSLShader::sNoFixedFunction ? 16 : 1;
|
||||
|
||||
const S32 num_quads = size * size;
|
||||
face->setSize(vertices_per_quad * num_quads,
|
||||
|
|
|
|||
|
|
@ -329,6 +329,7 @@ bool LLPipeline::sDelayVBUpdate = true;
|
|||
bool LLPipeline::sAutoMaskAlphaDeferred = true;
|
||||
bool LLPipeline::sAutoMaskAlphaNonDeferred = false;
|
||||
bool LLPipeline::sDisableShaders = false;
|
||||
bool LLPipeline::sRenderTransparentWater = true;
|
||||
bool LLPipeline::sRenderBump = true;
|
||||
bool LLPipeline::sBakeSunlight = false;
|
||||
bool LLPipeline::sNoAlpha = false;
|
||||
|
|
@ -1043,6 +1044,12 @@ bool LLPipeline::allocateShadowBuffer(U32 resX, U32 resY)
|
|||
return true;
|
||||
}
|
||||
|
||||
//static
|
||||
void LLPipeline::updateRenderTransparentWater()
|
||||
{
|
||||
sRenderTransparentWater = gSavedSettings.getBOOL("RenderTransparentWater");
|
||||
}
|
||||
|
||||
//static
|
||||
void LLPipeline::updateRenderBump()
|
||||
{
|
||||
|
|
@ -1055,6 +1062,7 @@ void LLPipeline::updateRenderDeferred()
|
|||
bool deferred = (bool(RenderDeferred &&
|
||||
LLRenderTarget::sUseFBO &&
|
||||
LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
|
||||
LLPipeline::sRenderTransparentWater &&
|
||||
LLPipeline::sRenderBump &&
|
||||
RenderAvatarVP &&
|
||||
WindLightUseAtmosShaders)) &&
|
||||
|
|
|
|||
|
|
@ -409,6 +409,7 @@ public:
|
|||
static bool getRenderHighlights();
|
||||
static void setRenderHighlightTextureChannel(LLRender::eTexIndex channel); // sets which UV setup to display in highlight overlay
|
||||
|
||||
static void updateRenderTransparentWater();
|
||||
static void updateRenderBump();
|
||||
static void updateRenderDeferred();
|
||||
static void refreshCachedSettings();
|
||||
|
|
@ -577,6 +578,7 @@ public:
|
|||
static bool sAutoMaskAlphaDeferred;
|
||||
static bool sAutoMaskAlphaNonDeferred;
|
||||
static bool sDisableShaders; // if true, rendering will be done without shaders
|
||||
static bool sRenderTransparentWater;
|
||||
static bool sRenderBump;
|
||||
static bool sBakeSunlight;
|
||||
static bool sNoAlpha;
|
||||
|
|
|
|||
|
|
@ -596,7 +596,10 @@
|
|||
left="420"
|
||||
name="TransparentWater"
|
||||
top_delta="16"
|
||||
width="300" />
|
||||
width="300">
|
||||
<check_box.commit_callback
|
||||
function="Pref.RenderOptionUpdate" />
|
||||
</check_box>
|
||||
|
||||
<check_box
|
||||
control_name="RenderObjectBump"
|
||||
|
|
|
|||
Loading…
Reference in New Issue