Merge
commit
badbce6f97
|
|
@ -419,7 +419,7 @@ VARYING vec2 vary_texcoord2;
|
|||
#endif
|
||||
|
||||
uniform float env_intensity;
|
||||
uniform vec4 specular_color;
|
||||
uniform vec4 specular_color; // specular color RGB and specular exponent (glossiness) in alpha
|
||||
|
||||
#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_MASK)
|
||||
uniform float minimum_alpha;
|
||||
|
|
@ -461,9 +461,10 @@ void main()
|
|||
#endif
|
||||
|
||||
#if HAS_SPECULAR_MAP
|
||||
vec4 spec = texture2D(specularMap, vary_texcoord2.xy)*specular_color;
|
||||
vec4 spec = texture2D(specularMap, vary_texcoord2.xy);
|
||||
spec.rgb *= specular_color.rgb;
|
||||
#else
|
||||
vec4 spec = specular_color;
|
||||
vec4 spec = vec4(specular_color.rgb, 1.0);
|
||||
#endif
|
||||
|
||||
#if HAS_NORMAL_MAP
|
||||
|
|
@ -492,7 +493,7 @@ void main()
|
|||
|
||||
vec4 final_specular = spec;
|
||||
#if HAS_SPECULAR_MAP
|
||||
vec4 final_normal = vec4(encode_normal(normalize(tnorm)), min(spec.a, env_intensity), 0.0);
|
||||
vec4 final_normal = vec4(encode_normal(normalize(tnorm)), env_intensity * spec.a, 0.0);
|
||||
final_specular.a = specular_color.a * norm.a;
|
||||
#else
|
||||
vec4 final_normal = vec4(encode_normal(normalize(tnorm)), env_intensity, 0.0);
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ S32 LLDrawPoolAvatar::sDiffuseChannel = 0;
|
|||
|
||||
|
||||
static bool is_deferred_render = false;
|
||||
static bool is_post_deferred_render = false;
|
||||
|
||||
extern BOOL gUseGLPick;
|
||||
|
||||
|
|
@ -377,7 +378,9 @@ void LLDrawPoolAvatar::renderPostDeferred(S32 pass)
|
|||
p -= 2;
|
||||
}
|
||||
|
||||
is_post_deferred_render = true;
|
||||
render(p);
|
||||
is_post_deferred_render = false;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1273,6 +1276,22 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
|
|||
else
|
||||
{
|
||||
renderRiggedSimple(avatarp);
|
||||
|
||||
if (LLPipeline::sRenderDeferred)
|
||||
{ //render "simple" materials
|
||||
renderRigged(avatarp, RIGGED_MATERIAL);
|
||||
renderRigged(avatarp, RIGGED_MATERIAL_ALPHA_MASK);
|
||||
renderRigged(avatarp, RIGGED_MATERIAL_ALPHA_EMISSIVE);
|
||||
renderRigged(avatarp, RIGGED_NORMMAP);
|
||||
renderRigged(avatarp, RIGGED_NORMMAP_MASK);
|
||||
renderRigged(avatarp, RIGGED_NORMMAP_EMISSIVE);
|
||||
renderRigged(avatarp, RIGGED_SPECMAP);
|
||||
renderRigged(avatarp, RIGGED_SPECMAP_MASK);
|
||||
renderRigged(avatarp, RIGGED_SPECMAP_EMISSIVE);
|
||||
renderRigged(avatarp, RIGGED_NORMSPEC);
|
||||
renderRigged(avatarp, RIGGED_NORMSPEC_MASK);
|
||||
renderRigged(avatarp, RIGGED_NORMSPEC_EMISSIVE);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -1311,6 +1330,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
|
|||
if (pass == 5)
|
||||
{
|
||||
renderRiggedShinySimple(avatarp);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1325,6 +1345,24 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
|
|||
if (pass == 7)
|
||||
{
|
||||
renderRiggedAlpha(avatarp);
|
||||
|
||||
if (LLPipeline::sRenderDeferred && !is_post_deferred_render)
|
||||
{ //render transparent materials under water
|
||||
LLGLEnable blend(GL_BLEND);
|
||||
|
||||
gGL.setColorMask(true, true);
|
||||
gGL.blendFunc(LLRender::BF_SOURCE_ALPHA,
|
||||
LLRender::BF_ONE_MINUS_SOURCE_ALPHA,
|
||||
LLRender::BF_ZERO,
|
||||
LLRender::BF_ONE_MINUS_SOURCE_ALPHA);
|
||||
|
||||
renderRigged(avatarp, RIGGED_MATERIAL_ALPHA);
|
||||
renderRigged(avatarp, RIGGED_SPECMAP_BLEND);
|
||||
renderRigged(avatarp, RIGGED_NORMMAP_BLEND);
|
||||
renderRigged(avatarp, RIGGED_NORMSPEC_BLEND);
|
||||
|
||||
gGL.setColorMask(true, false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1334,7 +1372,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
|
|||
return;
|
||||
}
|
||||
|
||||
if (LLPipeline::sRenderDeferred)
|
||||
if (LLPipeline::sRenderDeferred && is_post_deferred_render)
|
||||
{
|
||||
S32 p = 0;
|
||||
switch (pass)
|
||||
|
|
|
|||
|
|
@ -2581,7 +2581,6 @@ BOOL LLViewerShaderMgr::loadShadersObject()
|
|||
gSkinnedObjectSimpleWaterProgram.mFeatures.hasWaterFog = true;
|
||||
gSkinnedObjectSimpleWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
|
||||
gSkinnedObjectSimpleWaterProgram.mFeatures.hasObjectSkinning = true;
|
||||
gSkinnedObjectSimpleWaterProgram.mFeatures.hasAlphaMask = true;
|
||||
gSkinnedObjectSimpleWaterProgram.mFeatures.disableTextureIndex = true;
|
||||
gSkinnedObjectSimpleWaterProgram.mShaderFiles.clear();
|
||||
gSkinnedObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB));
|
||||
|
|
|
|||
Loading…
Reference in New Issue