summaryrefslogtreecommitdiff
path: root/indra/newview/llmaterialeditor.h
diff options
context:
space:
mode:
authorAnsariel <ansariel.hiller@phoenixviewer.com>2024-05-22 19:04:52 +0200
committerAnsariel <ansariel.hiller@phoenixviewer.com>2024-05-22 19:04:52 +0200
commit1b67dd855c41f5a0cda7ec2a68d98071986ca703 (patch)
treeab243607f74f78200787bba5b9b88f07ef1b966f /indra/newview/llmaterialeditor.h
parent6d6eabca44d08d5b97bfe3e941d2b9687c2246ea (diff)
parente1623bb276f83a43ce7a197e388720c05bdefe61 (diff)
Merge remote-tracking branch 'origin/main' into DRTVWR-600-maint-A
# Conflicts: # autobuild.xml # indra/cmake/CMakeLists.txt # indra/cmake/GoogleMock.cmake # indra/llaudio/llaudioengine_fmodstudio.cpp # indra/llaudio/llaudioengine_fmodstudio.h # indra/llaudio/lllistener_fmodstudio.cpp # indra/llaudio/lllistener_fmodstudio.h # indra/llaudio/llstreamingaudio_fmodstudio.cpp # indra/llaudio/llstreamingaudio_fmodstudio.h # indra/llcharacter/llmultigesture.cpp # indra/llcharacter/llmultigesture.h # indra/llimage/llimage.cpp # indra/llimage/llimagepng.cpp # indra/llimage/llimageworker.cpp # indra/llimage/tests/llimageworker_test.cpp # indra/llmessage/tests/llmockhttpclient.h # indra/llprimitive/llgltfmaterial.h # indra/llrender/llfontfreetype.cpp # indra/llui/llcombobox.cpp # indra/llui/llfolderview.cpp # indra/llui/llfolderviewmodel.h # indra/llui/lllineeditor.cpp # indra/llui/lllineeditor.h # indra/llui/lltextbase.cpp # indra/llui/lltextbase.h # indra/llui/lltexteditor.cpp # indra/llui/lltextvalidate.cpp # indra/llui/lltextvalidate.h # indra/llui/lluictrl.h # indra/llui/llview.cpp # indra/llwindow/llwindowmacosx.cpp # indra/newview/app_settings/settings.xml # indra/newview/llappearancemgr.cpp # indra/newview/llappearancemgr.h # indra/newview/llavatarpropertiesprocessor.cpp # indra/newview/llavatarpropertiesprocessor.h # indra/newview/llbreadcrumbview.cpp # indra/newview/llbreadcrumbview.h # indra/newview/llbreastmotion.cpp # indra/newview/llbreastmotion.h # indra/newview/llconversationmodel.h # indra/newview/lldensityctrl.cpp # indra/newview/lldensityctrl.h # indra/newview/llface.inl # indra/newview/llfloatereditsky.cpp # indra/newview/llfloatereditwater.cpp # indra/newview/llfloateremojipicker.h # indra/newview/llfloaterimsessiontab.cpp # indra/newview/llfloaterprofiletexture.cpp # indra/newview/llfloaterprofiletexture.h # indra/newview/llgesturemgr.cpp # indra/newview/llgesturemgr.h # indra/newview/llimpanel.cpp # indra/newview/llimpanel.h # indra/newview/llinventorybridge.cpp # indra/newview/llinventorybridge.h # indra/newview/llinventoryclipboard.cpp # indra/newview/llinventoryclipboard.h # indra/newview/llinventoryfunctions.cpp # indra/newview/llinventoryfunctions.h # indra/newview/llinventorygallery.cpp # indra/newview/lllistbrowser.cpp # indra/newview/lllistbrowser.h # indra/newview/llpanelobjectinventory.cpp # indra/newview/llpanelprofile.cpp # indra/newview/llpanelprofile.h # indra/newview/llpreviewgesture.cpp # indra/newview/llsavedsettingsglue.cpp # indra/newview/llsavedsettingsglue.h # indra/newview/lltooldraganddrop.cpp # indra/newview/llurllineeditorctrl.cpp # indra/newview/llvectorperfoptions.cpp # indra/newview/llvectorperfoptions.h # indra/newview/llviewerparceloverlay.cpp # indra/newview/llviewertexlayer.cpp # indra/newview/llviewertexturelist.cpp # indra/newview/macmain.h # indra/test/test.cpp
Diffstat (limited to 'indra/newview/llmaterialeditor.h')
-rw-r--r--indra/newview/llmaterialeditor.h644
1 files changed, 322 insertions, 322 deletions
diff --git a/indra/newview/llmaterialeditor.h b/indra/newview/llmaterialeditor.h
index 782b47bcc0..88e79a3cf0 100644
--- a/indra/newview/llmaterialeditor.h
+++ b/indra/newview/llmaterialeditor.h
@@ -1,322 +1,322 @@
-/**
- * @file llmaterialeditor.h
- * @brief LLMaterialEditor class header file
- *
- * $LicenseInfo:firstyear=2022&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#pragma once
-
-#include "llpreview.h"
-#include "llvoinventorylistener.h"
-#include "llimagej2c.h"
-#include "llviewertexture.h"
-
-class LLButton;
-class LLColorSwatchCtrl;
-class LLComboBox;
-class LLGLTFMaterial;
-class LLLocalGLTFMaterial;
-class LLTextureCtrl;
-class LLTextBox;
-class LLViewerInventoryItem;
-
-namespace tinygltf
-{
- class Model;
-}
-
-// todo: Consider making into a notification or just merging with
-// presets. Layout is identical to camera/graphics presets so there
-// is no point in having multiple separate xmls and classes.
-class LLFloaterComboOptions : public LLFloater
-{
-public:
- typedef std::function<void(const std::string&, S32)> combo_callback;
- LLFloaterComboOptions();
-
- virtual ~LLFloaterComboOptions();
- /*virtual*/ bool postBuild();
-
- static LLFloaterComboOptions* showUI(
- combo_callback callback,
- const std::string &title,
- const std::string &description,
- const std::list<std::string> &options);
-
- static LLFloaterComboOptions* showUI(
- combo_callback callback,
- const std::string &title,
- const std::string &description,
- const std::string &ok_text,
- const std::string &cancel_text,
- const std::list<std::string> &options);
-
-private:
- void onConfirm();
- void onCancel();
-
-protected:
- combo_callback mCallback;
-
- LLButton *mConfirmButton;
- LLButton *mCancelButton;
- LLComboBox *mComboOptions;
- LLTextBox *mComboText;
-};
-
-class LLMaterialEditor : public LLPreview, public LLVOInventoryListener
-{ public:
- LLMaterialEditor(const LLSD& key);
- ~LLMaterialEditor();
-
- bool setFromGltfModel(const tinygltf::Model& model, S32 index, bool set_textures = false);
-
- void setFromGltfMetaData(const std::string& filename, const tinygltf::Model& model, S32 index);
-
- // open a file dialog and select a gltf/glb file for import
- static void importMaterial();
-
- // for live preview, apply current material to currently selected object
- void applyToSelection();
-
- // get a dump of the json representation of the current state of the editor UI as a material object
- void getGLTFMaterial(LLGLTFMaterial* mat);
-
- void loadAsset() override;
- // @index if -1 and file contains more than one material,
- // will promt to select specific one
- static void uploadMaterialFromModel(const std::string& filename, tinygltf::Model& model, S32 index);
- static void loadMaterialFromFile(const std::string& filename, S32 index = -1);
-
- void onSelectionChanged(); // live overrides selection changes
-
- static void updateLive();
- static void loadLive();
-
- static bool canModifyObjectsMaterial();
- static bool canSaveObjectsMaterial();
- static bool canClipboardObjectsMaterial();
- static void saveObjectsMaterialAs();
- static void onSaveObjectsMaterialAsMsgCallback(const LLSD& notification, const LLSD& response, const LLPermissions& permissions);
-
- static void onLoadComplete(const LLUUID& asset_uuid, LLAssetType::EType type, void* user_data, S32 status, LLExtStat ext_status);
-
- void inventoryChanged(LLViewerObject* object, LLInventoryObject::object_list_t* inventory, S32 serial_num, void* user_data) override;
-
- typedef std::function<void(LLUUID newAssetId, LLSD response)> upload_callback_f;
- void saveTexture(LLImageJ2C* img, const std::string& name, const LLUUID& asset_id, upload_callback_f cb);
- void setFailedToUploadTexture();
-
- // save textures to inventory if needed
- // returns amount of scheduled uploads
- S32 saveTextures();
- void clearTextures();
-
- void onClickSave();
-
- void getGLTFModel(tinygltf::Model& model);
-
- std::string getEncodedAsset();
-
- bool decodeAsset(const std::vector<char>& buffer);
-
- bool saveIfNeeded();
-
- static void finishInventoryUpload(LLUUID itemId, LLUUID newAssetId, LLUUID newItemId);
-
- static void finishTaskUpload(LLUUID itemId, LLUUID newAssetId, LLUUID taskId);
-
- static void finishSaveAs(
- const LLSD &oldKey,
- const LLUUID &newItemId,
- const std::string &buffer,
- bool has_unsaved_changes);
-
- void refreshFromInventory(const LLUUID& new_item_id = LLUUID::null);
-
- void onClickSaveAs();
- void onSaveAsMsgCallback(const LLSD& notification, const LLSD& response);
- void onClickCancel();
- void onCancelMsgCallback(const LLSD& notification, const LLSD& response);
-
- // llpreview
- void setObjectID(const LLUUID& object_id) override;
- void setAuxItem(const LLInventoryItem* item) override;
-
- // llpanel
- bool postBuild() override;
- void onClickCloseBtn(bool app_quitting = false) override;
-
- void onClose(bool app_quitting) override;
- void draw() override;
- void handleReshape(const LLRect& new_rect, bool by_user = false) override;
-
- LLUUID getBaseColorId();
- void setBaseColorId(const LLUUID& id);
- void setBaseColorUploadId(const LLUUID& id);
-
- LLColor4 getBaseColor();
-
- // sets both base color and transparency
- void setBaseColor(const LLColor4& color);
-
- F32 getTransparency();
- void setTransparency(F32 transparency);
-
- std::string getAlphaMode();
- void setAlphaMode(const std::string& alpha_mode);
-
- F32 getAlphaCutoff();
- void setAlphaCutoff(F32 alpha_cutoff);
-
- void setMaterialName(const std::string &name);
-
- LLUUID getMetallicRoughnessId();
- void setMetallicRoughnessId(const LLUUID& id);
- void setMetallicRoughnessUploadId(const LLUUID& id);
-
- F32 getMetalnessFactor();
- void setMetalnessFactor(F32 factor);
-
- F32 getRoughnessFactor();
- void setRoughnessFactor(F32 factor);
-
- LLUUID getEmissiveId();
- void setEmissiveId(const LLUUID& id);
- void setEmissiveUploadId(const LLUUID& id);
-
- LLColor4 getEmissiveColor();
- void setEmissiveColor(const LLColor4& color);
-
- LLUUID getNormalId();
- void setNormalId(const LLUUID& id);
- void setNormalUploadId(const LLUUID& id);
-
- bool getDoubleSided();
- void setDoubleSided(bool double_sided);
-
- void setCanSaveAs(bool value);
- void setCanSave(bool value);
- void setEnableEditing(bool can_modify);
-
- void subscribeToLocalTexture(S32 dirty_flag, const LLUUID& tracking_id);
- void replaceLocalTexture(const LLUUID& old_id, const LLUUID& new_id); // Local texture support
- void onCommitTexture(LLUICtrl* ctrl, const LLSD& data, S32 dirty_flag);
- void onCancelCtrl(LLUICtrl* ctrl, const LLSD& data, S32 dirty_flag);
- void onSelectCtrl(LLUICtrl* ctrl, const LLSD& data, S32 dirty_flag);
-
- // initialize the UI from a default GLTF material
- void loadDefaults();
-
- U32 getUnsavedChangesFlags() { return mUnsavedChanges; }
- U32 getRevertedChangesFlags() { return mRevertedChanges; }
- LLUUID getLocalTextureTrackingIdFromFlag(U32 flag);
- bool updateMaterialLocalSubscription(LLGLTFMaterial* mat);
-
- static bool capabilitiesAvailable();
-
-private:
- static void saveObjectsMaterialAs(const LLGLTFMaterial *render_material, const LLLocalGLTFMaterial *local_material, const LLPermissions& permissions, const LLUUID& object_id /* = LLUUID::null */, const LLUUID& item /* = LLUUID::null */);
-
- static bool updateInventoryItem(const std::string &buffer, const LLUUID &item_id, const LLUUID &task_id);
- static void createInventoryItem(const std::string &buffer, const std::string &name, const std::string &desc, const LLPermissions& permissions);
-
- void setFromGLTFMaterial(LLGLTFMaterial* mat);
- bool setFromSelection();
-
- void loadMaterial(const tinygltf::Model &model, const std::string & filename, S32 index, bool open_floater = true);
-
- friend class LLMaterialFilePicker;
-
- LLUUID mAssetID;
-
- LLTextureCtrl* mBaseColorTextureCtrl;
- LLTextureCtrl* mMetallicTextureCtrl;
- LLTextureCtrl* mEmissiveTextureCtrl;
- LLTextureCtrl* mNormalTextureCtrl;
- LLColorSwatchCtrl* mBaseColorCtrl;
- LLColorSwatchCtrl* mEmissiveColorCtrl;
-
- // 'Default' texture, unless it's null or from inventory is the one with the fee
- LLUUID mBaseColorTextureUploadId;
- LLUUID mMetallicTextureUploadId;
- LLUUID mEmissiveTextureUploadId;
- LLUUID mNormalTextureUploadId;
-
- // last known name of each texture
- std::string mBaseColorName;
- std::string mNormalName;
- std::string mMetallicRoughnessName;
- std::string mEmissiveName;
-
- // keep pointers to fetched textures or viewer will remove them
- // if user temporary selects something else with 'apply now'
- LLPointer<LLViewerFetchedTexture> mBaseColorFetched;
- LLPointer<LLViewerFetchedTexture> mNormalFetched;
- LLPointer<LLViewerFetchedTexture> mMetallicRoughnessFetched;
- LLPointer<LLViewerFetchedTexture> mEmissiveFetched;
-
- // J2C versions of packed buffers for uploading
- LLPointer<LLImageJ2C> mBaseColorJ2C;
- LLPointer<LLImageJ2C> mNormalJ2C;
- LLPointer<LLImageJ2C> mMetallicRoughnessJ2C;
- LLPointer<LLImageJ2C> mEmissiveJ2C;
-
- // utility function for converting image uri into a texture name
- const std::string getImageNameFromUri(std::string image_uri, const std::string texture_type);
-
- // utility function for building a description of the imported material
- // based on what we know about it.
- const std::string buildMaterialDescription();
-
- void resetUnsavedChanges();
- void markChangesUnsaved(U32 dirty_flag);
-
- U32 mUnsavedChanges; // flags to indicate individual changed parameters
- U32 mRevertedChanges; // flags to indicate individual reverted parameters
- S32 mUploadingTexturesCount;
- S32 mExpectedUploadCost;
- bool mUploadingTexturesFailure;
- std::string mMaterialNameShort;
- std::string mMaterialName;
-
- // if true, this instance is live instance editing overrides
- bool mIsOverride = false;
- bool mHasSelection = false;
- // local id, texture ids per face for object overrides
- // for "cancel" support
- static LLUUID mOverrideObjectId; // static to avoid searching for the floater
- static S32 mOverrideObjectTE;
- static bool mOverrideInProgress;
- static bool mSelectionNeedsUpdate;
- boost::signals2::connection mSelectionUpdateSlot;
-
- struct LocalTextureConnection
- {
- LLUUID mTrackingId;
- boost::signals2::connection mConnection;
- };
- typedef std::map<S32, LocalTextureConnection> mat_connection_map_t;
- mat_connection_map_t mTextureChangesUpdates;
-};
-
+/**
+ * @file llmaterialeditor.h
+ * @brief LLMaterialEditor class header file
+ *
+ * $LicenseInfo:firstyear=2022&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#pragma once
+
+#include "llpreview.h"
+#include "llvoinventorylistener.h"
+#include "llimagej2c.h"
+#include "llviewertexture.h"
+
+class LLButton;
+class LLColorSwatchCtrl;
+class LLComboBox;
+class LLGLTFMaterial;
+class LLLocalGLTFMaterial;
+class LLTextureCtrl;
+class LLTextBox;
+class LLViewerInventoryItem;
+
+namespace tinygltf
+{
+ class Model;
+}
+
+// todo: Consider making into a notification or just merging with
+// presets. Layout is identical to camera/graphics presets so there
+// is no point in having multiple separate xmls and classes.
+class LLFloaterComboOptions : public LLFloater
+{
+public:
+ typedef std::function<void(const std::string&, S32)> combo_callback;
+ LLFloaterComboOptions();
+
+ virtual ~LLFloaterComboOptions();
+ /*virtual*/ bool postBuild();
+
+ static LLFloaterComboOptions* showUI(
+ combo_callback callback,
+ const std::string &title,
+ const std::string &description,
+ const std::list<std::string> &options);
+
+ static LLFloaterComboOptions* showUI(
+ combo_callback callback,
+ const std::string &title,
+ const std::string &description,
+ const std::string &ok_text,
+ const std::string &cancel_text,
+ const std::list<std::string> &options);
+
+private:
+ void onConfirm();
+ void onCancel();
+
+protected:
+ combo_callback mCallback;
+
+ LLButton *mConfirmButton;
+ LLButton *mCancelButton;
+ LLComboBox *mComboOptions;
+ LLTextBox *mComboText;
+};
+
+class LLMaterialEditor : public LLPreview, public LLVOInventoryListener
+{ public:
+ LLMaterialEditor(const LLSD& key);
+ ~LLMaterialEditor();
+
+ bool setFromGltfModel(const tinygltf::Model& model, S32 index, bool set_textures = false);
+
+ void setFromGltfMetaData(const std::string& filename, const tinygltf::Model& model, S32 index);
+
+ // open a file dialog and select a gltf/glb file for import
+ static void importMaterial();
+
+ // for live preview, apply current material to currently selected object
+ void applyToSelection();
+
+ // get a dump of the json representation of the current state of the editor UI as a material object
+ void getGLTFMaterial(LLGLTFMaterial* mat);
+
+ void loadAsset() override;
+ // @index if -1 and file contains more than one material,
+ // will promt to select specific one
+ static void uploadMaterialFromModel(const std::string& filename, tinygltf::Model& model, S32 index);
+ static void loadMaterialFromFile(const std::string& filename, S32 index = -1);
+
+ void onSelectionChanged(); // live overrides selection changes
+
+ static void updateLive();
+ static void loadLive();
+
+ static bool canModifyObjectsMaterial();
+ static bool canSaveObjectsMaterial();
+ static bool canClipboardObjectsMaterial();
+ static void saveObjectsMaterialAs();
+ static void onSaveObjectsMaterialAsMsgCallback(const LLSD& notification, const LLSD& response, const LLPermissions& permissions);
+
+ static void onLoadComplete(const LLUUID& asset_uuid, LLAssetType::EType type, void* user_data, S32 status, LLExtStat ext_status);
+
+ void inventoryChanged(LLViewerObject* object, LLInventoryObject::object_list_t* inventory, S32 serial_num, void* user_data) override;
+
+ typedef std::function<void(LLUUID newAssetId, LLSD response)> upload_callback_f;
+ void saveTexture(LLImageJ2C* img, const std::string& name, const LLUUID& asset_id, upload_callback_f cb);
+ void setFailedToUploadTexture();
+
+ // save textures to inventory if needed
+ // returns amount of scheduled uploads
+ S32 saveTextures();
+ void clearTextures();
+
+ void onClickSave();
+
+ void getGLTFModel(tinygltf::Model& model);
+
+ std::string getEncodedAsset();
+
+ bool decodeAsset(const std::vector<char>& buffer);
+
+ bool saveIfNeeded();
+
+ static void finishInventoryUpload(LLUUID itemId, LLUUID newAssetId, LLUUID newItemId);
+
+ static void finishTaskUpload(LLUUID itemId, LLUUID newAssetId, LLUUID taskId);
+
+ static void finishSaveAs(
+ const LLSD &oldKey,
+ const LLUUID &newItemId,
+ const std::string &buffer,
+ bool has_unsaved_changes);
+
+ void refreshFromInventory(const LLUUID& new_item_id = LLUUID::null);
+
+ void onClickSaveAs();
+ void onSaveAsMsgCallback(const LLSD& notification, const LLSD& response);
+ void onClickCancel();
+ void onCancelMsgCallback(const LLSD& notification, const LLSD& response);
+
+ // llpreview
+ void setObjectID(const LLUUID& object_id) override;
+ void setAuxItem(const LLInventoryItem* item) override;
+
+ // llpanel
+ bool postBuild() override;
+ void onClickCloseBtn(bool app_quitting = false) override;
+
+ void onClose(bool app_quitting) override;
+ void draw() override;
+ void handleReshape(const LLRect& new_rect, bool by_user = false) override;
+
+ LLUUID getBaseColorId();
+ void setBaseColorId(const LLUUID& id);
+ void setBaseColorUploadId(const LLUUID& id);
+
+ LLColor4 getBaseColor();
+
+ // sets both base color and transparency
+ void setBaseColor(const LLColor4& color);
+
+ F32 getTransparency();
+ void setTransparency(F32 transparency);
+
+ std::string getAlphaMode();
+ void setAlphaMode(const std::string& alpha_mode);
+
+ F32 getAlphaCutoff();
+ void setAlphaCutoff(F32 alpha_cutoff);
+
+ void setMaterialName(const std::string &name);
+
+ LLUUID getMetallicRoughnessId();
+ void setMetallicRoughnessId(const LLUUID& id);
+ void setMetallicRoughnessUploadId(const LLUUID& id);
+
+ F32 getMetalnessFactor();
+ void setMetalnessFactor(F32 factor);
+
+ F32 getRoughnessFactor();
+ void setRoughnessFactor(F32 factor);
+
+ LLUUID getEmissiveId();
+ void setEmissiveId(const LLUUID& id);
+ void setEmissiveUploadId(const LLUUID& id);
+
+ LLColor4 getEmissiveColor();
+ void setEmissiveColor(const LLColor4& color);
+
+ LLUUID getNormalId();
+ void setNormalId(const LLUUID& id);
+ void setNormalUploadId(const LLUUID& id);
+
+ bool getDoubleSided();
+ void setDoubleSided(bool double_sided);
+
+ void setCanSaveAs(bool value);
+ void setCanSave(bool value);
+ void setEnableEditing(bool can_modify);
+
+ void subscribeToLocalTexture(S32 dirty_flag, const LLUUID& tracking_id);
+ void replaceLocalTexture(const LLUUID& old_id, const LLUUID& new_id); // Local texture support
+ void onCommitTexture(LLUICtrl* ctrl, const LLSD& data, S32 dirty_flag);
+ void onCancelCtrl(LLUICtrl* ctrl, const LLSD& data, S32 dirty_flag);
+ void onSelectCtrl(LLUICtrl* ctrl, const LLSD& data, S32 dirty_flag);
+
+ // initialize the UI from a default GLTF material
+ void loadDefaults();
+
+ U32 getUnsavedChangesFlags() { return mUnsavedChanges; }
+ U32 getRevertedChangesFlags() { return mRevertedChanges; }
+ LLUUID getLocalTextureTrackingIdFromFlag(U32 flag);
+ bool updateMaterialLocalSubscription(LLGLTFMaterial* mat);
+
+ static bool capabilitiesAvailable();
+
+private:
+ static void saveObjectsMaterialAs(const LLGLTFMaterial *render_material, const LLLocalGLTFMaterial *local_material, const LLPermissions& permissions, const LLUUID& object_id /* = LLUUID::null */, const LLUUID& item /* = LLUUID::null */);
+
+ static bool updateInventoryItem(const std::string &buffer, const LLUUID &item_id, const LLUUID &task_id);
+ static void createInventoryItem(const std::string &buffer, const std::string &name, const std::string &desc, const LLPermissions& permissions);
+
+ void setFromGLTFMaterial(LLGLTFMaterial* mat);
+ bool setFromSelection();
+
+ void loadMaterial(const tinygltf::Model &model, const std::string & filename, S32 index, bool open_floater = true);
+
+ friend class LLMaterialFilePicker;
+
+ LLUUID mAssetID;
+
+ LLTextureCtrl* mBaseColorTextureCtrl;
+ LLTextureCtrl* mMetallicTextureCtrl;
+ LLTextureCtrl* mEmissiveTextureCtrl;
+ LLTextureCtrl* mNormalTextureCtrl;
+ LLColorSwatchCtrl* mBaseColorCtrl;
+ LLColorSwatchCtrl* mEmissiveColorCtrl;
+
+ // 'Default' texture, unless it's null or from inventory is the one with the fee
+ LLUUID mBaseColorTextureUploadId;
+ LLUUID mMetallicTextureUploadId;
+ LLUUID mEmissiveTextureUploadId;
+ LLUUID mNormalTextureUploadId;
+
+ // last known name of each texture
+ std::string mBaseColorName;
+ std::string mNormalName;
+ std::string mMetallicRoughnessName;
+ std::string mEmissiveName;
+
+ // keep pointers to fetched textures or viewer will remove them
+ // if user temporary selects something else with 'apply now'
+ LLPointer<LLViewerFetchedTexture> mBaseColorFetched;
+ LLPointer<LLViewerFetchedTexture> mNormalFetched;
+ LLPointer<LLViewerFetchedTexture> mMetallicRoughnessFetched;
+ LLPointer<LLViewerFetchedTexture> mEmissiveFetched;
+
+ // J2C versions of packed buffers for uploading
+ LLPointer<LLImageJ2C> mBaseColorJ2C;
+ LLPointer<LLImageJ2C> mNormalJ2C;
+ LLPointer<LLImageJ2C> mMetallicRoughnessJ2C;
+ LLPointer<LLImageJ2C> mEmissiveJ2C;
+
+ // utility function for converting image uri into a texture name
+ const std::string getImageNameFromUri(std::string image_uri, const std::string texture_type);
+
+ // utility function for building a description of the imported material
+ // based on what we know about it.
+ const std::string buildMaterialDescription();
+
+ void resetUnsavedChanges();
+ void markChangesUnsaved(U32 dirty_flag);
+
+ U32 mUnsavedChanges; // flags to indicate individual changed parameters
+ U32 mRevertedChanges; // flags to indicate individual reverted parameters
+ S32 mUploadingTexturesCount;
+ S32 mExpectedUploadCost;
+ bool mUploadingTexturesFailure;
+ std::string mMaterialNameShort;
+ std::string mMaterialName;
+
+ // if true, this instance is live instance editing overrides
+ bool mIsOverride = false;
+ bool mHasSelection = false;
+ // local id, texture ids per face for object overrides
+ // for "cancel" support
+ static LLUUID mOverrideObjectId; // static to avoid searching for the floater
+ static S32 mOverrideObjectTE;
+ static bool mOverrideInProgress;
+ static bool mSelectionNeedsUpdate;
+ boost::signals2::connection mSelectionUpdateSlot;
+
+ struct LocalTextureConnection
+ {
+ LLUUID mTrackingId;
+ boost::signals2::connection mConnection;
+ };
+ typedef std::map<S32, LocalTextureConnection> mat_connection_map_t;
+ mat_connection_map_t mTextureChangesUpdates;
+};
+