summaryrefslogtreecommitdiff
path: root/indra/newview/llviewerobject.cpp
diff options
context:
space:
mode:
authorDave Parks <davep@lindenlab.com>2022-06-29 21:42:44 -0500
committerDave Parks <davep@lindenlab.com>2022-06-29 21:42:44 -0500
commit6f6df8ed71702f0ee8d21a2b583818ae360dd093 (patch)
tree70545286267ecc4419b7d1dfe463c6d08490775a /indra/newview/llviewerobject.cpp
parent56ae3e0a083aefcbd6d7c955bb2c7e9e58000a4b (diff)
SL-17685 Drag and drop material support
Diffstat (limited to 'indra/newview/llviewerobject.cpp')
-rw-r--r--indra/newview/llviewerobject.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 232e51896e..753fb014c9 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -107,6 +107,7 @@
#include "llcleanup.h"
#include "llcallstack.h"
#include "llmeshrepository.h"
+#include "llgltfmateriallist.h"
#include "llgl.h"
//#define DEBUG_UPDATE_TYPE
@@ -4906,6 +4907,18 @@ void LLViewerObject::updateTEMaterialTextures(U8 te)
};
LLGLTFMaterial* mat = getTE(te)->getGLTFMaterial();
+ LLUUID mat_id = getRenderMaterialID(te);
+ if (mat == nullptr && mat_id.notNull())
+ {
+ mat = gGLTFMaterialList.getMaterial(mat_id);
+ getTE(te)->setGLTFMaterial(mat);
+ }
+ else if (mat_id.isNull() && mat != nullptr)
+ {
+ mat = nullptr;
+ getTE(te)->setGLTFMaterial(nullptr);
+ }
+
if (mat != nullptr)
{
mGLTFAlbedoMaps[te] = fetch_texture(mat->mAlbedoId);
@@ -4913,6 +4926,14 @@ void LLViewerObject::updateTEMaterialTextures(U8 te)
mGLTFMetallicRoughnessMaps[te] = fetch_texture(mat->mMetallicRoughnessId);
mGLTFEmissiveMaps[te] = fetch_texture(mat->mEmissiveId);
}
+ else
+ {
+ mGLTFAlbedoMaps[te] = nullptr;
+ mGLTFNormalMaps[te] = nullptr;
+ mGLTFMetallicRoughnessMaps[te] = nullptr;
+ mGLTFEmissiveMaps[te] = nullptr;
+ }
+
}
void LLViewerObject::refreshBakeTexture()
@@ -7028,8 +7049,16 @@ void LLViewerObject::setRenderMaterialID(U8 te, const LLUUID& id)
{
if (id.notNull())
{
+ getTE(te)->setGLTFMaterial(gGLTFMaterialList.getMaterial(id));
setHasRenderMaterialParams(true);
}
+ else
+ {
+ getTE(te)->setGLTFMaterial(nullptr);
+ }
+
+ faceMappingChanged();
+ gPipeline.markTextured(mDrawable);
LLRenderMaterialParams* param_block = (LLRenderMaterialParams*)getParameterEntry(LLNetworkData::PARAMS_RENDER_MATERIAL);
if (param_block)