diff options
| -rwxr-xr-x | indra/newview/llpanelface.cpp | 308 | ||||
| -rwxr-xr-x | indra/newview/llpanelface.h | 4 | ||||
| -rwxr-xr-x | indra/newview/llselectmgr.cpp | 42 | ||||
| -rwxr-xr-x | indra/newview/llvovolume.cpp | 35 | ||||
| -rwxr-xr-x | indra/newview/pipeline.cpp | 9 | 
5 files changed, 247 insertions, 151 deletions
| diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 1d99e9d162..31e67960bd 100755 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -291,25 +291,21 @@ void LLPanelFace::sendTexture()  	}  } -void LLPanelFace::sendBump() +void LLPanelFace::sendBump(U32 bumpiness)  {	 -	LLComboBox*	mComboBumpiness = getChild<LLComboBox>("combobox bumpiness"); -	if(!mComboBumpiness)return; -	U32 bumpiness = mComboBumpiness->getCurrentIndex();  	if (bumpiness < BUMPY_TEXTURE)  	{  		LL_DEBUGS("Materials") << "clearing bumptexture control" << LL_ENDL;  		LLTextureCtrl* bumpytexture_ctrl = getChild<LLTextureCtrl>("bumpytexture control");  		bumpytexture_ctrl->clear(); -		LLSD dummy_data; -		onSelectNormalTexture(dummy_data); +		bumpytexture_ctrl->setImageAssetID(LLUUID());  	} +  	U8 bump = (U8) bumpiness & TEM_BUMP_MASK;  	LLSelectMgr::getInstance()->selectionSetBumpmap( bump ); -	//refresh material state (in case this change impacts material params) -	LLSD dummy_data; -	onCommitNormalTexture(dummy_data); +	updateBumpyControls(bumpiness == BUMPY_TEXTURE, true); +	updateMaterial();  }  void LLPanelFace::sendTexGen() @@ -320,22 +316,19 @@ void LLPanelFace::sendTexGen()  	LLSelectMgr::getInstance()->selectionSetTexGen( tex_gen );  } -void LLPanelFace::sendShiny() +void LLPanelFace::sendShiny(U32 shininess)  { -	LLComboBox*	mComboShininess = getChild<LLComboBox>("combobox shininess"); -	if(!mComboShininess)return; -	U32 shininess = mComboShininess->getCurrentIndex();  	if (shininess < SHINY_TEXTURE)  	{  		LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("shinytexture control"); +		texture_ctrl->clear();  		texture_ctrl->setImageAssetID(LLUUID());  	}  	U8 shiny = (U8) shininess & TEM_SHINY_MASK;  	LLSelectMgr::getInstance()->selectionSetShiny( shiny ); -	//refresh material state (in case this change impacts material params) -	LLSD dummy_data; -	onCommitSpecularTexture(dummy_data); +	updateShinyControls(shininess == SHINY_TEXTURE, true); +	updateMaterial();  }  void LLPanelFace::sendFullbright() @@ -693,6 +686,99 @@ void LLPanelFace::updateUI()  			getChildView("ColorTrans")->setEnabled(editable);  		} +		// Specular map +		struct spec_get : public LLSelectedTEGetFunctor<LLUUID> +		{ +			LLUUID get(LLViewerObject* object, S32 te_index) +			{ +				LLUUID id; + +				LLMaterial* mat = object->getTE(te_index)->getMaterialParams().get(); + +				if (mat) +				{ +					id = mat->getSpecularID(); +				} + +				return id; +			} +		} spec_get_func; +		identical_spec = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &spec_get_func, specmap_id ); + +		U8 shiny = 0; + +		// Shiny +		{			 +			struct f9 : public LLSelectedTEGetFunctor<U8> +			{ +				U8 get(LLViewerObject* object, S32 face) +				{ +					return (U8)(object->getTE(face)->getShiny()); +				} +			} func; +			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, shiny ); + +			LLCtrlSelectionInterface* combobox_shininess = +				childGetSelectionInterface("combobox shininess"); + +			if (combobox_shininess) +			{ +				combobox_shininess->selectNthItem(specmap_id.isNull() ? (S32)shiny : SHINY_TEXTURE); +			} +			else +			{ +				llwarns << "failed childGetSelectionInterface for 'combobox shininess'" << llendl; +			} +			getChildView("combobox shininess")->setEnabled(editable); +			getChild<LLUICtrl>("combobox shininess")->setTentative(!identical); +			getChildView("label shininess")->setEnabled(editable); +			getChildView("glossiness")->setEnabled(editable); +			getChild<LLUICtrl>("glossiness")->setTentative(!identical); +			getChildView("label glossiness")->setEnabled(editable); +			getChildView("environment")->setEnabled(editable); +			getChild<LLUICtrl>("environment")->setTentative(!identical); +			getChildView("label environment")->setEnabled(editable); +			getChild<LLUICtrl>("shinycolorswatch")->setTentative(!identical); +			getChildView("label shinycolor")->setEnabled(editable); +		} + +		LLColorSwatchCtrl*	mShinyColorSwatch = getChild<LLColorSwatchCtrl>("shinycolorswatch"); +		if(mShinyColorSwatch) +		{ +			mShinyColorSwatch->setValid(editable); +			mShinyColorSwatch->setEnabled( editable ); +			mShinyColorSwatch->setCanApplyImmediately( editable ); +		} + +		U8 bumpy = 0; + +		// Bumpy +		{			 +			struct f10 : public LLSelectedTEGetFunctor<U8> +			{ +				U8 get(LLViewerObject* object, S32 face) +				{ +					return object->getTE(face)->getBumpmap(); +				} +			} func; +			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, bumpy ); + +			LLUUID norm_map_id = getChild<LLTextureCtrl>("bumpytexture control")->getImageAssetID(); + +			LLCtrlSelectionInterface* combobox_bumpiness = childGetSelectionInterface("combobox bumpiness"); +			if (combobox_bumpiness) +			{				 +				combobox_bumpiness->selectNthItem((S32)bumpy); +			} +			else +			{ +				llwarns << "failed childGetSelectionInterface for 'combobox bumpiness'" << llendl; +			} +			getChildView("combobox bumpiness")->setEnabled(editable); +			getChild<LLUICtrl>("combobox bumpiness")->setTentative(!identical); +			getChildView("label bumpiness")->setEnabled(editable); +		} +  		// Texture  		{  			struct f1 : public LLSelectedTEGetFunctor<LLUUID> @@ -744,24 +830,8 @@ void LLPanelFace::updateUI()  			} norm_get_func;  			identical_norm = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &norm_get_func, normmap_id ); -			// Specular map -			struct spec_get : public LLSelectedTEGetFunctor<LLUUID> -			{ -				LLUUID get(LLViewerObject* object, S32 te_index) -				{ -					LLUUID id; -					 -					LLMaterial* mat = object->getTE(te_index)->getMaterialParams().get(); - -					if (mat) -					{ -						id = mat->getSpecularID(); -					} -									 -					return id; -				} -			} spec_get_func; -			identical_spec = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &spec_get_func, specmap_id ); +			if (bumpy != BUMPY_TEXTURE) +				normmap_id = LLUUID::null;  			mIsAlpha = FALSE;  			LLGLenum image_format; @@ -801,7 +871,7 @@ void LLPanelFace::updateUI()  				getChildView("button align")->setEnabled(editable);  			} -			// Specular map +			// Diffuse Alpha Mode  			struct alpha_get : public LLSelectedTEGetFunctor<U8>  			{  				U8 get(LLViewerObject* object, S32 te_index) @@ -888,7 +958,9 @@ void LLPanelFace::updateUI()           if (shinytexture_ctrl && !shinytexture_ctrl->isPickerShown())           { -				if (identical_spec) +				// Can't use this test as we can't actually store SHINY_TEXTURE in the TEs *sigh* +				// +				if (identical_spec /*&& (shiny == SHINY_TEXTURE)*/)  				{  					shinytexture_ctrl->setTentative( FALSE );  					shinytexture_ctrl->setEnabled( editable ); @@ -897,7 +969,7 @@ void LLPanelFace::updateUI()              else if (specmap_id.isNull())  				{                 shinytexture_ctrl->setTentative( FALSE ); -               shinytexture_ctrl->setEnabled( FALSE ); +               shinytexture_ctrl->setEnabled( editable );  					shinytexture_ctrl->setImageAssetID( LLUUID::null );              }              else @@ -910,7 +982,7 @@ void LLPanelFace::updateUI()           if (bumpytexture_ctrl && !bumpytexture_ctrl->isPickerShown())           { -				if (identical_norm) +				if (identical_norm && (bumpy == BUMPY_TEXTURE))  				{  					bumpytexture_ctrl->setTentative( FALSE );  					bumpytexture_ctrl->setEnabled( editable ); @@ -919,7 +991,7 @@ void LLPanelFace::updateUI()  				else if (normmap_id.isNull())  				{  					bumpytexture_ctrl->setTentative( FALSE ); -					bumpytexture_ctrl->setEnabled( FALSE ); +					bumpytexture_ctrl->setEnabled( editable );  					bumpytexture_ctrl->setImageAssetID( LLUUID::null );  				}              else @@ -1319,7 +1391,8 @@ void LLPanelFace::updateUI()  			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &bump_func, rotation );  			identical = align_planar ? identical_planar_aligned : identical; -			getChild<LLUICtrl>("bumpyRot")->setValue(editable ? rotation * RAD_TO_DEG : 0); +			F32 normal_rot_deg = rotation * RAD_TO_DEG; +			getChild<LLUICtrl>("bumpyRot")->setValue(editable ? normal_rot_deg : 0.0f);  			getChild<LLUICtrl>("bumpyRot")->setTentative(LLSD((BOOL)(!identical)));  			getChildView("bumpyRot")->setEnabled(editable && normmap_id.notNull());  		} @@ -1342,82 +1415,7 @@ void LLPanelFace::updateUI()  		} -		U8 shiny = 0; - -		// Shiny -		{			 -			struct f9 : public LLSelectedTEGetFunctor<U8> -			{ -				U8 get(LLViewerObject* object, S32 face) -				{ -					return (U8)(object->getTE(face)->getShiny()); -				} -			} func; -			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, shiny ); - -			LLUUID spec_map_id = getChild<LLTextureCtrl>("shinytexture control")->getImageAssetID(); - -			LLCtrlSelectionInterface* combobox_shininess = -			      childGetSelectionInterface("combobox shininess"); -			if (combobox_shininess) -			{ -				combobox_shininess->selectNthItem(spec_map_id.isNull() ? (S32)shiny : SHINY_TEXTURE); -			} -			else -			{ -				llwarns << "failed childGetSelectionInterface for 'combobox shininess'" << llendl; -			} -			getChildView("combobox shininess")->setEnabled(editable); -			getChild<LLUICtrl>("combobox shininess")->setTentative(!identical); -			getChildView("label shininess")->setEnabled(editable); -			getChildView("glossiness")->setEnabled(editable); -			getChild<LLUICtrl>("glossiness")->setTentative(!identical); -			getChildView("label glossiness")->setEnabled(editable); -			getChildView("environment")->setEnabled(editable); -			getChild<LLUICtrl>("environment")->setTentative(!identical); -			getChildView("label environment")->setEnabled(editable); -			getChild<LLUICtrl>("shinycolorswatch")->setTentative(!identical); -			getChildView("label shinycolor")->setEnabled(editable); -		} - -		LLColorSwatchCtrl*	mShinyColorSwatch = getChild<LLColorSwatchCtrl>("shinycolorswatch"); -		if(mShinyColorSwatch) -		{ -			mShinyColorSwatch->setValid(editable); -			mShinyColorSwatch->setEnabled( editable ); -			mShinyColorSwatch->setCanApplyImmediately( editable ); -		} - -		U8 bumpy = 0; - -		// Bumpy -		{			 -			struct f10 : public LLSelectedTEGetFunctor<U8> -			{ -				U8 get(LLViewerObject* object, S32 face) -				{ -					return object->getTE(face)->getBumpmap(); -				} -			} func; -			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, bumpy ); - -			LLUUID norm_map_id = getChild<LLTextureCtrl>("bumpytexture control")->getImageAssetID(); - -			bumpy = norm_map_id.isNull() ? (S32)bumpy : BUMPY_TEXTURE; - -			LLCtrlSelectionInterface* combobox_bumpiness = childGetSelectionInterface("combobox bumpiness"); -			if (combobox_bumpiness) -			{				 -				combobox_bumpiness->selectNthItem(bumpy); -			} -			else -			{ -				llwarns << "failed childGetSelectionInterface for 'combobox bumpiness'" << llendl; -			} -			getChildView("combobox bumpiness")->setEnabled(editable); -			getChild<LLUICtrl>("combobox bumpiness")->setTentative(!identical); -			getChildView("label bumpiness")->setEnabled(editable); -		} +		  		{			  			LLCtrlSelectionInterface* combobox_texgen = @@ -1633,7 +1631,7 @@ void LLPanelFace::updateUI()  				LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("shinytexture control");  				texture_ctrl->setImageAssetID(material->getSpecularID()); -				if (!material->getSpecularID().isNull()) +				if (!material->getSpecularID().isNull() && (shiny == SHINY_TEXTURE))  				{  					material->getSpecularOffset(offset_x,offset_y);  					material->getSpecularRepeat(repeat_x,repeat_y); @@ -1652,8 +1650,9 @@ void LLPanelFace::updateUI()  					getChild<LLUICtrl>("shinyOffsetV")->setValue(offset_y);  					getChild<LLUICtrl>("glossiness")->setValue(material->getSpecularLightExponent());  					getChild<LLUICtrl>("environment")->setValue(material->getEnvironmentIntensity()); + +					updateShinyControls(!material->getSpecularID().isNull(), true);  				} -				updateShinyControls(!material->getSpecularID().isNull(), true);  				// Assert desired colorswatch color to match material AFTER updateShinyControls  				// to avoid getting overwritten with the default on some UI state changes. @@ -1680,7 +1679,7 @@ void LLPanelFace::updateUI()  				texture_ctrl = getChild<LLTextureCtrl>("bumpytexture control");  				texture_ctrl->setImageAssetID(material->getNormalID()); -				if (!material->getNormalID().isNull()) +				if (!material->getNormalID().isNull() && (bumpy == BUMPY_TEXTURE))  				{  					material->getNormalOffset(offset_x,offset_y);  					material->getNormalRepeat(repeat_x,repeat_y); @@ -1697,8 +1696,9 @@ void LLPanelFace::updateUI()  					getChild<LLUICtrl>("bumpyRot")->setValue(rot*RAD_TO_DEG);  					getChild<LLUICtrl>("bumpyOffsetU")->setValue(offset_x);  					getChild<LLUICtrl>("bumpyOffsetV")->setValue(offset_y); + +					updateBumpyControls(!material->getNormalID().isNull(), true);  				} -				updateBumpyControls(!material->getNormalID().isNull(), true);  			}  			else  			{ @@ -1836,7 +1836,8 @@ void LLPanelFace::updateMaterial()  			material->setNormalOffset(getChild<LLUICtrl>("bumpyOffsetU")->getValue().asReal(),  							getChild<LLUICtrl>("bumpyOffsetV")->getValue().asReal());  			material->setNormalRepeat(bumpy_scale_u, bumpy_scale_v); -			material->setNormalRotation(getChild<LLUICtrl>("bumpyRot")->getValue().asReal()*DEG_TO_RAD); +			F32 normal_rot_rads = getChild<LLUICtrl>("bumpyRot")->getValue().asReal()*DEG_TO_RAD; +			material->setNormalRotation(normal_rot_rads);  		}  		else  		{ @@ -1849,7 +1850,7 @@ void LLPanelFace::updateMaterial()  		LLUUID spec_map_id = getChild<LLTextureCtrl>("shinytexture control")->getImageAssetID(); -		if (!spec_map_id.isNull()  && (shininess == SHINY_TEXTURE)) +		if (!spec_map_id.isNull() && (shininess == SHINY_TEXTURE))  		{  			LL_DEBUGS("Materials") << "Setting shiny texture, shininess = " << shininess  << LL_ENDL;  			material->setSpecularID(spec_map_id); @@ -2041,9 +2042,14 @@ void LLPanelFace::onCommitMaterialType(LLUICtrl* ctrl, void* userdata)  void LLPanelFace::onCommitBump(LLUICtrl* ctrl, void* userdata)  {  	LLPanelFace* self = (LLPanelFace*) userdata; -	self->sendBump(); -	self->updateBumpyControls(false, true); -	self->updateMaterial(); + +	LLComboBox*	mComboBumpiness = self->getChild<LLComboBox>("combobox bumpiness"); +	if(!mComboBumpiness) +		return; + +	U32 bumpiness = mComboBumpiness->getCurrentIndex(); + +	self->sendBump(bumpiness);  }  // static @@ -2156,12 +2162,15 @@ void LLPanelFace::updateBumpyControls(bool is_setting_texture, bool mess_with_co  void LLPanelFace::onCommitShiny(LLUICtrl* ctrl, void* userdata)  {  	LLPanelFace* self = (LLPanelFace*) userdata; -	self->sendShiny();	 -	// Need 'true' here to insure that the 'Use Texture' choice is removed -	// when we select something other than a spec texture -	// -	self->updateShinyControls(false, true); -	self->updateMaterial(); + + +	LLComboBox*	mComboShininess = self->getChild<LLComboBox>("combobox shininess"); +	if(!mComboShininess) +		return; +	 +	U32 shininess = mComboShininess->getCurrentIndex(); + +	self->sendShiny(shininess);  }  // static @@ -2256,41 +2265,54 @@ void LLPanelFace::onSelectTexture(const LLSD& data)  void LLPanelFace::onCommitSpecularTexture( const LLSD& data )  {  	LL_DEBUGS("Materials") << data << LL_ENDL; -	updateShinyControls(true, true); -	updateMaterial(); +	sendShiny(SHINY_TEXTURE);  }  void LLPanelFace::onCommitNormalTexture( const LLSD& data )  {  	LL_DEBUGS("Materials") << data << LL_ENDL; -	updateBumpyControls(true, true); -	updateMaterial(); +	sendBump(BUMPY_TEXTURE);  }  void LLPanelFace::onCancelSpecularTexture(const LLSD& data)  { -	updateMaterial(); -	updateShinyControls(false, true); +	U8 shiny = 0;		 +	struct get_shiny : public LLSelectedTEGetFunctor<U8> +	{ +		U8 get(LLViewerObject* object, S32 face) +		{ +			return (U8)(object->getTE(face)->getShiny()); +		} +	} func; +	LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, shiny ); +	sendShiny(shiny);  }  void LLPanelFace::onCancelNormalTexture(const LLSD& data)  { -	updateMaterial(); -	updateBumpyControls(false, true); +	U8 bumpy = 0;		 +	struct get_bumpy : public LLSelectedTEGetFunctor<U8> +	{ +		U8 get(LLViewerObject* object, S32 face) +		{ +			return (U8)(object->getTE(face)->getBumpmap()); +		} + +	} func; +	LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, bumpy ); +	sendBump(bumpy);  }  void LLPanelFace::onSelectSpecularTexture(const LLSD& data)  {  	LL_DEBUGS("Materials") << data << LL_ENDL; -	updateMaterial(); -	updateShinyControls(true, true); +	sendShiny(SHINY_TEXTURE);  }  void LLPanelFace::onSelectNormalTexture(const LLSD& data)  {  	LL_DEBUGS("Materials") << data << LL_ENDL; -	updateBumpyControls(true, true); -	updateMaterial(); +	sendBump(BUMPY_TEXTURE);  }  //static diff --git a/indra/newview/llpanelface.h b/indra/newview/llpanelface.h index 88f32e45f8..f64564c9a0 100755 --- a/indra/newview/llpanelface.h +++ b/indra/newview/llpanelface.h @@ -63,9 +63,9 @@ protected:  	void			sendTextureInfo();		// applies and sends texture scale, offset, etc.  	void			sendColor();			// applies and sends color  	void			sendAlpha();			// applies and sends transparency -	void			sendBump();				// applies and sends bump map +	void			sendBump(U32 bumpiness);				// applies and sends bump map  	void			sendTexGen();				// applies and sends bump map -	void			sendShiny();			// applies and sends shininess +	void			sendShiny(U32 shininess);			// applies and sends shininess  	void			sendFullbright();		// applies and sends full bright  	void        sendGlow();  	void			sendMedia(); diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index e42d29f7e3..1bb12e495d 100755 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -2507,8 +2507,46 @@ void LLSelectMgr::adjustTexturesByScale(BOOL send_to_sim, BOOL stretch)  				// Apply new scale to face  				if (planar)  				{ -					object->setTEScale(te_num, 1.f/object_scale.mV[s_axis]*scale_ratio.mV[s_axis], -										1.f/object_scale.mV[t_axis]*scale_ratio.mV[t_axis]); +					F32 scale_s = scale_ratio.mV[s_axis]/object_scale.mV[s_axis]; +					F32 scale_t = scale_ratio.mV[t_axis]/object_scale.mV[t_axis]; + +					switch (mTextureChannel) +					{ +						case LLRender::DIFFUSE_MAP: +							{ +								object->setTEScale(te_num, scale_s, scale_t); +							} +							break; + +						case LLRender::NORMAL_MAP: +							{ +								LLTextureEntry* tep = object->getTE(te_num); +								if (tep && !tep->getMaterialParams().isNull()) +								{ +									LLMaterialPtr orig = tep->getMaterialParams(); +									LLMaterialPtr p = new LLMaterial(orig->asLLSD()); +									p->setNormalRepeat(scale_s * 0.5f, scale_t * 0.5f); +									selectionSetMaterial( p ); +								} +							} +							break; + +						case LLRender::SPECULAR_MAP: +							{ +								LLTextureEntry* tep = object->getTE(te_num); +								if (tep && !tep->getMaterialParams().isNull()) +								{ +									LLMaterialPtr orig = tep->getMaterialParams(); +									LLMaterialPtr p = new LLMaterial(orig->asLLSD()); +									p->setSpecularRepeat(scale_s * 0.5f, scale_t * 0.5f); +									selectionSetMaterial( p ); +								} +							} +							break; +						default: +							break; +					} +					  				}  				else  				{ diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index d8f1896654..ca7849fdad 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1980,7 +1980,7 @@ void LLVOVolume::setTEMaterialParamsCallbackTE(const LLMaterialID &pMaterialID,  		return;  	LLTextureEntry* texture_entry = getTE(te); -	if (texture_entry) +	if (texture_entry && (texture_entry->getMaterialID() == pMaterialID))  	{  		setTEMaterialParams(te, pMaterialParams);  	} @@ -2009,7 +2009,7 @@ S32 LLVOVolume::setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID)  	if (res)  	{  #if USE_TE_SPECIFIC_REGISTRATION -		LLMaterialMgr::instance().getTE(getRegion()->getRegionID(), pMaterialID, te, boost::bind(&LLVOVolume::setTEMaterialParamsCallback, this, _1, _2, _3));			 +		LLMaterialMgr::instance().getTE(getRegion()->getRegionID(), pMaterialID, te, boost::bind(&LLVOVolume::setTEMaterialParamsCallbackTE, this, _1, _2, _3));			  #else  		LLMaterialMgr::instance().get(getRegion()->getRegionID(), pMaterialID, boost::bind(&LLVOVolume::setTEMaterialParamsCallback, this, _1, _2));  #endif @@ -4531,7 +4531,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  							pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_GLOW);  						} -						LLMaterial* mat = LLPipeline::sRenderDeferred ? te->getMaterialParams().get() : NULL; +						LLMaterial* mat = te->getMaterialParams().get();  						if (mat)  						{ @@ -4550,6 +4550,13 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  									pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_FULLBRIGHT);  								}  							} +							else if (mat->getDiffuseAlphaMode() == LLMaterial::DIFFUSE_ALPHA_MODE_MASK) +							{ +								// This feels unclean, but is the only way to get alpha masked rigged stuff to show up +								// with masking correctly in both deferred and non-deferred paths. NORSPEC-191 +								// +								pool->addRiggedFace(facep, LLPipeline::sRenderDeferred ? LLDrawPoolAvatar::RIGGED_MATERIAL_ALPHA_MASK : LLDrawPoolAvatar::RIGGED_ALPHA); +							}  							else  							{  								U32 mask = mat->getShaderMask(); @@ -5361,6 +5368,28 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::  					registerFace(group, facep, pass[mask]);  				}  			} +			else if (mat) +			{ +				if (mat->getDiffuseAlphaMode() == LLMaterial::DIFFUSE_ALPHA_MODE_MASK) +				{ +					registerFace(group, facep, fullbright ? LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK : LLRenderPass::PASS_ALPHA_MASK); +				} +				else if (is_alpha || (te->getColor().mV[3] < 0.999f)) +				{ +					registerFace(group, facep, LLRenderPass::PASS_ALPHA); +				} +				else if (gPipeline.canUseVertexShaders() +					&& LLPipeline::sRenderBump  +					&& te->getShiny()  +					&& can_be_shiny) +				{ +					registerFace(group, facep, fullbright ? LLRenderPass::PASS_FULLBRIGHT_SHINY : LLRenderPass::PASS_SHINY); +				} +				else +				{ +					registerFace(group, facep, fullbright ? LLRenderPass::PASS_FULLBRIGHT : LLRenderPass::PASS_SIMPLE); +				} +			}  			else if (is_alpha)  			{  				// can we safely treat this as an alpha mask? diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 19ff1e852d..984ea446fe 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -1699,7 +1699,14 @@ U32 LLPipeline::getPoolTypeFromTE(const LLTextureEntry* te, LLViewerTexture* ima  				alpha = color_alpha;  				break;  			default: //alpha mode set to "mask", go to alpha pool if fullbright -				alpha = color_alpha; // Material's alpha mode is set to none, mask, or emissive.  Toss it into the opaque material draw pool. +				if (te->getFullbright()) +				{ +					alpha = true; +				} +				else +				{ +					alpha = color_alpha; // Material's alpha mode is set to none, mask, or emissive.  Toss it into the opaque material draw pool. +				}  				break;  		}  	} | 
