summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xindra/newview/llpanelface.cpp308
-rwxr-xr-xindra/newview/llpanelface.h4
-rwxr-xr-xindra/newview/llselectmgr.cpp42
-rwxr-xr-xindra/newview/llvovolume.cpp35
-rwxr-xr-xindra/newview/pipeline.cpp9
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;
}
}