Fix for SL-20652 shadows on mac breaking alpha blended objects. (#1264)
* Fix for SL-20652 shadows on mac breaking alpha blended objects. fix secondlife/jira-archive-internal#71030 * clean up surrounding indentation * Skip unnecessary casting * Clean up LLGLSLShader::sIndexedTextureChannels usage and improve fix for SL-20652master
parent
1514edc58a
commit
9b6979f458
|
|
@ -328,7 +328,7 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)
|
|||
return FALSE;
|
||||
}
|
||||
}
|
||||
shader->mFeatures.mIndexedTextureChannels = llmax(LLGLSLShader::sIndexedTextureChannels-1, 1);
|
||||
shader->mFeatures.mIndexedTextureChannels = llmax(LLGLSLShader::sIndexedTextureChannels, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10712,38 +10712,49 @@
|
|||
<integer>3</integer>
|
||||
</map>
|
||||
<key>RenderReflectionRes</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Reflection map resolution.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>64</integer>
|
||||
</map>
|
||||
<key>RenderResolutionDivisor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Divisor for rendering 3D scene at reduced resolution.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>RenderShaderLightingMaxLevel</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Max lighting level to use in the shader (class 3 is default, 2 is less lights, 1 is sun/moon only. Works around shader compiler bugs on certain platforms.)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>3</integer>
|
||||
</map>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Reflection map resolution.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>64</integer>
|
||||
</map>
|
||||
<key>RenderReservedTextureIndices</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Count of texture indices to reserve for shadow and reflection maps when using indexed texture rendering. Probably only want to set from the login screen.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>14</integer>
|
||||
</map>
|
||||
<key>RenderResolutionDivisor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Divisor for rendering 3D scene at reduced resolution.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>RenderShaderLightingMaxLevel</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Max lighting level to use in the shader (class 3 is default, 2 is less lights, 1 is sun/moon only. Works around shader compiler bugs on certain platforms.)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>3</integer>
|
||||
</map>
|
||||
<key>RenderSkyAutoAdjustLegacy</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -478,7 +478,7 @@ bool LLDrawPoolAlpha::TexSetup(LLDrawInfo* draw, bool use_material)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return tex_setup;
|
||||
}
|
||||
|
||||
|
|
@ -668,7 +668,7 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, bool depth_only, bool rigged)
|
|||
|
||||
LLSpatialGroup::drawmap_elem_t& draw_info = rigged ? group->mDrawMap[LLRenderPass::PASS_ALPHA_RIGGED] : group->mDrawMap[LLRenderPass::PASS_ALPHA];
|
||||
|
||||
for (LLSpatialGroup::drawmap_elem_t::iterator k = draw_info.begin(); k != draw_info.end(); ++k)
|
||||
for (LLSpatialGroup::drawmap_elem_t::iterator k = draw_info.begin(); k != draw_info.end(); ++k)
|
||||
{
|
||||
LLDrawInfo& params = **k;
|
||||
if ((bool)params.mAvatar != rigged)
|
||||
|
|
@ -814,9 +814,10 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, bool depth_only, bool rigged)
|
|||
current_shader->setMinimumAlpha(0.f);
|
||||
reset_minimum_alpha = true;
|
||||
}
|
||||
|
||||
|
||||
params.mVertexBuffer->setBuffer();
|
||||
params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
|
||||
stop_glerror();
|
||||
|
||||
if (reset_minimum_alpha)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1855,7 +1855,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
|
|||
S32* vp = (S32*) &val;
|
||||
*vp = index;
|
||||
|
||||
llassert(index <= LLGLSLShader::sIndexedTextureChannels-1);
|
||||
llassert(index < LLGLSLShader::sIndexedTextureChannels);
|
||||
|
||||
LLVector4Logical mask;
|
||||
mask.clear();
|
||||
|
|
|
|||
|
|
@ -423,7 +423,10 @@ void LLViewerShaderMgr::setShaders()
|
|||
static LLCachedControl<U32> max_texture_index(gSavedSettings, "RenderMaxTextureIndex", 16);
|
||||
|
||||
// when using indexed texture rendering, leave some texture units available for shadow and reflection maps
|
||||
LLGLSLShader::sIndexedTextureChannels = llmax(llmin(gGLManager.mNumTextureImageUnits-12, (S32) max_texture_index), 1);
|
||||
static LLCachedControl<S32> reserved_texture_units(gSavedSettings, "RenderReservedTextureIndices", 14);
|
||||
|
||||
LLGLSLShader::sIndexedTextureChannels =
|
||||
llclamp<S32>(max_texture_index, 1, gGLManager.mNumTextureImageUnits-reserved_texture_units);
|
||||
|
||||
reentrance = true;
|
||||
|
||||
|
|
|
|||
|
|
@ -6248,19 +6248,7 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace
|
|||
|
||||
LLViewerTexture* last_tex = NULL;
|
||||
|
||||
S32 texture_index_channels = 1;
|
||||
|
||||
if (gGLManager.mGLSLVersionMajor > 1 || gGLManager.mGLSLVersionMinor >= 30)
|
||||
{
|
||||
texture_index_channels = LLGLSLShader::sIndexedTextureChannels-1; //always reserve one for shiny for now just for simplicity;
|
||||
}
|
||||
|
||||
if (distance_sort)
|
||||
{
|
||||
texture_index_channels = gDeferredAlphaProgram.mFeatures.mIndexedTextureChannels;
|
||||
}
|
||||
|
||||
texture_index_channels = LLGLSLShader::sIndexedTextureChannels;
|
||||
S32 texture_index_channels = LLGLSLShader::sIndexedTextureChannels;
|
||||
|
||||
bool flexi = false;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue