parent
6fcec6b47d
commit
f189ba4a3d
|
|
@ -32,8 +32,10 @@
|
|||
#include "llmaterialid.h"
|
||||
#include "llsd.h"
|
||||
#include "v4coloru.h"
|
||||
#include "llpointer.h"
|
||||
#include "llrefcount.h"
|
||||
|
||||
class LLMaterial
|
||||
class LLMaterial : public LLRefCount
|
||||
{
|
||||
public:
|
||||
|
||||
|
|
@ -115,6 +117,6 @@ protected:
|
|||
U8 mAlphaMaskCutoff;
|
||||
};
|
||||
|
||||
typedef boost::shared_ptr<LLMaterial> LLMaterialPtr;
|
||||
typedef LLPointer<LLMaterial> LLMaterialPtr;
|
||||
|
||||
#endif // LL_LLMATERIAL_H
|
||||
|
|
|
|||
|
|
@ -535,6 +535,10 @@ S32 LLTextureEntry::setMaterialID(const LLMaterialID& pMaterialID)
|
|||
if (mMaterialID != pMaterialID)
|
||||
{
|
||||
mMaterialID = pMaterialID;
|
||||
if (mMaterialID.isNull())
|
||||
{
|
||||
setMaterialParams(NULL);
|
||||
}
|
||||
return TEM_CHANGE_TEXTURE;
|
||||
}
|
||||
return TEM_CHANGE_NONE;
|
||||
|
|
|
|||
|
|
@ -301,10 +301,17 @@ void LLPanelFace::sendBump()
|
|||
if (bumpiness < BUMPY_TEXTURE)
|
||||
{
|
||||
LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("bumpytexture control");
|
||||
texture_ctrl->setImageAssetID(LLUUID());
|
||||
//texture_ctrl->setImageAssetID(LLUUID());
|
||||
texture_ctrl->clear();
|
||||
LLSD dummy_data;
|
||||
onSelectMaterialTexture(dummy_data);
|
||||
}
|
||||
U8 bump = (U8) bumpiness & TEM_BUMP_MASK;
|
||||
LLSelectMgr::getInstance()->selectionSetBumpmap( bump );
|
||||
|
||||
//refresh material state (in case this change impacts material params)
|
||||
LLSD dummy_data;
|
||||
onCommitMaterialTexture(dummy_data);
|
||||
}
|
||||
|
||||
void LLPanelFace::sendTexGen()
|
||||
|
|
@ -592,7 +599,7 @@ void LLPanelFace::sendTextureInfo()
|
|||
}
|
||||
|
||||
void LLPanelFace::getState()
|
||||
{
|
||||
{ //set state of UI to match state of texture entry(ies) (calls setEnabled, setValue, etc, but NOT setVisible)
|
||||
LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject();
|
||||
|
||||
if( objectp
|
||||
|
|
@ -760,24 +767,45 @@ void LLPanelFace::getState()
|
|||
getChildView("button align")->setEnabled(editable);
|
||||
}
|
||||
|
||||
// Specular map
|
||||
struct alpha_get : public LLSelectedTEGetFunctor<U8>
|
||||
{
|
||||
// Default alpha mode to None if texture has no alpha, or Alpha Blending if present
|
||||
// Will be overridden later if a material is present for this face
|
||||
S32 default_alpha = ALPHAMODE_NONE;
|
||||
if (mIsAlpha)
|
||||
U8 get(LLViewerObject* object, S32 te_index)
|
||||
{
|
||||
default_alpha = ALPHAMODE_BLEND;
|
||||
U8 ret = 1;
|
||||
|
||||
LLMaterial* mat = object->getTE(te_index)->getMaterialParams().get();
|
||||
|
||||
if (mat)
|
||||
{
|
||||
ret = mat->getDiffuseAlphaMode();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
} alpha_get_func;
|
||||
|
||||
U8 alpha_mode = 1;
|
||||
LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &alpha_get_func, alpha_mode);
|
||||
|
||||
{
|
||||
LLCtrlSelectionInterface* combobox_alphamode =
|
||||
childGetSelectionInterface("combobox alphamode");
|
||||
childGetSelectionInterface("combobox alphamode");
|
||||
|
||||
if (combobox_alphamode)
|
||||
{
|
||||
combobox_alphamode->selectNthItem(default_alpha);
|
||||
if (!mIsAlpha)
|
||||
{
|
||||
alpha_mode = LLMaterial::DIFFUSE_ALPHA_MODE_NONE;
|
||||
}
|
||||
|
||||
combobox_alphamode->selectNthItem(alpha_mode);
|
||||
}
|
||||
else
|
||||
{
|
||||
llwarns << "failed childGetSelectionInterface for 'combobox alphamode'" << llendl;
|
||||
}
|
||||
|
||||
updateAlphaControls(getChild<LLComboBox>("combobox alphamode"),this);
|
||||
}
|
||||
|
||||
|
|
@ -1432,7 +1460,8 @@ void LLPanelFace::getState()
|
|||
// Materials
|
||||
{
|
||||
mMaterialID = LLMaterialID::null;
|
||||
mMaterial.reset();
|
||||
mMaterial = NULL;
|
||||
|
||||
struct f1 : public LLSelectedTEGetFunctor<LLMaterialID>
|
||||
{
|
||||
LLMaterialID get(LLViewerObject* object, S32 te_index)
|
||||
|
|
@ -1515,10 +1544,13 @@ void LLPanelFace::refresh()
|
|||
}
|
||||
|
||||
void LLPanelFace::onMaterialLoaded(const LLMaterialID& material_id, const LLMaterialPtr material)
|
||||
{
|
||||
{ //laying out UI based on material parameters (calls setVisible on various components)
|
||||
LL_DEBUGS("Materials") << "Loaded material " << material_id.asString() << material->asLLSD() << LL_ENDL;
|
||||
mMaterial = material;
|
||||
|
||||
|
||||
//make a local copy of the material for editing
|
||||
// (prevents local edits from overwriting client state on shared materials)
|
||||
mMaterial = new LLMaterial(*material);
|
||||
|
||||
// Alpha
|
||||
LLCtrlSelectionInterface* combobox_alphamode =
|
||||
childGetSelectionInterface("combobox alphamode");
|
||||
|
|
@ -1586,30 +1618,21 @@ void LLPanelFace::updateMaterial()
|
|||
U32 alpha_mode = comboAlphaMode->getCurrentIndex();
|
||||
U32 bumpiness = comboBumpiness->getCurrentIndex();
|
||||
U32 shininess = comboShininess->getCurrentIndex();
|
||||
if ((mIsAlpha && (alpha_mode != ALPHAMODE_BLEND))
|
||||
if ((mIsAlpha && (alpha_mode != LLMaterial::DIFFUSE_ALPHA_MODE_BLEND))
|
||||
|| (bumpiness == BUMPY_TEXTURE)
|
||||
|| (shininess == SHINY_TEXTURE))
|
||||
{
|
||||
// The user's specified something that needs a material.
|
||||
bool new_material = false;
|
||||
if (!mMaterial)
|
||||
{
|
||||
new_material = true;
|
||||
mMaterial = LLMaterialPtr(new LLMaterial());
|
||||
//set defaults according to UI spec
|
||||
mMaterial->setSpecularLightColor(LLColor4U::white);
|
||||
mMaterial->setSpecularLightExponent((U8) (255*0.2f));
|
||||
mMaterial->setEnvironmentIntensity(0);
|
||||
mMaterial->setDiffuseAlphaMode(LLMaterial::DIFFUSE_ALPHA_MODE_NONE);
|
||||
mMaterial->setAlphaMaskCutoff(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
mMaterial->setSpecularLightColor(getChild<LLColorSwatchCtrl>("shinycolorswatch")->get());
|
||||
mMaterial->setSpecularLightExponent((U8)(255*getChild<LLUICtrl>("glossiness")->getValue().asReal()));
|
||||
mMaterial->setEnvironmentIntensity((U8)(255*getChild<LLUICtrl>("environment")->getValue().asReal()));
|
||||
mMaterial->setDiffuseAlphaMode(getChild<LLComboBox>("combobox alphamode")->getCurrentIndex());
|
||||
mMaterial->setAlphaMaskCutoff((U8)(getChild<LLUICtrl>("maskcutoff")->getValue().asInteger()));
|
||||
}
|
||||
|
||||
mMaterial->setDiffuseAlphaMode(getChild<LLComboBox>("combobox alphamode")->getCurrentIndex());
|
||||
mMaterial->setAlphaMaskCutoff((U8)(getChild<LLUICtrl>("maskcutoff")->getValue().asInteger()));
|
||||
|
||||
if (bumpiness == BUMPY_TEXTURE)
|
||||
{
|
||||
LL_DEBUGS("Materials") << "Setting bumpy texture, bumpiness = " << bumpiness << LL_ENDL;
|
||||
|
|
@ -1637,6 +1660,20 @@ void LLPanelFace::updateMaterial()
|
|||
mMaterial->setSpecularRepeat(getChild<LLUICtrl>("shinyScaleU")->getValue().asReal(),
|
||||
getChild<LLUICtrl>("shinyScaleV")->getValue().asReal());
|
||||
mMaterial->setSpecularRotation(getChild<LLUICtrl>("shinyRot")->getValue().asReal()*DEG_TO_RAD);
|
||||
|
||||
//override shininess to 0.2f if this is a new material
|
||||
if (new_material)
|
||||
{
|
||||
mMaterial->setSpecularLightColor(LLColor4U::white);
|
||||
mMaterial->setSpecularLightExponent((U8) (0.2f*255.f));
|
||||
mMaterial->setEnvironmentIntensity(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
mMaterial->setSpecularLightColor(getChild<LLColorSwatchCtrl>("shinycolorswatch")->get());
|
||||
mMaterial->setSpecularLightExponent((U8)(255*getChild<LLUICtrl>("glossiness")->getValue().asReal()));
|
||||
mMaterial->setEnvironmentIntensity((U8)(255*getChild<LLUICtrl>("environment")->getValue().asReal()));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1645,6 +1682,8 @@ void LLPanelFace::updateMaterial()
|
|||
mMaterial->setSpecularOffset(0.0f,0.0f);
|
||||
mMaterial->setSpecularRepeat(1.0f,1.0f);
|
||||
mMaterial->setSpecularRotation(0.0f);
|
||||
mMaterial->setSpecularLightExponent(0);
|
||||
mMaterial->setEnvironmentIntensity(0);
|
||||
}
|
||||
|
||||
LL_DEBUGS("Materials") << "Updating material: " << mMaterial->asLLSD() << LL_ENDL;
|
||||
|
|
@ -1656,7 +1695,7 @@ void LLPanelFace::updateMaterial()
|
|||
if (mMaterial || !mMaterialID.isNull())
|
||||
{
|
||||
LL_DEBUGS("Materials") << "Resetting material entry" << LL_ENDL;
|
||||
mMaterial.reset();
|
||||
mMaterial = NULL;
|
||||
mMaterialID = LLMaterialID::null;
|
||||
// Delete existing material entry...
|
||||
LLSelectMgr::getInstance()->selectionRemoveMaterial();
|
||||
|
|
|
|||
|
|
@ -4045,7 +4045,7 @@ void LLViewerObject::setTE(const U8 te, const LLTextureEntry &texture_entry)
|
|||
const LLUUID& image_id = getTE(te)->getID();
|
||||
mTEImages[te] = LLViewerTextureManager::getFetchedTexture(image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
|
||||
if (getTE(te)->getMaterialParams() != NULL)
|
||||
if (getTE(te)->getMaterialParams().notNull())
|
||||
{
|
||||
const LLUUID& norm_id = getTE(te)->getMaterialParams()->getNormalID();
|
||||
mTENormalMaps[te] = LLViewerTextureManager::getFetchedTexture(norm_id, TRUE, LLViewerTexture::BOOST_BUMP, LLViewerTexture::LOD_TEXTURE);
|
||||
|
|
@ -4094,7 +4094,12 @@ S32 LLViewerObject::setTENormalMapCore(const U8 te, const LLUUID& uuid, LLHost h
|
|||
// uuid == LLUUID::null)
|
||||
{
|
||||
retval = TEM_CHANGE_TEXTURE;
|
||||
getTE(te)->getMaterialParams()->setNormalID(uuid);
|
||||
LLTextureEntry* tep = getTE(te);
|
||||
LLMaterial* mat = tep->getMaterialParams();
|
||||
if (mat)
|
||||
{
|
||||
mat->setNormalID(uuid);
|
||||
}
|
||||
mTENormalMaps[te] = LLViewerTextureManager::getFetchedTexture(uuid, TRUE, LLViewerTexture::BOOST_BUMP, LLViewerTexture::LOD_TEXTURE, 0, 0, host);
|
||||
setChanged(TEXTURE);
|
||||
if (mDrawable.notNull())
|
||||
|
|
@ -4112,7 +4117,12 @@ S32 LLViewerObject::setTESpecularMapCore(const U8 te, const LLUUID& uuid, LLHost
|
|||
// uuid == LLUUID::null)
|
||||
{
|
||||
retval = TEM_CHANGE_TEXTURE;
|
||||
getTE(te)->getMaterialParams()->setSpecularID(uuid);
|
||||
LLTextureEntry* tep = getTE(te);
|
||||
LLMaterial* mat = tep->getMaterialParams();
|
||||
if (mat)
|
||||
{
|
||||
mat->setSpecularID(uuid);
|
||||
}
|
||||
mTESpecularMaps[te] = LLViewerTextureManager::getFetchedTexture(uuid, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host);
|
||||
setChanged(TEXTURE);
|
||||
if (mDrawable.notNull())
|
||||
|
|
|
|||
|
|
@ -892,7 +892,7 @@ LLFace* LLVOVolume::addFace(S32 f)
|
|||
{
|
||||
const LLTextureEntry* te = getTE(f);
|
||||
LLViewerTexture* imagep = getTEImage(f);
|
||||
if (te->getMaterialParams() != NULL)
|
||||
if (te->getMaterialParams().notNull())
|
||||
{
|
||||
LLViewerTexture* normalp = getTENormalMap(f);
|
||||
LLViewerTexture* specularp = getTESpecularMap(f);
|
||||
|
|
@ -1395,7 +1395,7 @@ void LLVOVolume::regenFaces()
|
|||
|
||||
facep->setTEOffset(i);
|
||||
facep->setTexture(getTEImage(i));
|
||||
if (facep->getTextureEntry()->getMaterialParams() != NULL)
|
||||
if (facep->getTextureEntry()->getMaterialParams().notNull())
|
||||
{
|
||||
facep->setNormalMap(getTENormalMap(i));
|
||||
facep->setSpecularMap(getTESpecularMap(i));
|
||||
|
|
@ -1986,19 +1986,15 @@ void LLVOVolume::setTEMaterialParamsCallback(const LLMaterialID &pMaterialID, co
|
|||
|
||||
S32 LLVOVolume::setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID)
|
||||
{
|
||||
if (!pMaterialID.isNull())
|
||||
S32 res = LLViewerObject::setTEMaterialID(te, pMaterialID);
|
||||
if (res)
|
||||
{
|
||||
S32 res = LLViewerObject::setTEMaterialID(te, pMaterialID);
|
||||
if (res)
|
||||
{
|
||||
LL_DEBUGS("MaterialTEs") << " " << pMaterialID.asString() << LL_ENDL;
|
||||
LLMaterialMgr::instance().get(getRegion()->getRegionID(), pMaterialID, boost::bind(&LLVOVolume::setTEMaterialParamsCallback, this, _1, _2));
|
||||
gPipeline.markTextured(mDrawable);
|
||||
mFaceMappingChanged = TRUE;
|
||||
}
|
||||
return res;
|
||||
LL_DEBUGS("MaterialTEs") << " " << pMaterialID.asString() << LL_ENDL;
|
||||
LLMaterialMgr::instance().get(getRegion()->getRegionID(), pMaterialID, boost::bind(&LLVOVolume::setTEMaterialParamsCallback, this, _1, _2));
|
||||
gPipeline.markTextured(mDrawable);
|
||||
mFaceMappingChanged = TRUE;
|
||||
}
|
||||
return 0;
|
||||
return res;
|
||||
}
|
||||
|
||||
S32 LLVOVolume::setTEMaterialParams(const U8 te, const LLMaterialPtr pMaterialParams)
|
||||
|
|
@ -4135,26 +4131,24 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,
|
|||
draw_vec.push_back(draw_info);
|
||||
draw_info->mTextureMatrix = tex_mat;
|
||||
draw_info->mModelMatrix = model_mat;
|
||||
if (!facep->getTextureEntry()->getMaterialID().isNull())
|
||||
if (facep->getTextureEntry()->getMaterialParams().notNull())
|
||||
{
|
||||
// We have a material. Update our draw info accordingly.
|
||||
draw_info->mMaterialID = matid;
|
||||
LLVector4 specColor;
|
||||
specColor.mV[0] = facep->getTextureEntry()->getMaterialParams()->getSpecularLightColor().mV[0] * (1.f / 255.f);
|
||||
specColor.mV[1] = facep->getTextureEntry()->getMaterialParams()->getSpecularLightColor().mV[1] * (1.f / 255.f);
|
||||
specColor.mV[2] = facep->getTextureEntry()->getMaterialParams()->getSpecularLightColor().mV[2] * (1.f / 255.f);
|
||||
specColor.mV[3] = facep->getTextureEntry()->getMaterialParams()->getSpecularLightExponent() * (1.f / 255.f);
|
||||
draw_info->mSpecColor = specColor;
|
||||
draw_info->mEnvIntensity = facep->getTextureEntry()->getMaterialParams()->getEnvironmentIntensity() * (1.f / 255.f);
|
||||
draw_info->mAlphaMaskCutoff = facep->getTextureEntry()->getMaterialParams()->getAlphaMaskCutoff() * (1.f / 255.f);
|
||||
draw_info->mDiffuseAlphaMode = facep->getTextureEntry()->getMaterialParams()->getDiffuseAlphaMode();
|
||||
draw_info->mNormalMap = facep->getViewerObject()->getTENormalMap(facep->getTEOffset());
|
||||
draw_info->mSpecularMap = facep->getViewerObject()->getTESpecularMap(facep->getTEOffset());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if (facep->getTextureEntry()->getMaterialParams() != NULL)
|
||||
{
|
||||
// We have a material. Update our draw info accordingly.
|
||||
draw_info->mMaterialID = matid;
|
||||
LLVector4 specColor;
|
||||
specColor.mV[0] = facep->getTextureEntry()->getMaterialParams()->getSpecularLightColor().mV[0] * (1.f / 255.f);
|
||||
specColor.mV[1] = facep->getTextureEntry()->getMaterialParams()->getSpecularLightColor().mV[1] * (1.f / 255.f);
|
||||
specColor.mV[2] = facep->getTextureEntry()->getMaterialParams()->getSpecularLightColor().mV[2] * (1.f / 255.f);
|
||||
specColor.mV[3] = facep->getTextureEntry()->getMaterialParams()->getSpecularLightExponent() * (1.f / 255.f);
|
||||
draw_info->mSpecColor = specColor;
|
||||
draw_info->mEnvIntensity = facep->getTextureEntry()->getMaterialParams()->getEnvironmentIntensity() * (1.f / 255.f);
|
||||
draw_info->mAlphaMaskCutoff = facep->getTextureEntry()->getMaterialParams()->getAlphaMaskCutoff() * (1.f / 255.f);
|
||||
draw_info->mDiffuseAlphaMode = facep->getTextureEntry()->getMaterialParams()->getDiffuseAlphaMode();
|
||||
draw_info->mNormalMap = facep->getViewerObject()->getTENormalMap(facep->getTEOffset());
|
||||
draw_info->mSpecularMap = facep->getViewerObject()->getTESpecularMap(facep->getTEOffset());
|
||||
}
|
||||
} else {
|
||||
U8 shiny = facep->getTextureEntry()->getShiny();
|
||||
float alpha[4] =
|
||||
{
|
||||
|
|
@ -4662,7 +4656,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
|
|||
if (gPipeline.canUseWindLightShadersOnObjects()
|
||||
&& LLPipeline::sRenderBump)
|
||||
{
|
||||
if (LLPipeline::sRenderDeferred && te->getMaterialParams() != NULL)
|
||||
if (LLPipeline::sRenderDeferred && te->getMaterialParams().notNull())
|
||||
{
|
||||
LLMaterial* mat = te->getMaterialParams().get();
|
||||
if (mat->getNormalID().notNull())
|
||||
|
|
|
|||
|
|
@ -209,9 +209,11 @@
|
|||
layout="topleft"
|
||||
top_pad="4"
|
||||
left_delta="0"
|
||||
increment="1"
|
||||
name="maskcutoff"
|
||||
width="80" />
|
||||
<texture_picker
|
||||
allow_no_texture="true"
|
||||
can_apply_immediately="true"
|
||||
default_image_name="Default"
|
||||
fallback_image="locked_image.j2c"
|
||||
|
|
@ -322,6 +324,7 @@
|
|||
value="Use texture" />
|
||||
</combo_box>
|
||||
<texture_picker
|
||||
allow_no_texture="true"
|
||||
can_apply_immediately="true"
|
||||
default_image_name="Default"
|
||||
fallback_image="locked_image.j2c"
|
||||
|
|
|
|||
Loading…
Reference in New Issue