diff options
| -rwxr-xr-x | indra/newview/llfloatertools.h | 2 | ||||
| -rwxr-xr-x | indra/newview/llpanelface.cpp | 37 | ||||
| -rwxr-xr-x | indra/newview/llpanelface.h | 21 | ||||
| -rwxr-xr-x | indra/newview/llselectmgr.cpp | 6 | ||||
| -rwxr-xr-x | indra/newview/lltooldraganddrop.cpp | 47 | ||||
| -rwxr-xr-x | indra/newview/pipeline.cpp | 4 | 
6 files changed, 89 insertions, 28 deletions
| diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h index ecb0092a6f..189bae46c2 100755 --- a/indra/newview/llfloatertools.h +++ b/indra/newview/llfloatertools.h @@ -109,6 +109,8 @@ public:  	static void setGridMode(S32 mode); +	LLPanelFace* getPanelFace() { return mPanelFace; } +  private:  	void refresh();  	void refreshMedia(); diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 911af9df04..3869219da6 100755 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -66,7 +66,7 @@  #include "llvovolume.h"  #include "lluictrlfactory.h"  #include "llpluginclassmedia.h" -#include "llviewertexturelist.h" +#include "llviewertexturelist.h"// Update sel manager as to which channel we're editing so it can reflect the correct overlay UI  //  // Constant definitions for comboboxes @@ -89,6 +89,19 @@ const S32 SHINY_TEXTURE = 4;		// use supplied specular map  //  std::string USE_TEXTURE; +LLRender::eTexIndex LLPanelFace::getTextureChannelToEdit() +{ +	LLComboBox* combobox_matmedia = getChild<LLComboBox>("combobox matmedia"); +	LLComboBox* combobox_mattype	= getChild<LLComboBox>("combobox mattype"); + +	LLRender::eTexIndex channel_to_edit = (combobox_matmedia && combobox_matmedia->getCurrentIndex() == MATMEDIA_MATERIAL) ? +													  (combobox_mattype ? (LLRender::eTexIndex)combobox_mattype->getCurrentIndex() : LLRender::DIFFUSE_MAP) : LLRender::DIFFUSE_MAP; + +	channel_to_edit = (channel_to_edit == LLRender::NORMAL_MAP)		? (getCurrentNormalMap().isNull()		? LLRender::DIFFUSE_MAP : channel_to_edit) : channel_to_edit; +	channel_to_edit = (channel_to_edit == LLRender::SPECULAR_MAP)	? (getCurrentSpecularMap().isNull()		? LLRender::DIFFUSE_MAP : channel_to_edit) : channel_to_edit; +	return channel_to_edit; +} +  // Things the UI provides...  //  LLUUID	LLPanelFace::getCurrentNormalMap()			{ return getChild<LLTextureCtrl>("bumpytexture control")->getImageAssetID();	} @@ -1194,7 +1207,8 @@ void LLPanelFace::updateUI()  			getChildView("checkbox fullbright")->setEnabled(editable);  			getChild<LLUICtrl>("checkbox fullbright")->setTentative(!identical_fullbright);  		} -		 + +  		// Repeats per meter  		{  			F32 repeats_diff = 1.f; @@ -1218,6 +1232,9 @@ void LLPanelFace::updateUI()  				F32  repeats = 1.0f;  				U32 material_type = (combobox_matmedia->getCurrentIndex() == MATMEDIA_MATERIAL) ? combobox_mattype->getCurrentIndex() : MATTYPE_DIFFUSE; + +				LLSelectMgr::getInstance()->setTextureChannel(LLRender::eTexIndex(material_type)); +  				switch (material_type)  				{  					default: @@ -1328,18 +1345,6 @@ void LLPanelFace::updateUI()  					getChild<LLColorSwatchCtrl>("shinycolorswatch")->set(material->getSpecularLightColor(),TRUE);  				} -				// Update sel manager as to which channel we're editing so it can reflect the correct overlay UI -				// NORSPEC-103 -				LLRender::eTexIndex channel_to_edit = (combobox_matmedia->getCurrentIndex() == MATMEDIA_MATERIAL) ? (LLRender::eTexIndex)combobox_mattype->getCurrentIndex() : LLRender::DIFFUSE_MAP; - -				if ( ((channel_to_edit == LLRender::NORMAL_MAP) && material->getNormalID().isNull()) -					||((channel_to_edit == LLRender::SPECULAR_MAP) && material->getSpecularID().isNull())) -				{ -					channel_to_edit = LLRender::DIFFUSE_MAP; -				} - -				LLSelectMgr::getInstance()->setTextureChannel(channel_to_edit); -  				// Bumpy (normal)  				texture_ctrl = getChild<LLTextureCtrl>("bumpytexture control");  				texture_ctrl->setImageAssetID(material->getNormalID()); @@ -1365,10 +1370,6 @@ void LLPanelFace::updateUI()  					updateBumpyControls(!material->getNormalID().isNull(), true);  				}  			} -			else -			{ -				LLSelectMgr::getInstance()->setTextureChannel(LLRender::DIFFUSE_MAP); -			}  		}  		// Set variable values for numeric expressions diff --git a/indra/newview/llpanelface.h b/indra/newview/llpanelface.h index 42c1f6bd48..834ad9e14c 100755 --- a/indra/newview/llpanelface.h +++ b/indra/newview/llpanelface.h @@ -100,6 +100,19 @@ public:  	void			setMediaURL(const std::string& url);  	void			setMediaType(const std::string& mime_type); +	LLMaterialPtr createDefaultMaterial(LLMaterialPtr current_material) +	{ +		LLMaterialPtr new_material(!current_material.isNull() ? new LLMaterial(current_material->asLLSD()) : new LLMaterial()); +		llassert_always(new_material); + +		// Preserve old diffuse alpha mode or assert correct default blend mode as appropriate for the alpha channel content of the diffuse texture +		// +		new_material->setDiffuseAlphaMode(current_material.isNull() ? (isAlpha() ? LLMaterial::DIFFUSE_ALPHA_MODE_BLEND : LLMaterial::DIFFUSE_ALPHA_MODE_NONE) : current_material->getDiffuseAlphaMode()); +		return new_material; +	} + +	LLRender::eTexIndex getTextureChannelToEdit(); +  protected:  	void			getState(); @@ -178,6 +191,8 @@ protected:  	static F32     valueGlow(LLViewerObject* object, S32 face); +	 +  private:  	bool		isAlpha() { return mIsAlpha; } @@ -234,7 +249,7 @@ private:  			{  				if (_edit)  				{ -					LLMaterialPtr new_material(!current_material.isNull() ? new LLMaterial(current_material->asLLSD()) : new LLMaterial()); +					LLMaterialPtr new_material = _panel->createDefaultMaterial(current_material);  					llassert_always(new_material);  					// Determine correct alpha mode for current diffuse texture @@ -242,10 +257,6 @@ private:  					//  					U8 default_alpha_mode = (_panel->isAlpha() ? LLMaterial::DIFFUSE_ALPHA_MODE_BLEND : LLMaterial::DIFFUSE_ALPHA_MODE_NONE); -					// Default to matching expected state of UI -					// -					new_material->setDiffuseAlphaMode(current_material.isNull() ? default_alpha_mode : current_material->getDiffuseAlphaMode()); -  					// Do "It"!  					//  					_edit->apply(new_material); diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 0cbdbe16a3..7b397d46f3 100755 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -91,7 +91,7 @@  #include "llvovolume.h"  #include "pipeline.h"  #include "llviewershadermgr.h" - +#include "llpanelface.h"  #include "llglheaders.h"  LLViewerObject* getSelectedParentObject(LLViewerObject *object) ; @@ -2534,7 +2534,7 @@ void LLSelectMgr::adjustTexturesByScale(BOOL send_to_sim, BOOL stretch)  					if (tep && !tep->getMaterialParams().isNull())  					{  						LLMaterialPtr orig = tep->getMaterialParams(); -						LLMaterialPtr p = new LLMaterial(orig->asLLSD()); +						LLMaterialPtr p = gFloaterTools->getPanelFace()->createDefaultMaterial(orig);  						p->setNormalRepeat(normal_scale_s, normal_scale_t);  						p->setSpecularRepeat(specular_scale_s, specular_scale_t); @@ -2560,8 +2560,8 @@ void LLSelectMgr::adjustTexturesByScale(BOOL send_to_sim, BOOL stretch)  					if (tep && !tep->getMaterialParams().isNull())  					{  						LLMaterialPtr orig = tep->getMaterialParams(); +						LLMaterialPtr p = gFloaterTools->getPanelFace()->createDefaultMaterial(orig); -						LLMaterialPtr p = new LLMaterial(orig->asLLSD());  						p->setNormalRepeat(normal_scale_s, normal_scale_t);  						p->setSpecularRepeat(specular_scale_s, specular_scale_t); diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index e085834326..ef7d0cd81b 100755 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -58,6 +58,7 @@  #include "llviewerwindow.h"  #include "llvoavatarself.h"  #include "llworld.h" +#include "llpanelface.h"  // syntactic sugar  #define callMemberFunction(object,ptrToMember)  ((object).*(ptrToMember)) @@ -1163,7 +1164,51 @@ void LLToolDragAndDrop::dropTextureOneFace(LLViewerObject* hit_obj,  	// update viewer side image in anticipation of update from simulator  	LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture(asset_id);  	LLViewerStats::getInstance()->incStat(LLViewerStats::ST_EDIT_TEXTURE_COUNT ); -	hit_obj->setTEImage(hit_face, image); + +	LLTextureEntry* tep = hit_obj ? (hit_obj->getTE(hit_face)) : NULL; + +	LLPanelFace* panel_face = gFloaterTools->getPanelFace(); + +	if (gFloaterTools->getVisible() && panel_face) +	{ +		switch (LLSelectMgr::getInstance()->getTextureChannel()) +		{ + +		case 0: +		default: +			{ +				hit_obj->setTEImage(hit_face, image); +			} +			break; + +		case 1: +			{ +				LLMaterialPtr old_mat = tep->getMaterialParams(); +				LLMaterialPtr new_mat = panel_face->createDefaultMaterial(old_mat); +				new_mat->setNormalID(asset_id); +				tep->setMaterialParams(new_mat); +				hit_obj->setTENormalMap(hit_face, asset_id); +				LLMaterialMgr::getInstance()->put(hit_obj->getID(), hit_face, *new_mat); +			} +			break; + +		case 2: +			{ +				LLMaterialPtr old_mat = tep->getMaterialParams(); +				LLMaterialPtr new_mat = panel_face->createDefaultMaterial(old_mat); +				new_mat->setSpecularID(asset_id); +				tep->setMaterialParams(new_mat); +				hit_obj->setTESpecularMap(hit_face, asset_id); +				LLMaterialMgr::getInstance()->put(hit_obj->getID(), hit_face, *new_mat); +			} +			break; +		} +	} +	else +	{ +		hit_obj->setTEImage(hit_face, image); +	} +	  	dialog_refresh_all();  	// send the update to the simulator diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 56a3ebe3a8..d37b086ae3 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -111,6 +111,8 @@  #include "llpathinglib.h"  #include "llfloaterpathfindingconsole.h"  #include "llfloaterpathfindingcharacters.h" +#include "llfloatertools.h" +#include "llpanelface.h"  #include "llpathfindingpathtool.h"  #ifdef _DEBUG @@ -3962,7 +3964,7 @@ void LLPipeline::postSort(LLCamera& camera)  	{  		mSelectedFaces.clear(); -		LLPipeline::setRenderHighlightTextureChannel(LLSelectMgr::getInstance()->getTextureChannel()); +		LLPipeline::setRenderHighlightTextureChannel(gFloaterTools->getPanelFace()->getTextureChannelToEdit());  		// Draw face highlights for selected faces.  		if (LLSelectMgr::getInstance()->getTEMode()) | 
