diff options
Diffstat (limited to 'indra/newview/llpanelface.cpp')
| -rw-r--r-- | indra/newview/llpanelface.cpp | 50 |
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 |
