summaryrefslogtreecommitdiff
path: root/indra/llprimitive
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2023-10-27 23:41:13 +0300
committerakleshchev <117672381+akleshchev@users.noreply.github.com>2023-11-06 18:29:42 +0200
commit596a63051ebabfec51e48be02bbec33ab962d915 (patch)
tree97e564e2714d2d819b547c03d15049fbdf7d19d6 /indra/llprimitive
parentdc63dfc0dd6554f5f45b1d80bd4cb9258eefee95 (diff)
SL-20523 Local textures not updating on PBR Materials #2
Diffstat (limited to 'indra/llprimitive')
-rw-r--r--indra/llprimitive/llgltfmaterial.cpp46
-rw-r--r--indra/llprimitive/llgltfmaterial.h12
2 files changed, 54 insertions, 4 deletions
diff --git a/indra/llprimitive/llgltfmaterial.cpp b/indra/llprimitive/llgltfmaterial.cpp
index f42c11ee21..6afd83904f 100644
--- a/indra/llprimitive/llgltfmaterial.cpp
+++ b/indra/llprimitive/llgltfmaterial.cpp
@@ -89,6 +89,11 @@ LLGLTFMaterial& LLGLTFMaterial::operator=(const LLGLTFMaterial& rhs)
mOverrideDoubleSided = rhs.mOverrideDoubleSided;
mOverrideAlphaMode = rhs.mOverrideAlphaMode;
+ mLocalTextureIds = rhs.mLocalTextureIds;
+ mLocalTextureTrackingIds = rhs.mLocalTextureTrackingIds;
+
+ updateTextureTracking();
+
return *this;
}
@@ -765,3 +770,44 @@ LLUUID LLGLTFMaterial::getHash() const
return hash;
}
+void LLGLTFMaterial::addLocalTextureTracking(const LLUUID& tracking_id, const LLUUID& tex_id)
+{
+ mLocalTextureTrackingIds.insert(tracking_id);
+ mLocalTextureIds.insert(tex_id);
+}
+
+void LLGLTFMaterial::removeLocalTextureTracking(const LLUUID& tracking_id, const LLUUID& tex_id)
+{
+ mLocalTextureTrackingIds.erase(tracking_id);
+ mLocalTextureIds.erase(tex_id);
+}
+
+bool LLGLTFMaterial::replaceLocalTexture(const LLUUID& old_id, const LLUUID& new_id)
+{
+ bool res = false;
+
+ for (int i = 0; i < GLTF_TEXTURE_INFO_COUNT; ++i)
+ {
+ if (mTextureId[i] == old_id)
+ {
+ mTextureId[i] = new_id;
+ res = true;
+ }
+ }
+
+ mLocalTextureIds.erase(old_id);
+ if (res)
+ {
+ mLocalTextureIds.insert(new_id);
+ }
+
+ return res;
+}
+
+void LLGLTFMaterial::updateTextureTracking()
+{
+ if (mLocalTextureTrackingIds.size() > 0)
+ {
+ LL_WARNS() << "copied a material with local textures, but tracking not implemented" << LL_ENDL;
+ }
+}
diff --git a/indra/llprimitive/llgltfmaterial.h b/indra/llprimitive/llgltfmaterial.h
index 548e2c52f4..d45ada1561 100644
--- a/indra/llprimitive/llgltfmaterial.h
+++ b/indra/llprimitive/llgltfmaterial.h
@@ -223,8 +223,14 @@ public:
virtual void removeTextureEntry(LLTextureEntry* te) {};
// For local textures so that editor will know to track changes
- void setHasLocalTextures(bool val) { mHasLocalTextures = val; }
- bool hasLocalTextures() { return mHasLocalTextures; }
+ void addLocalTextureTracking(const LLUUID& tracking_id, const LLUUID &tex_id);
+ void removeLocalTextureTracking(const LLUUID& tracking_id, const LLUUID& tex_id);
+ bool hasLocalTextures() { return !mLocalTextureIds.empty(); }
+ virtual bool replaceLocalTexture(const LLUUID &old_id, const LLUUID& new_id);
+ virtual void updateTextureTracking();
+
+ uuid_set_t mLocalTextureIds;
+ uuid_set_t mLocalTextureTrackingIds;
protected:
static LLVector2 vec2FromJson(const std::map<std::string, tinygltf::Value>& object, const char* key, const LLVector2& default_value);
@@ -242,6 +248,4 @@ protected:
void writeToTexture(tinygltf::Model& model, T& texture_info, TextureInfo texture_info_id, bool force_write = false) const;
template<typename T>
static void writeToTexture(tinygltf::Model& model, T& texture_info, const LLUUID& texture_id, const TextureTransform& transform, bool force_write = false);
-
- bool mHasLocalTextures;
};