summaryrefslogtreecommitdiff
path: root/indra/newview/llmaterialeditor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llmaterialeditor.cpp')
-rw-r--r--indra/newview/llmaterialeditor.cpp61
1 files changed, 38 insertions, 23 deletions
diff --git a/indra/newview/llmaterialeditor.cpp b/indra/newview/llmaterialeditor.cpp
index ce2b229de9..ffeb2db4df 100644
--- a/indra/newview/llmaterialeditor.cpp
+++ b/indra/newview/llmaterialeditor.cpp
@@ -63,6 +63,7 @@ const std::string MATERIAL_NORMAL_DEFAULT_NAME = "Normal";
const std::string MATERIAL_METALLIC_DEFAULT_NAME = "Metallic Roughness";
const std::string MATERIAL_EMISSIVE_DEFAULT_NAME = "Emissive";
+
class LLMaterialEditorCopiedCallback : public LLInventoryCallback
{
public:
@@ -165,6 +166,15 @@ void LLMaterialEditor::onClickCloseBtn(bool app_quitting)
}
}
+void LLMaterialEditor::onClose(bool app_quitting)
+{
+ // todo: will only revert whatever was recently selected,
+ // Later should work based of tools floater
+ LLSelectMgr::getInstance()->selectionRevertGLTFMaterials();
+
+ LLPreview::onClose(app_quitting);
+}
+
LLUUID LLMaterialEditor::getAlbedoId()
{
return mAlbedoTextureCtrl->getValue().asUUID();
@@ -1601,34 +1611,39 @@ void LLMaterialEditor::importMaterial()
(new LLMaterialFilePicker(this))->getFile();
}
-void LLMaterialEditor::applyToSelection()
+class LLRemderMaterialFunctor : public LLSelectedTEFunctor
{
- // Todo: fix this, this is a hack, not a proper live preview
- LLViewerObject* objectp = LLSelectMgr::instance().getSelection()->getFirstObject();
- if (objectp && objectp->getVolume() && objectp->permModify())
+public:
+ LLRemderMaterialFunctor(LLGLTFMaterial *mat, const LLUUID &id)
+ : mMat(mat), mMatId(id)
{
- LLGLTFMaterial* mat = new LLGLTFMaterial();
- getGLTFMaterial(mat);
- LLVOVolume* vobjp = (LLVOVolume*)objectp;
- for (int i = 0; i < vobjp->getNumTEs(); ++i)
- {
- // this is here just to prevent material from immediately resetting
- if (mAssetID.notNull())
- {
- vobjp->setRenderMaterialID(i, mAssetID);
- }
- else
- {
- const LLUUID placeholder("984e183e-7811-4b05-a502-d79c6f978a98");
- vobjp->setRenderMaterialID(i, placeholder);
- }
+ }
- vobjp->getTE(i)->setGLTFMaterial(mat);
- vobjp->updateTEMaterialTextures(i);
+ virtual bool apply(LLViewerObject* objectp, S32 te)
+ {
+ if (objectp && objectp->permModify() && objectp->getVolume())
+ {
+ LLVOVolume* vobjp = (LLVOVolume*)objectp;
+ vobjp->setRenderMaterialID(te, mMatId);
+ vobjp->getTE(te)->setGLTFMaterial(mMat);
+ vobjp->updateTEMaterialTextures(te);
}
-
- vobjp->markForUpdate(TRUE);
+ return true;
}
+private:
+ LLPointer<LLGLTFMaterial> mMat;
+ LLUUID mMatId;
+};
+
+void LLMaterialEditor::applyToSelection()
+{
+ LLPointer<LLGLTFMaterial> mat = new LLGLTFMaterial();
+ getGLTFMaterial(mat);
+ const LLUUID placeholder("984e183e-7811-4b05-a502-d79c6f978a98");
+ LLUUID asset_id = mAssetID.notNull() ? mAssetID : placeholder;
+ LLRemderMaterialFunctor mat_func(mat, asset_id);
+ LLObjectSelectionHandle selected_objects = LLSelectMgr::getInstance()->getSelection();
+ selected_objects->applyToTEs(&mat_func);
}
void LLMaterialEditor::getGLTFMaterial(LLGLTFMaterial* mat)