diff options
author | Dave Parks <davep@lindenlab.com> | 2022-10-21 18:05:19 -0500 |
---|---|---|
committer | Dave Parks <davep@lindenlab.com> | 2022-10-21 18:05:19 -0500 |
commit | 0cd7c3842119f1801872b4db05e17544b4eb7158 (patch) | |
tree | a79c8ec7c24be3263c05bf0758da758a4518924b | |
parent | 61967623baaa8988f4f8b48043f79be29452ca80 (diff) |
SL-18105 Hook up live material editor to current selection set and implicitly open build floater when editing a PBR material.
-rw-r--r-- | indra/newview/llmaterialeditor.cpp | 29 | ||||
-rw-r--r-- | indra/newview/llmaterialeditor.h | 6 | ||||
-rw-r--r-- | indra/newview/llpanelface.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llselectmgr.cpp | 1 | ||||
-rw-r--r-- | indra/newview/llviewermenu.cpp | 5 |
5 files changed, 32 insertions, 11 deletions
diff --git a/indra/newview/llmaterialeditor.cpp b/indra/newview/llmaterialeditor.cpp index 58894dbd69..86efdfcd06 100644 --- a/indra/newview/llmaterialeditor.cpp +++ b/indra/newview/llmaterialeditor.cpp @@ -1401,15 +1401,14 @@ void LLMaterialEditor::loadMaterialFromFile(const std::string& filename, S32 ind } } -void LLMaterialEditor::loadLiveMaterial(LLUUID &asset_id) +void LLMaterialEditor::loadLiveMaterialEditor() { LLMaterialEditor* me = (LLMaterialEditor*)LLFloaterReg::getInstance("material_editor", LLSD(LIVE_MATERIAL_EDITOR_KEY)); + me->mIsOverride = true; me->setTitle(me->getString("material_override_title")); - me->setAssetId(asset_id); - if (asset_id.notNull()) - { - me->setFromGLTFMaterial(gGLTFMaterialList.getMaterial(asset_id)); - } + me->childSetVisible("save", false); + me->childSetVisible("save_as", false); + me->setFromSelection(); me->openFloater(); me->setFocus(TRUE); } @@ -1904,7 +1903,7 @@ private: void LLMaterialEditor::applyToSelection() { - if (!mKey.isUUID() || mKey.asUUID() != LIVE_MATERIAL_EDITOR_KEY) + if (!mIsOverride) { // Only apply if working with 'live' materials // Might need a better way to distinguish 'live' mode. @@ -1974,6 +1973,22 @@ void LLMaterialEditor::setFromGLTFMaterial(LLGLTFMaterial* mat) setAlphaCutoff(mat->mAlphaCutoff); } +void LLMaterialEditor::setFromSelection() +{ + struct LLSelectedTEGetGLTFRenderMaterial : public LLSelectedTEGetFunctor<LLPointer<LLGLTFMaterial> > + { + LLPointer<LLGLTFMaterial> get(LLViewerObject* object, S32 te_index) + { + return object->getTE(te_index)->getGLTFRenderMaterial(); // present user with combined override + asset + } + } func; + + LLPointer<LLGLTFMaterial> mat; + LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue(&func, mat); + setFromGLTFMaterial(mat); +} + + void LLMaterialEditor::loadAsset() { // derived from LLPreviewNotecard::loadAsset diff --git a/indra/newview/llmaterialeditor.h b/indra/newview/llmaterialeditor.h index 3b2648cba5..0aaf391431 100644 --- a/indra/newview/llmaterialeditor.h +++ b/indra/newview/llmaterialeditor.h @@ -103,7 +103,7 @@ public: // will promt to select specific one static void loadMaterialFromFile(const std::string& filename, S32 index = -1); - static void loadLiveMaterial(LLUUID &asset_id); + static void loadLiveMaterialEditor(); static void loadFromGLTFMaterial(LLUUID &asset_id); @@ -222,6 +222,7 @@ public: private: void setFromGLTFMaterial(LLGLTFMaterial* mat); + void setFromSelection(); void loadMaterial(const tinygltf::Model &model, const std::string &filename_lc, S32 index); @@ -271,5 +272,8 @@ private: S32 mExpectedUploadCost; std::string mMaterialNameShort; std::string mMaterialName; + + // if true, this instance is live instance editing overrides + bool mIsOverride = false; }; diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index f4b75c9154..f8e786fc97 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -4588,7 +4588,7 @@ void LLPanelFace::onPbrStartEditing() LL_DEBUGS() << "loading material live editor with asset " << material_id << LL_ENDL; - LLMaterialEditor::loadLiveMaterial(material_id); + LLMaterialEditor::loadLiveMaterialEditor(); } bool LLPanelFace::isIdenticalPlanarTexgen() diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index d103141669..2475900d0e 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -8576,6 +8576,7 @@ DEF_DUMMY_CHECK_FUNCTOR(int) DEF_DUMMY_CHECK_FUNCTOR(LLColor4) DEF_DUMMY_CHECK_FUNCTOR(LLMediaEntry) DEF_DUMMY_CHECK_FUNCTOR(LLPointer<LLMaterial>) +DEF_DUMMY_CHECK_FUNCTOR(LLPointer<LLGLTFMaterial>) DEF_DUMMY_CHECK_FUNCTOR(std::string) DEF_DUMMY_CHECK_FUNCTOR(std::vector<std::string>) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 5cb63426a8..47b355e554 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2970,7 +2970,7 @@ void load_life_gltf_material(bool copy) } else { - LLMaterialEditor::loadLiveMaterial(mat_id); + LLMaterialEditor::loadLiveMaterialEditor(); } LLViewerJoystick::getInstance()->moveObjects(true); @@ -2979,7 +2979,8 @@ void load_life_gltf_material(bool copy) void handle_object_edit_gltf_material() { - load_life_gltf_material(false); + handle_object_edit(); + LLMaterialEditor::loadLiveMaterialEditor(); } void handle_object_save_gltf_material() |