diff options
| -rw-r--r-- | indra/llprimitive/llmaterial.cpp | 18 | ||||
| -rw-r--r-- | indra/llprimitive/llmaterial.h | 2 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 7 | 
3 files changed, 14 insertions, 13 deletions
diff --git a/indra/llprimitive/llmaterial.cpp b/indra/llprimitive/llmaterial.cpp index a219ac1450..fa22145972 100644 --- a/indra/llprimitive/llmaterial.cpp +++ b/indra/llprimitive/llmaterial.cpp @@ -426,18 +426,18 @@ bool LLMaterial::operator != (const LLMaterial& rhs) const  } -U32 LLMaterial::getShaderMask(U32 alpha_mode) +U32 LLMaterial::getShaderMask(U32 alpha_mode, BOOL is_alpha)  { //NEVER incorporate this value into the message system -- this function will vary depending on viewer implementation -    U32 ret = 0; -    //two least significant bits are "diffuse alpha mode" -    if (alpha_mode != DIFFUSE_ALPHA_MODE_DEFAULT) +	//two least significant bits are "diffuse alpha mode" +	U32 ret = alpha_mode; +    if (ret == DIFFUSE_ALPHA_MODE_DEFAULT)      { -        ret = alpha_mode; -    } -    else -    { -        ret = getDiffuseAlphaMode(); +		ret = getDiffuseAlphaMode(); +		if (ret == DIFFUSE_ALPHA_MODE_BLEND && !is_alpha) +		{ +			ret = DIFFUSE_ALPHA_MODE_NONE; +		}      }      llassert(ret < SHADER_COUNT); diff --git a/indra/llprimitive/llmaterial.h b/indra/llprimitive/llmaterial.h index d58b7ee812..d92ef1dfba 100644 --- a/indra/llprimitive/llmaterial.h +++ b/indra/llprimitive/llmaterial.h @@ -126,7 +126,7 @@ public:      bool        operator == (const LLMaterial& rhs) const;      bool        operator != (const LLMaterial& rhs) const; -    U32         getShaderMask(U32 alpha_mode = DIFFUSE_ALPHA_MODE_DEFAULT); +    U32         getShaderMask(U32 alpha_mode, BOOL is_alpha);  protected:      LLUUID      mNormalID; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index b910c4f93c..086e751965 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -5295,13 +5295,14 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,  	if (mat)  	{ +		BOOL is_alpha = (facep->getPoolType() == LLDrawPool::POOL_ALPHA) || (facep->getTextureEntry()->getColor().mV[3] < 0.999f) ? TRUE : FALSE;  		if (type == LLRenderPass::PASS_ALPHA)  		{ -			shader_mask = mat->getShaderMask(LLMaterial::DIFFUSE_ALPHA_MODE_BLEND); +			shader_mask = mat->getShaderMask(LLMaterial::DIFFUSE_ALPHA_MODE_BLEND, is_alpha);  		}  		else  		{ -			shader_mask = mat->getShaderMask(); +			shader_mask = mat->getShaderMask(LLMaterial::DIFFUSE_ALPHA_MODE_DEFAULT, is_alpha);  		}  	} @@ -6676,7 +6677,7 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace  						LLRenderPass::PASS_NORMSPEC_EMISSIVE,  					}; -					U32 mask = mat->getShaderMask(); +					U32 mask = mat->getShaderMask(LLMaterial::DIFFUSE_ALPHA_MODE_DEFAULT, is_alpha);  					llassert(mask < sizeof(pass)/sizeof(U32));  | 
