Merge viewer-eep
commit
52019b64e8
|
|
@ -1010,6 +1010,12 @@ void LLGLManager::initExtensions()
|
|||
mHassRGBFramebuffer = ExtensionExists("GL_EXT_framebuffer_sRGB", gGLHExts.mSysExts);
|
||||
#endif
|
||||
|
||||
#ifdef GL_EXT_texture_sRGB_decode
|
||||
mHasTexturesRGBDecode = ExtensionExists("GL_EXT_texture_sRGB_decode", gGLHExts.mSysExts);
|
||||
#else
|
||||
mHasTexturesRGBDecode = ExtensionExists("GL_ARB_texture_sRGB_decode", gGLHExts.mSysExts);
|
||||
#endif
|
||||
|
||||
mHasMipMapGeneration = mHasFramebufferObject || mGLVersion >= 1.4f;
|
||||
|
||||
mHasDrawBuffers = ExtensionExists("GL_ARB_draw_buffers", gGLHExts.mSysExts);
|
||||
|
|
|
|||
|
|
@ -128,6 +128,7 @@ public:
|
|||
BOOL mHasDebugOutput;
|
||||
BOOL mHassRGBTexture;
|
||||
BOOL mHassRGBFramebuffer;
|
||||
BOOL mHasTexturesRGBDecode;
|
||||
|
||||
// Vendor-specific extensions
|
||||
BOOL mIsATI;
|
||||
|
|
|
|||
|
|
@ -982,7 +982,7 @@ S32 LLGLSLShader::unbindTexture(S32 uniform, LLTexUnit::eTextureType mode)
|
|||
return uniform;
|
||||
}
|
||||
|
||||
S32 LLGLSLShader::enableTexture(S32 uniform, LLTexUnit::eTextureType mode)
|
||||
S32 LLGLSLShader::enableTexture(S32 uniform, LLTexUnit::eTextureType mode, LLTexUnit::eTextureColorSpace space)
|
||||
{
|
||||
if (uniform < 0 || uniform >= (S32)mTexture.size())
|
||||
{
|
||||
|
|
@ -994,11 +994,12 @@ S32 LLGLSLShader::enableTexture(S32 uniform, LLTexUnit::eTextureType mode)
|
|||
{
|
||||
gGL.getTexUnit(index)->activate();
|
||||
gGL.getTexUnit(index)->enable(mode);
|
||||
gGL.getTexUnit(index)->setTextureColorSpace(space);
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
S32 LLGLSLShader::disableTexture(S32 uniform, LLTexUnit::eTextureType mode)
|
||||
S32 LLGLSLShader::disableTexture(S32 uniform, LLTexUnit::eTextureType mode, LLTexUnit::eTextureColorSpace space)
|
||||
{
|
||||
if (uniform < 0 || uniform >= (S32)mTexture.size())
|
||||
{
|
||||
|
|
@ -1008,7 +1009,7 @@ S32 LLGLSLShader::disableTexture(S32 uniform, LLTexUnit::eTextureType mode)
|
|||
S32 index = mTexture[uniform];
|
||||
if (index != -1 && gGL.getTexUnit(index)->getCurrType() != LLTexUnit::TT_NONE)
|
||||
{
|
||||
if (gDebugGL && gGL.getTexUnit(index)->getCurrType() != mode)
|
||||
if (gDebugGL && gGL.getTexUnit(index)->getCurrType() != mode && gGL.getTexUnit(index)->getCurrColorSpace() != space)
|
||||
{
|
||||
if (gDebugSession)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -153,8 +153,8 @@ public:
|
|||
//if given texture uniform is active in the shader,
|
||||
//the corresponding channel will be active upon return
|
||||
//returns channel texture is enabled in from [0-MAX)
|
||||
S32 enableTexture(S32 uniform, LLTexUnit::eTextureType mode = LLTexUnit::TT_TEXTURE);
|
||||
S32 disableTexture(S32 uniform, LLTexUnit::eTextureType mode = LLTexUnit::TT_TEXTURE);
|
||||
S32 enableTexture(S32 uniform, LLTexUnit::eTextureType mode = LLTexUnit::TT_TEXTURE, LLTexUnit::eTextureColorSpace space = LLTexUnit::TCS_LINEAR);
|
||||
S32 disableTexture(S32 uniform, LLTexUnit::eTextureType mode = LLTexUnit::TT_TEXTURE, LLTexUnit::eTextureColorSpace space = LLTexUnit::TCS_LINEAR);
|
||||
|
||||
// bindTexture returns the texture unit we've bound the texture to.
|
||||
// You can reuse the return value to unbind a texture when required.
|
||||
|
|
|
|||
|
|
@ -1378,33 +1378,45 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S
|
|||
|
||||
if( !mHasExplicitFormat )
|
||||
{
|
||||
switch (mComponents)
|
||||
{
|
||||
case 1:
|
||||
// Use luminance alpha (for fonts)
|
||||
mFormatInternal = GL_LUMINANCE8;
|
||||
mFormatPrimary = GL_LUMINANCE;
|
||||
mFormatType = GL_UNSIGNED_BYTE;
|
||||
break;
|
||||
case 2:
|
||||
// Use luminance alpha (for fonts)
|
||||
mFormatInternal = GL_LUMINANCE8_ALPHA8;
|
||||
mFormatPrimary = GL_LUMINANCE_ALPHA;
|
||||
mFormatType = GL_UNSIGNED_BYTE;
|
||||
break;
|
||||
case 3:
|
||||
mFormatInternal = GL_RGB8;
|
||||
mFormatPrimary = GL_RGB;
|
||||
mFormatType = GL_UNSIGNED_BYTE;
|
||||
break;
|
||||
case 4:
|
||||
mFormatInternal = GL_RGBA8;
|
||||
mFormatPrimary = GL_RGBA;
|
||||
mFormatType = GL_UNSIGNED_BYTE;
|
||||
break;
|
||||
default:
|
||||
LL_ERRS() << "Bad number of components for texture: " << (U32)getComponents() << LL_ENDL;
|
||||
}
|
||||
switch (mComponents)
|
||||
{
|
||||
case 1:
|
||||
// Use luminance alpha (for fonts)
|
||||
mFormatInternal = GL_LUMINANCE8;
|
||||
mFormatPrimary = GL_LUMINANCE;
|
||||
mFormatType = GL_UNSIGNED_BYTE;
|
||||
break;
|
||||
case 2:
|
||||
// Use luminance alpha (for fonts)
|
||||
mFormatInternal = GL_LUMINANCE8_ALPHA8;
|
||||
mFormatPrimary = GL_LUMINANCE_ALPHA;
|
||||
mFormatType = GL_UNSIGNED_BYTE;
|
||||
break;
|
||||
case 3:
|
||||
if (gGLManager.mHasTexturesRGBDecode)
|
||||
{
|
||||
mFormatInternal = GL_SRGB8;
|
||||
}
|
||||
else {
|
||||
mFormatInternal = GL_RGB8;
|
||||
}
|
||||
mFormatPrimary = GL_RGB;
|
||||
mFormatType = GL_UNSIGNED_BYTE;
|
||||
break;
|
||||
case 4:
|
||||
if (gGLManager.mHasTexturesRGBDecode)
|
||||
{
|
||||
mFormatInternal = GL_SRGB8_ALPHA8;
|
||||
}
|
||||
else {
|
||||
mFormatInternal = GL_RGBA8;
|
||||
}
|
||||
mFormatPrimary = GL_RGBA;
|
||||
mFormatType = GL_UNSIGNED_BYTE;
|
||||
break;
|
||||
default:
|
||||
LL_ERRS() << "Bad number of components for texture: " << (U32)getComponents() << LL_ENDL;
|
||||
}
|
||||
|
||||
calcAlphaChannelOffsetAndStride() ;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ LLTexUnit::LLTexUnit(S32 index)
|
|||
mCurrColorOp(TBO_MULT), mCurrAlphaOp(TBO_MULT),
|
||||
mCurrColorSrc1(TBS_TEX_COLOR), mCurrColorSrc2(TBS_PREV_COLOR),
|
||||
mCurrAlphaSrc1(TBS_TEX_ALPHA), mCurrAlphaSrc2(TBS_PREV_ALPHA),
|
||||
mCurrColorScale(1), mCurrAlphaScale(1), mCurrTexture(0),
|
||||
mCurrColorScale(1), mCurrAlphaScale(1), mCurrTexture(0), mTexColorSpace(TCS_LINEAR),
|
||||
mHasMipMaps(false),
|
||||
mIndex(index)
|
||||
{
|
||||
|
|
@ -165,6 +165,8 @@ void LLTexUnit::refreshState(void)
|
|||
setTextureCombiner(mCurrColorOp, mCurrColorSrc1, mCurrColorSrc2, false);
|
||||
setTextureCombiner(mCurrAlphaOp, mCurrAlphaSrc1, mCurrAlphaSrc2, true);
|
||||
}
|
||||
|
||||
setTextureColorSpace(mTexColorSpace);
|
||||
}
|
||||
|
||||
void LLTexUnit::activate(void)
|
||||
|
|
@ -194,7 +196,6 @@ void LLTexUnit::enable(eTextureType type)
|
|||
stop_glerror();
|
||||
}
|
||||
mCurrTexType = type;
|
||||
|
||||
gGL.flush();
|
||||
if (!LLGLSLShader::sNoFixedFunction &&
|
||||
type != LLTexUnit::TT_MULTISAMPLE_TEXTURE &&
|
||||
|
|
@ -222,6 +223,8 @@ void LLTexUnit::disable(void)
|
|||
{
|
||||
glDisable(sGLTextureType[mCurrTexType]);
|
||||
}
|
||||
|
||||
setTextureColorSpace(TCS_LINEAR);
|
||||
|
||||
mCurrTexType = TT_NONE;
|
||||
}
|
||||
|
|
@ -258,7 +261,8 @@ bool LLTexUnit::bind(LLTexture* texture, bool for_rendering, bool forceBind)
|
|||
gl_tex->mTexOptionsDirty = false;
|
||||
setTextureAddressMode(gl_tex->mAddressMode);
|
||||
setTextureFilteringOption(gl_tex->mFilterOption);
|
||||
}
|
||||
}
|
||||
setTextureColorSpace(mTexColorSpace);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -333,6 +337,7 @@ bool LLTexUnit::bind(LLImageGL* texture, bool for_rendering, bool forceBind)
|
|||
setTextureFilteringOption(texture->mFilterOption);
|
||||
stop_glerror();
|
||||
}
|
||||
setTextureColorSpace(mTexColorSpace);
|
||||
}
|
||||
|
||||
stop_glerror();
|
||||
|
|
@ -358,7 +363,7 @@ bool LLTexUnit::bind(LLCubeMap* cubeMap)
|
|||
{
|
||||
activate();
|
||||
enable(LLTexUnit::TT_CUBE_MAP);
|
||||
mCurrTexture = cubeMap->mImages[0]->getTexName();
|
||||
mCurrTexture = cubeMap->mImages[0]->getTexName();
|
||||
glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, mCurrTexture);
|
||||
mHasMipMaps = cubeMap->mImages[0]->mHasMipMaps;
|
||||
cubeMap->mImages[0]->updateBindStats(cubeMap->mImages[0]->mTextureMemory);
|
||||
|
|
@ -367,7 +372,8 @@ bool LLTexUnit::bind(LLCubeMap* cubeMap)
|
|||
cubeMap->mImages[0]->mTexOptionsDirty = false;
|
||||
setTextureAddressMode(cubeMap->mImages[0]->mAddressMode);
|
||||
setTextureFilteringOption(cubeMap->mImages[0]->mFilterOption);
|
||||
}
|
||||
}
|
||||
setTextureColorSpace(mTexColorSpace);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
|
|
@ -418,7 +424,8 @@ bool LLTexUnit::bindManual(eTextureType type, U32 texture, bool hasMips)
|
|||
enable(type);
|
||||
mCurrTexture = texture;
|
||||
glBindTexture(sGLTextureType[type], texture);
|
||||
mHasMipMaps = hasMips;
|
||||
mHasMipMaps = hasMips;
|
||||
setTextureColorSpace(mTexColorSpace);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
@ -438,6 +445,9 @@ void LLTexUnit::unbind(eTextureType type)
|
|||
if (mCurrTexType == type)
|
||||
{
|
||||
mCurrTexture = 0;
|
||||
|
||||
// Always make sure our texture color space is reset to linear. SRGB sampling should be opt-in in the vast majority of cases. Also prevents color space "popping".
|
||||
mTexColorSpace = TCS_LINEAR;
|
||||
if (LLGLSLShader::sNoFixedFunction && type == LLTexUnit::TT_TEXTURE)
|
||||
{
|
||||
glBindTexture(sGLTextureType[type], sWhiteTexture);
|
||||
|
|
@ -841,6 +851,23 @@ void LLTexUnit::debugTextureUnit(void)
|
|||
}
|
||||
}
|
||||
|
||||
void LLTexUnit::setTextureColorSpace(eTextureColorSpace space) {
|
||||
mTexColorSpace = space;
|
||||
if (gGLManager.mHasTexturesRGBDecode) {
|
||||
|
||||
if (space == TCS_SRGB) {
|
||||
glTexParameteri(sGLTextureType[mCurrTexType], GL_TEXTURE_SRGB_DECODE_EXT, GL_DECODE_EXT);
|
||||
}
|
||||
else {
|
||||
glTexParameteri(sGLTextureType[mCurrTexType], GL_TEXTURE_SRGB_DECODE_EXT, GL_SKIP_DECODE_EXT);
|
||||
}
|
||||
|
||||
if (gDebugGL) {
|
||||
assert_glerror();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LLLightState::LLLightState(S32 index)
|
||||
: mIndex(index),
|
||||
mEnabled(false),
|
||||
|
|
|
|||
|
|
@ -141,6 +141,12 @@ public:
|
|||
TBS_ONE_MINUS_CONST_ALPHA
|
||||
} eTextureBlendSrc;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
TCS_LINEAR = 0,
|
||||
TCS_SRGB
|
||||
} eTextureColorSpace;
|
||||
|
||||
LLTexUnit(S32 index);
|
||||
|
||||
// Refreshes renderer state of the texture unit to the cached values
|
||||
|
|
@ -163,7 +169,7 @@ public:
|
|||
// Binds the LLImageGL to this texture unit
|
||||
// (automatically enables the unit for the LLImageGL's texture type)
|
||||
bool bind(LLImageGL* texture, bool for_rendering = false, bool forceBind = false);
|
||||
bool bind(LLTexture* texture, bool for_rendering = false, bool forceBind = false);
|
||||
bool bind(LLTexture* texture, bool for_rendering = false, bool forceBind = false);
|
||||
|
||||
// Binds a cubemap to this texture unit
|
||||
// (automatically enables the texture unit for cubemaps)
|
||||
|
|
@ -208,6 +214,10 @@ public:
|
|||
|
||||
void setHasMipMaps(bool hasMips) { mHasMipMaps = hasMips; }
|
||||
|
||||
void setTextureColorSpace(eTextureColorSpace space);
|
||||
|
||||
eTextureColorSpace getCurrColorSpace() { return mTexColorSpace; }
|
||||
|
||||
protected:
|
||||
const S32 mIndex;
|
||||
U32 mCurrTexture;
|
||||
|
|
@ -219,6 +229,7 @@ protected:
|
|||
eTextureBlendOp mCurrAlphaOp;
|
||||
eTextureBlendSrc mCurrAlphaSrc1;
|
||||
eTextureBlendSrc mCurrAlphaSrc2;
|
||||
eTextureColorSpace mTexColorSpace;
|
||||
S32 mCurrColorScale;
|
||||
S32 mCurrAlphaScale;
|
||||
bool mHasMipMaps;
|
||||
|
|
|
|||
|
|
@ -78,7 +78,6 @@ vec3 linear_to_srgb(vec3 cl);
|
|||
vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
|
||||
{
|
||||
vec4 ret = texture2DLod(projectionMap, tc, lod);
|
||||
ret.rgb = srgb_to_linear(ret.rgb);
|
||||
|
||||
vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
|
||||
|
||||
|
|
@ -98,7 +97,6 @@ vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
|
|||
vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
|
||||
{
|
||||
vec4 ret = texture2DLod(projectionMap, tc, lod);
|
||||
ret.rgb = srgb_to_linear(ret.rgb);
|
||||
|
||||
vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
|
||||
|
||||
|
|
@ -116,7 +114,6 @@ vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
|
|||
vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)
|
||||
{
|
||||
vec4 ret = texture2DLod(projectionMap, tc, lod);
|
||||
ret.rgb = srgb_to_linear(ret.rgb);
|
||||
|
||||
vec2 dist = tc-vec2(0.5);
|
||||
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ void main()
|
|||
col += spec_contrib;
|
||||
}
|
||||
|
||||
col = mix(col.rgb, diffuse.rgb, diffuse.a);
|
||||
col.rgb += diffuse.a * diffuse.rgb;
|
||||
|
||||
if (envIntensity > 0.0)
|
||||
{ //add environmentmap
|
||||
|
|
@ -145,8 +145,10 @@ void main()
|
|||
|
||||
if (norm.w < 0.5)
|
||||
{
|
||||
col = mix(atmosFragLighting(col, additive, atten), fullbrightAtmosTransportFrag(col, additive, atten), diffuse.a);
|
||||
col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);
|
||||
//col = mix(atmosFragLighting(col, additive, atten), fullbrightAtmosTransportFrag(col, additive, atten), diffuse.a);
|
||||
//col = mix(scaleSoftClipFrag(col), fullbrightScaleSoftClipFrag(col, additive, atten), diffuse.a);
|
||||
col = atmosFragLighting(col, additive, atten);
|
||||
col = scaleSoftClipFrag(col);
|
||||
}
|
||||
|
||||
#ifdef WATER_FOG
|
||||
|
|
|
|||
|
|
@ -142,32 +142,23 @@ void main()
|
|||
vec4 baseCol = texture2D(refTex, refvec4);
|
||||
|
||||
refcol = mix(baseCol*df2, refcol, dweight);
|
||||
|
||||
//get specular component
|
||||
float spec = clamp(dot(lightDir, (reflect(viewVec,wavef))),0.0,1.0);
|
||||
|
||||
//harden specular
|
||||
spec = pow(spec, 128.0);
|
||||
|
||||
|
||||
//figure out distortion vector (ripply)
|
||||
vec2 distort2 = distort+wavef.xy*refScale * 0.33/max(dmod*df1, 1.0);
|
||||
|
||||
vec4 fb = texture2D(screenTex, distort2);
|
||||
|
||||
//mix with reflection
|
||||
// Note we actually want to use just df1, but multiplying by 0.999999 gets around an nvidia compiler bug
|
||||
color.rgb = mix(fb.rgb, refcol.rgb, df1 * 0.99999);
|
||||
|
||||
vec4 pos = vary_position;
|
||||
|
||||
color.rgb += spec * specular;
|
||||
|
||||
color.rgb = atmosTransport(color.rgb);
|
||||
color.rgb = scaleSoftClipFrag(color.rgb);
|
||||
//color.rgb = atmosTransport(color.rgb);
|
||||
//color.rgb = scaleSoftClipFrag(color.rgb) * 0;
|
||||
|
||||
vec3 screenspacewavef = normalize((norm_mat*vec4(wavef, 1.0)).xyz);
|
||||
|
||||
frag_data[0] = vec4(color.rgb, 1); // diffuse
|
||||
frag_data[1] = vec4(0); // speccolor, spec
|
||||
frag_data[2] = vec4(encode_normal(screenspacewavef.xyz*0.5+0.5), 0.05, 0);// normalxy, 0, 0
|
||||
frag_data[1] = vec4(specular * 0.4, 0.75); // speccolor, spec
|
||||
frag_data[2] = vec4(encode_normal(screenspacewavef.xyz), 0.05, 0);// normalxy, 0, 0
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,7 +83,6 @@ vec4 correctWithGamma(vec4 col)
|
|||
vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
|
||||
{
|
||||
vec4 ret = texture2DLod(projectionMap, tc, lod);
|
||||
ret = correctWithGamma(ret);
|
||||
|
||||
vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
|
||||
|
||||
|
|
@ -103,7 +102,6 @@ vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
|
|||
vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
|
||||
{
|
||||
vec4 ret = texture2DLod(projectionMap, tc, lod);
|
||||
ret = correctWithGamma(ret);
|
||||
|
||||
vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
|
||||
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ void main()
|
|||
col += spec_contrib;
|
||||
}
|
||||
|
||||
col = mix(col.rgb, diffuse.rgb, diffuse.a);
|
||||
col.rgb += diffuse.a * diffuse.rgb;
|
||||
|
||||
if (envIntensity > 0.0)
|
||||
{ //add environmentmap
|
||||
|
|
@ -154,13 +154,13 @@ void main()
|
|||
vec3 refcol = textureCube(environmentMap, env_vec).rgb;
|
||||
col = mix(col.rgb, refcol, envIntensity);
|
||||
}
|
||||
|
||||
|
||||
vec3 a = col.rgb;
|
||||
|
||||
if (norm.w < 0.5)
|
||||
{
|
||||
col = mix(atmosFragLighting(col, additive, atten), fullbrightAtmosTransportFrag(col, additive, atten), diffuse.a);
|
||||
col = mix(scaleSoftClipFrag(col), fullbrightScaleSoftClipFrag(col, additive, atten), diffuse.a);
|
||||
//col = mix(atmosFragLighting(col, additive, atten), fullbrightAtmosTransportFrag(col, additive, atten), diffuse.a);
|
||||
//col = mix(scaleSoftClipFrag(col), fullbrightScaleSoftClipFrag(col, additive, atten), diffuse.a);
|
||||
col = atmosFragLighting(col, additive, atten);
|
||||
col = scaleSoftClipFrag(col);
|
||||
}
|
||||
|
||||
#ifdef WATER_FOG
|
||||
|
|
|
|||
|
|
@ -82,7 +82,6 @@ vec4 correctWithGamma(vec4 col)
|
|||
vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
|
||||
{
|
||||
vec4 ret = texture2DLod(projectionMap, tc, lod);
|
||||
ret = correctWithGamma(ret);
|
||||
|
||||
vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
|
||||
|
||||
|
|
@ -102,7 +101,6 @@ vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
|
|||
vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
|
||||
{
|
||||
vec4 ret = texture2DLod(projectionMap, tc, lod);
|
||||
ret = correctWithGamma(ret);
|
||||
|
||||
vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
|
||||
|
||||
|
|
@ -120,7 +118,6 @@ vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
|
|||
vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)
|
||||
{
|
||||
vec4 ret = texture2DLod(projectionMap, tc, lod);
|
||||
ret = correctWithGamma(ret);
|
||||
|
||||
vec2 dist = tc-vec2(0.5);
|
||||
|
||||
|
|
|
|||
|
|
@ -8337,6 +8337,7 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, LLRenderTarget* light_
|
|||
{
|
||||
deferred_target->bindTexture(0,channel);
|
||||
gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT);
|
||||
gGL.getTexUnit(channel)->setTextureColorSpace(LLTexUnit::TCS_SRGB);
|
||||
}
|
||||
|
||||
channel = shader.enableTexture(LLShaderMgr::DEFERRED_SPECULAR, deferred_target->getUsage());
|
||||
|
|
@ -8344,6 +8345,7 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, LLRenderTarget* light_
|
|||
{
|
||||
deferred_target->bindTexture(1, channel);
|
||||
gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT);
|
||||
gGL.getTexUnit(channel)->setTextureColorSpace(LLTexUnit::TCS_SRGB);
|
||||
}
|
||||
|
||||
channel = shader.enableTexture(LLShaderMgr::DEFERRED_NORMAL, deferred_target->getUsage());
|
||||
|
|
@ -8351,6 +8353,7 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, LLRenderTarget* light_
|
|||
{
|
||||
deferred_target->bindTexture(2, channel);
|
||||
gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT);
|
||||
gGL.getTexUnit(channel)->setTextureColorSpace(LLTexUnit::TCS_LINEAR);
|
||||
}
|
||||
|
||||
channel = shader.enableTexture(LLShaderMgr::DEFERRED_DEPTH, deferred_depth_target->getUsage());
|
||||
|
|
@ -8473,7 +8476,7 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, LLRenderTarget* light_
|
|||
|
||||
stop_glerror();
|
||||
|
||||
channel = shader.enableTexture(LLShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP);
|
||||
channel = shader.enableTexture(LLShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP, LLTexUnit::TCS_SRGB);
|
||||
if (channel > -1)
|
||||
{
|
||||
LLCubeMap* cube_map = gSky.mVOSkyp ? gSky.mVOSkyp->getCubeMap() : NULL;
|
||||
|
|
@ -8971,7 +8974,7 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget* screen_target)
|
|||
|
||||
mCubeVB->setBuffer(LLVertexBuffer::MAP_VERTEX);
|
||||
|
||||
gDeferredSpotLightProgram.enableTexture(LLShaderMgr::DEFERRED_PROJECTION);
|
||||
gDeferredSpotLightProgram.enableTexture(LLShaderMgr::DEFERRED_PROJECTION, LLTexUnit::TT_TEXTURE, LLTexUnit::TCS_SRGB);
|
||||
|
||||
for (LLDrawable::drawable_list_t::iterator iter = spot_lights.begin(); iter != spot_lights.end(); ++iter)
|
||||
{
|
||||
|
|
@ -8999,7 +9002,7 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget* screen_target)
|
|||
|
||||
mCubeVB->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, get_box_fan_indices(camera, center));
|
||||
}
|
||||
gDeferredSpotLightProgram.disableTexture(LLShaderMgr::DEFERRED_PROJECTION);
|
||||
gDeferredSpotLightProgram.disableTexture(LLShaderMgr::DEFERRED_PROJECTION, LLTexUnit::TT_TEXTURE, LLTexUnit::TCS_SRGB);
|
||||
unbindDeferredShader(gDeferredSpotLightProgram);
|
||||
}
|
||||
|
||||
|
|
@ -9055,7 +9058,7 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget* screen_target)
|
|||
|
||||
bindDeferredShader(gDeferredMultiSpotLightProgram);
|
||||
|
||||
gDeferredMultiSpotLightProgram.enableTexture(LLShaderMgr::DEFERRED_PROJECTION);
|
||||
gDeferredMultiSpotLightProgram.enableTexture(LLShaderMgr::DEFERRED_PROJECTION, LLTexUnit::TT_TEXTURE, LLTexUnit::TCS_SRGB);
|
||||
|
||||
mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX);
|
||||
|
||||
|
|
@ -9086,7 +9089,7 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget* screen_target)
|
|||
mDeferredVB->drawArrays(LLRender::TRIANGLES, 0, 3);
|
||||
}
|
||||
|
||||
gDeferredMultiSpotLightProgram.disableTexture(LLShaderMgr::DEFERRED_PROJECTION);
|
||||
gDeferredMultiSpotLightProgram.disableTexture(LLShaderMgr::DEFERRED_PROJECTION, LLTexUnit::TT_TEXTURE, LLTexUnit::TCS_SRGB);
|
||||
unbindDeferredShader(gDeferredMultiSpotLightProgram);
|
||||
|
||||
gGL.popMatrix();
|
||||
|
|
@ -9335,7 +9338,7 @@ void LLPipeline::setupSpotLight(LLGLSLShader& shader, LLDrawable* drawablep)
|
|||
img = LLViewerFetchedTexture::sWhiteImagep;
|
||||
}
|
||||
|
||||
S32 channel = shader.enableTexture(LLShaderMgr::DEFERRED_PROJECTION);
|
||||
S32 channel = shader.enableTexture(LLShaderMgr::DEFERRED_PROJECTION, LLTexUnit::TT_TEXTURE, LLTexUnit::TCS_SRGB);
|
||||
|
||||
if (channel > -1)
|
||||
{
|
||||
|
|
@ -9387,7 +9390,7 @@ void LLPipeline::unbindDeferredShader(LLGLSLShader &shader)
|
|||
shader.disableTexture(LLShaderMgr::DEFERRED_NOISE);
|
||||
shader.disableTexture(LLShaderMgr::DEFERRED_LIGHTFUNC);
|
||||
|
||||
S32 channel = shader.disableTexture(LLShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP);
|
||||
S32 channel = shader.disableTexture(LLShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP, LLTexUnit::TCS_SRGB);
|
||||
if (channel > -1)
|
||||
{
|
||||
LLCubeMap* cube_map = gSky.mVOSkyp ? gSky.mVOSkyp->getCubeMap() : NULL;
|
||||
|
|
|
|||
Loading…
Reference in New Issue