diff options
-rwxr-xr-x | indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl | 12 | ||||
-rwxr-xr-x | indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl | 13 | ||||
-rwxr-xr-x | indra/newview/featuretable.txt | 2 | ||||
-rwxr-xr-x | indra/newview/llpanelface.cpp | 99 | ||||
-rwxr-xr-x | indra/newview/llvovolume.cpp | 5 |
5 files changed, 72 insertions, 59 deletions
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index 50b43f6a8d..84e83d4c8b 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -60,14 +60,10 @@ VARYING vec3 vary_ambient; VARYING vec3 vary_directional; VARYING vec3 vary_fragcoord; VARYING vec3 vary_position; -VARYING vec3 vary_pointlight_col; +VARYING vec4 vary_pointlight_col; VARYING vec2 vary_texcoord0; VARYING vec3 vary_norm; -#ifdef USE_VERTEX_COLOR -VARYING vec4 vertex_color; -#endif - uniform vec4 light_position[8]; uniform vec3 light_direction[8]; uniform vec3 light_attenuation[8]; @@ -216,7 +212,7 @@ void main() diff.rgb = pow(diff.rgb, vec3(2.2f, 2.2f, 2.2f)); #ifdef USE_VERTEX_COLOR - float vertex_color_alpha = vertex_color.a; + float vertex_color_alpha = vary_pointlight_col.a; #else float vertex_color_alpha = 1.0; #endif @@ -225,7 +221,7 @@ void main() vec3 l = light_position[0].xyz; vec3 dlight = calcDirectionalLight(normal, l) * 2.6; - dlight = dlight * vary_directional.rgb * vary_pointlight_col; + dlight = dlight * vary_directional.rgb * vary_pointlight_col.rgb; #if HAS_SHADOW vec4 col = vec4(vary_ambient + dlight * shadow, vertex_color_alpha); @@ -250,7 +246,7 @@ void main() LIGHT_LOOP(6) LIGHT_LOOP(7) - color.rgb += diff.rgb * vary_pointlight_col * col.rgb; + color.rgb += diff.rgb * vary_pointlight_col.rgb * col.rgb; frag_color = color; } diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl index 77d02b36ff..6ed2ad5192 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl @@ -69,11 +69,8 @@ VARYING vec3 vary_ambient; VARYING vec3 vary_directional; VARYING vec3 vary_fragcoord; VARYING vec3 vary_position; -VARYING vec3 vary_pointlight_col; +VARYING vec4 vary_pointlight_col; -#ifdef USE_VERTEX_COLOR -VARYING vec4 vertex_color; -#endif VARYING vec2 vary_texcoord0; @@ -186,9 +183,9 @@ void main() - vary_pointlight_col = diff; + vary_pointlight_col.rgb = diff; + vary_pointlight_col.a = diffuse_color.a; - col.rgb = vec3(0,0,0); // Add windlight lights @@ -200,9 +197,7 @@ void main() col.rgb = col.rgb*diff.rgb; -#ifdef USE_VERTEX_COLOR - vertex_color = col; -#endif + #ifdef HAS_SKIN vary_fragcoord.xyz = frag_pos.xyz + vec3(0,0,near_clip); diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index 4030324ecb..cd7825ba9f 100755 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -441,7 +441,7 @@ list OpenGLPre15 RenderVBOEnable 1 0 list OpenGLPre30 -RenderDeferred 0 0 +RenderDeferred 1 0 RenderMaxTextureIndex 1 1 list Intel diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 302a4294e4..1d99e9d162 100755 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -657,6 +657,42 @@ void LLPanelFace::updateUI() LLUUID normmap_id; LLUUID specmap_id; + // Color swatch + { + getChildView("color label")->setEnabled(editable); + } + LLColorSwatchCtrl* mColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch"); + LLColor4 color = LLColor4::white; + if(mColorSwatch) + { + struct f7 : public LLSelectedTEGetFunctor<LLColor4> + { + LLColor4 get(LLViewerObject* object, S32 face) + { + return object->getTE(face)->getColor(); + } + } func; + identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, color ); + + mColorSwatch->setOriginal(color); + mColorSwatch->set(color, TRUE); + + mColorSwatch->setValid(editable); + mColorSwatch->setEnabled( editable ); + mColorSwatch->setCanApplyImmediately( editable ); + } + + // Color transparency + { + getChildView("color trans")->setEnabled(editable); + } + + F32 transparency = (1.f - color.mV[VALPHA]) * 100.f; + { + getChild<LLUICtrl>("ColorTrans")->setValue(editable ? transparency : 0); + getChildView("ColorTrans")->setEnabled(editable); + } + // Texture { struct f1 : public LLSelectedTEGetFunctor<LLUUID> @@ -792,10 +828,17 @@ void LLPanelFace::updateUI() if (combobox_alphamode) { + + if (transparency > 0.f) + { //it is invalid to have any alpha mode other than blend if transparency is greater than zero ... + alpha_mode = LLMaterial::DIFFUSE_ALPHA_MODE_BLEND; + } + if (!mIsAlpha) - { + { // ... unless there is no alpha channel in the texture, in which case alpha mode MUST ebe none alpha_mode = LLMaterial::DIFFUSE_ALPHA_MODE_NONE; } + combobox_alphamode->selectNthItem(alpha_mode); } @@ -814,7 +857,7 @@ void LLPanelFace::updateUI() texture_ctrl->setTentative( FALSE ); texture_ctrl->setEnabled( editable ); texture_ctrl->setImageAssetID( id ); - getChildView("combobox alphamode")->setEnabled(editable && mIsAlpha); + getChildView("combobox alphamode")->setEnabled(editable && mIsAlpha && transparency <= 0.f); getChildView("label alphamode")->setEnabled(editable && mIsAlpha); getChildView("maskcutoff")->setEnabled(editable && mIsAlpha); getChildView("label maskcutoff")->setEnabled(editable && mIsAlpha); @@ -836,7 +879,7 @@ void LLPanelFace::updateUI() texture_ctrl->setTentative( TRUE ); texture_ctrl->setEnabled( editable ); texture_ctrl->setImageAssetID( id ); - getChildView("combobox alphamode")->setEnabled(editable && mIsAlpha); + getChildView("combobox alphamode")->setEnabled(editable && mIsAlpha && transparency <= 0.f); getChildView("label alphamode")->setEnabled(editable && mIsAlpha); getChildView("maskcutoff")->setEnabled(editable && mIsAlpha); getChildView("label maskcutoff")->setEnabled(editable && mIsAlpha); @@ -1281,42 +1324,6 @@ void LLPanelFace::updateUI() getChildView("bumpyRot")->setEnabled(editable && normmap_id.notNull()); } - // Color swatch - { - getChildView("color label")->setEnabled(editable); - } - LLColorSwatchCtrl* mColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch"); - LLColor4 color = LLColor4::white; - if(mColorSwatch) - { - struct f7 : public LLSelectedTEGetFunctor<LLColor4> - { - LLColor4 get(LLViewerObject* object, S32 face) - { - return object->getTE(face)->getColor(); - } - } func; - identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, color ); - - mColorSwatch->setOriginal(color); - mColorSwatch->set(color, TRUE); - - mColorSwatch->setValid(editable); - mColorSwatch->setEnabled( editable ); - mColorSwatch->setCanApplyImmediately( editable ); - } - - // Color transparency - { - getChildView("color trans")->setEnabled(editable); - } - - F32 transparency = (1.f - color.mV[VALPHA]) * 100.f; - { - getChild<LLUICtrl>("ColorTrans")->setValue(editable ? transparency : 0); - getChildView("ColorTrans")->setEnabled(editable); - } - { F32 glow = 0.f; struct f8 : public LLSelectedTEGetFunctor<F32> @@ -1586,7 +1593,19 @@ void LLPanelFace::updateUI() childGetSelectionInterface("combobox alphamode"); if (combobox_alphamode) { - combobox_alphamode->selectNthItem(material->getDiffuseAlphaMode()); + U32 alpha_mode = material->getDiffuseAlphaMode(); + + if (transparency > 0.f) + { //it is invalid to have any alpha mode other than blend if transparency is greater than zero ... + alpha_mode = LLMaterial::DIFFUSE_ALPHA_MODE_BLEND; + } + + if (!mIsAlpha) + { // ... unless there is no alpha channel in the texture, in which case alpha mode MUST ebe none + alpha_mode = LLMaterial::DIFFUSE_ALPHA_MODE_NONE; + } + + combobox_alphamode->selectNthItem(alpha_mode); } else { diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index a9b540507f..c3c6747e99 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1976,8 +1976,11 @@ S32 LLVOVolume::setTEGlow(const U8 te, const F32 glow) void LLVOVolume::setTEMaterialParamsCallback(const LLMaterialID &pMaterialID, const LLMaterialPtr pMaterialParams, U32 te) { LL_DEBUGS("MaterialTEs") << "materialid " << pMaterialID.asString() << " to TE " << te << LL_ENDL; + if (te >= getNumTEs()) + return; + LLTextureEntry* texture_entry = getTE(te); - if (texture_entry && (texture_entry->getMaterialID().isNull() || (texture_entry->getMaterialID() == pMaterialID))) + if (texture_entry) { setTEMaterialParams(te, pMaterialParams); } |