summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llpanelface.cpp')
-rw-r--r--indra/newview/llpanelface.cpp50
1 files changed, 42 insertions, 8 deletions
diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp
index e8cb53d263..534d7bee48 100644
--- a/indra/newview/llpanelface.cpp
+++ b/indra/newview/llpanelface.cpp
@@ -854,24 +854,56 @@ struct LLPanelFaceSetAlignedTEFunctor : public LLSelectedTEFunctor
}
// Also align GLTF material if any
- S32 gltf_info_index = 0; // base texture
+ LLGLTFMaterial::TextureInfo gltf_info_index = mPanel->getPBRTextureInfo();
LLVector2 gltf_offset, gltf_scale;
F32 gltf_rot;
- if (facep->calcAlignedPlanarGLTF(mCenterFace, &gltf_offset, &gltf_scale, &gltf_rot, gltf_info_index))
+
+ if (gltf_info_index == LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT)
{
+ // "Complete material" - update all texture transforms
LLGLTFMaterial new_override;
const LLTextureEntry* tep = object->getTE(te);
if (tep && tep->getGLTFMaterialOverride())
{
new_override = *tep->getGLTFMaterialOverride();
}
+ bool any_changed = false;
+
+ for (U32 i = 0; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
+ {
+ if (facep->calcAlignedPlanarGLTF(mCenterFace, &gltf_offset, &gltf_scale, &gltf_rot, i))
+ {
+ LLGLTFMaterial::TextureTransform& transform = new_override.mTextureTransform[i];
+ transform.mOffset.set(gltf_offset.mV[0], gltf_offset.mV[1]);
+ transform.mScale.set(gltf_scale.mV[0], gltf_scale.mV[1]);
+ transform.mRotation = gltf_rot;
+ any_changed = true;
+ }
+ }
+
+ if (any_changed)
+ {
+ LLGLTFMaterialList::queueModify(object, te, &new_override);
+ }
+ }
+ else
+ {
+ if (facep->calcAlignedPlanarGLTF(mCenterFace, &gltf_offset, &gltf_scale, &gltf_rot, gltf_info_index))
+ {
+ LLGLTFMaterial new_override;
+ const LLTextureEntry* tep = object->getTE(te);
+ if (tep && tep->getGLTFMaterialOverride())
+ {
+ new_override = *tep->getGLTFMaterialOverride();
+ }
- LLGLTFMaterial::TextureTransform& transform = new_override.mTextureTransform[gltf_info_index];
- transform.mOffset.set(gltf_offset.mV[0], gltf_offset.mV[1]);
- transform.mScale.set(gltf_scale.mV[0], gltf_scale.mV[1]);
- transform.mRotation = gltf_rot;
+ LLGLTFMaterial::TextureTransform& transform = new_override.mTextureTransform[gltf_info_index];
+ transform.mOffset.set(gltf_offset.mV[0], gltf_offset.mV[1]);
+ transform.mScale.set(gltf_scale.mV[0], gltf_scale.mV[1]);
+ transform.mRotation = gltf_rot;
- LLGLTFMaterialList::queueModify(object, te, &new_override);
+ LLGLTFMaterialList::queueModify(object, te, &new_override);
+ }
}
}
if (!set_aligned)
@@ -1073,6 +1105,9 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
// only turn on auto-adjust button if there is a media renderer and the media is loaded
mBtnAlign->setEnabled(editable);
+ // enable if needed before changing selection
+ mComboMatMedia->setEnabledByValue("Materials", !has_pbr_material);
+
if (mComboMatMedia->getCurrentIndex() < MATMEDIA_MATERIAL)
{
// When selecting an object with a pbr and UI combo is not set,
@@ -1677,7 +1712,6 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
mCheckFullbright->setValue((S32)(fullbright_flag != 0));
mCheckFullbright->setEnabled(editable && !has_pbr_material);
mCheckFullbright->setTentative(!identical_fullbright);
- mComboMatMedia->setEnabledByValue("Materials", !has_pbr_material);
}
// Repeats per meter