SL-17653 Small change in material loading order

master
Andrey Kleshchev 2022-09-29 23:17:49 +03:00
parent 9346b45188
commit 332ddc67de
4 changed files with 36 additions and 55 deletions

View File

@ -267,7 +267,7 @@ bool LLLocalGLTFMaterial::loadMaterial(LLPointer<LLGLTFMaterial> mat, S32 index)
if (!material_in.name.empty())
{
mShortName = material_in.name;
mShortName = gDirUtilp->getBaseFileName(filename_lc, true) + " (" + material_in.name + ")";
}
// get base color texture

View File

@ -1152,40 +1152,6 @@ void LLMaterialEditor::onCancelMsgCallback(const LLSD& notification, const LLSD&
}
}
class LLMaterialFilePicker : public LLFilePickerThread
{
public:
LLMaterialFilePicker();
virtual void notify(const std::vector<std::string>& filenames);
static void textureLoadedCallback(BOOL success, LLViewerFetchedTexture* src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata);
};
LLMaterialFilePicker::LLMaterialFilePicker()
: LLFilePickerThread(LLFilePicker::FFLOAD_MATERIAL)
{
}
void LLMaterialFilePicker::notify(const std::vector<std::string>& filenames)
{
if (LLAppViewer::instance()->quitRequested())
{
return;
}
if (filenames.size() > 0)
{
// Todo: there is no point creating LLMaterialEditor before
// loading material, just creates unnessesary work if decode fails
LLMaterialEditor* me = (LLMaterialEditor*)LLFloaterReg::getInstance("material_editor");
if (me)
{
me->loadMaterialFromFile(filenames[0]);
}
}
}
static void pack_textures(
LLPointer<LLImageRaw>& base_color_img,
LLPointer<LLImageRaw>& normal_img,
@ -1233,10 +1199,6 @@ static void pack_textures(
}
}
void LLMaterialFilePicker::textureLoadedCallback(BOOL success, LLViewerFetchedTexture* src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata)
{
}
void LLMaterialEditor::loadMaterialFromFile(const std::string& filename, S32 index)
{
tinygltf::TinyGLTF loader;
@ -1266,22 +1228,31 @@ void LLMaterialEditor::loadMaterialFromFile(const std::string& filename, S32 ind
return;
}
if (model_in.materials.empty() || (index >= model_in.materials.size()))
if (model_in.materials.empty())
{
// materials are missing
LLNotificationsUtil::add("CannotUploadMaterial");
return;
}
if (index >= 0 && model_in.materials.size() <= index)
{
// material is missing
LLNotificationsUtil::add("CannotUploadMaterial");
return;
}
LLMaterialEditor* me = (LLMaterialEditor*)LLFloaterReg::getInstance("material_editor");
if (index >= 0)
{
// Prespecified material
loadMaterial(model_in, filename_lc, index);
me->loadMaterial(model_in, filename_lc, index);
}
else if (model_in.materials.size() == 1)
{
// Only one, just load it
loadMaterial(model_in, filename_lc, 0);
me->loadMaterial(model_in, filename_lc, 0);
}
else
{
@ -1302,12 +1273,12 @@ void LLMaterialEditor::loadMaterialFromFile(const std::string& filename, S32 ind
}
}
LLFloaterComboOptions::showUI(
[this, model_in, filename_lc](const std::string& option, S32 index)
[me, model_in, filename_lc](const std::string& option, S32 index)
{
loadMaterial(model_in, filename_lc, index);
me->loadMaterial(model_in, filename_lc, index);
},
getString("material_selection_title"),
getString("material_selection_text"),
me->getString("material_selection_title"),
me->getString("material_selection_text"),
material_list
);
}
@ -1315,7 +1286,7 @@ void LLMaterialEditor::loadMaterialFromFile(const std::string& filename, S32 ind
void LLMaterialEditor::loadMaterial(const tinygltf::Model &model_in, const std::string &filename_lc, S32 index)
{
if (model_in.materials.size() < index)
if (model_in.materials.size() <= index)
{
return;
}
@ -1410,7 +1381,9 @@ void LLMaterialEditor::loadMaterial(const tinygltf::Model &model_in, const std::
setFromGltfMetaData(filename_lc, model_in, index);
setHasUnsavedChanges(true);
openFloater();
setFocus(TRUE);
applyToSelection();
}
@ -1704,7 +1677,20 @@ void LLMaterialEditor::setFromGltfMetaData(const std::string& filename, const ti
void LLMaterialEditor::importMaterial()
{
(new LLMaterialFilePicker())->getFile();
LLFilePickerReplyThread::startPicker(
[](const std::vector<std::string>& filenames, LLFilePicker::ELoadFilter load_filter, LLFilePicker::ESaveFilter save_filter)
{
if (LLAppViewer::instance()->quitRequested())
{
return;
}
if (filenames.size() > 0)
{
LLMaterialEditor::loadMaterialFromFile(filenames[0], -1);
}
},
LLFilePicker::FFLOAD_MATERIAL,
true);
}
class LLRemderMaterialFunctor : public LLSelectedTEFunctor

View File

@ -103,7 +103,7 @@ public:
void loadAsset() override;
// @index if -1 and file contains more than one material,
// will promt to select specific one
void loadMaterialFromFile(const std::string& filename, S32 index = -1);
static void loadMaterialFromFile(const std::string& filename, S32 index = -1);
static void onLoadComplete(const LLUUID& asset_uuid, LLAssetType::EType type, void* user_data, S32 status, LLExtStat ext_status);

View File

@ -970,12 +970,7 @@ void LLFloaterTexturePicker::onBtnUpload(void* userdata)
LLLocalGLTFMaterialMgr::getInstance()->getFilenameAndIndex(tracking_id, filename, index);
if (!filename.empty())
{
LLMaterialEditor* me = (LLMaterialEditor*)LLFloaterReg::getInstance("material_editor");
if (me)
{
me->loadMaterialFromFile(filename, index);
me->setFocus(TRUE);
}
LLMaterialEditor::loadMaterialFromFile(filename, index);
}
}
else