summaryrefslogtreecommitdiff
path: root/indra/newview/lldrawpoolalpha.cpp
diff options
context:
space:
mode:
authorGeenz <geenz@geenzo.com>2013-04-11 14:57:11 -0400
committerGeenz <geenz@geenzo.com>2013-04-11 14:57:11 -0400
commitcfc375777871ec3d04b9969793379d0cd78a012e (patch)
tree851d39612b82e18f82fe47961e4e9fbf70713ff4 /indra/newview/lldrawpoolalpha.cpp
parent84475635b9c3db8d42f2f0a256d34c08274f53ed (diff)
First pass on alpha blended materials
Diffstat (limited to 'indra/newview/lldrawpoolalpha.cpp')
-rw-r--r--indra/newview/lldrawpoolalpha.cpp60
1 files changed, 45 insertions, 15 deletions
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index a8abe9a267..291bdfebe6 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -436,7 +436,6 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
}
LLRenderPass::applyModelMatrix(params);
-
if (params.mFullbright)
{
@@ -447,20 +446,6 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
if (use_shaders)
{
target_shader = fullbright_shader;
- if (target_shader)
- {
- if (LLPipeline::sRenderDeferred)
- {
- if (params.mFace->getViewerObject()->isHUDAttachment())
- {
- target_shader->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 1.0);
- } else {
- target_shader->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2);
- }
- } else {
- target_shader->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 1.0);
- }
- }
}
else
{
@@ -497,6 +482,51 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
LLGLSLShader::bindNoShader();
current_shader = NULL;
}
+
+ if (params.mMaterialID != LLMaterialID::null && current_shader == simple_shader)
+ {
+ // I apologize in advance for not giving this its own shader.
+ // We have a material. Supply the appropriate data here.
+ if (LLPipeline::sRenderDeferred)
+ {
+ current_shader->uniform4f(LLShaderMgr::SPECULAR_COLOR, params.mSpecColor.mV[0], params.mSpecColor.mV[1], params.mSpecColor.mV[2], params.mSpecColor.mV[3]);
+
+ current_shader->uniform1f(LLShaderMgr::ENVIRONMENT_INTENSITY, params.mEnvIntensity);
+
+ if (params.mNormalMap)
+ {
+ params.mNormalMap->addTextureStats(params.mVSize);
+ current_shader->bindTexture(LLShaderMgr::BUMP_MAP, params.mNormalMap);
+ } else {
+ LLViewerFetchedTexture::sFlatNormalImagep->addTextureStats(params.mVSize);
+ current_shader->bindTexture(LLShaderMgr::BUMP_MAP, params.mNormalMap);
+ }
+
+ if (params.mSpecularMap)
+ {
+ params.mSpecularMap->addTextureStats(params.mVSize);
+ current_shader->bindTexture(LLShaderMgr::SPECULAR_MAP, params.mSpecularMap);
+ } else {
+ LLViewerFetchedTexture::sWhiteImagep->addTextureStats(params.mVSize);
+ current_shader->bindTexture(LLShaderMgr::SPECULAR_MAP, LLViewerFetchedTexture::sWhiteImagep);
+ }
+ }
+ } else if (current_shader == simple_shader)
+ {
+ // No material. Propegate with default parameters.
+ if (LLPipeline::sRenderDeferred)
+ {
+ current_shader->uniform4f(LLShaderMgr::SPECULAR_COLOR, 0.0f, 0.0f, 0.0f, 0.0f);
+
+ current_shader->uniform1f(LLShaderMgr::ENVIRONMENT_INTENSITY, 0.0f);
+
+ LLViewerFetchedTexture::sFlatNormalImagep->addTextureStats(params.mVSize);
+ current_shader->bindTexture(LLShaderMgr::BUMP_MAP, params.mNormalMap);
+
+ LLViewerFetchedTexture::sWhiteImagep->addTextureStats(params.mVSize);
+ current_shader->bindTexture(LLShaderMgr::SPECULAR_MAP, LLViewerFetchedTexture::sWhiteImagep);
+ }
+ }
if (params.mGroup)
{