diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2023-10-27 23:41:13 +0300 | 
|---|---|---|
| committer | akleshchev <117672381+akleshchev@users.noreply.github.com> | 2023-11-06 18:29:42 +0200 | 
| commit | 596a63051ebabfec51e48be02bbec33ab962d915 (patch) | |
| tree | 97e564e2714d2d819b547c03d15049fbdf7d19d6 /indra/llprimitive | |
| parent | dc63dfc0dd6554f5f45b1d80bd4cb9258eefee95 (diff) | |
SL-20523 Local textures not updating on PBR Materials #2
Diffstat (limited to 'indra/llprimitive')
| -rw-r--r-- | indra/llprimitive/llgltfmaterial.cpp | 46 | ||||
| -rw-r--r-- | indra/llprimitive/llgltfmaterial.h | 12 | 
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;  }; | 
