diff options
| author | RunitaiLinden <davep@lindenlab.com> | 2023-11-15 10:32:18 -0600 | 
|---|---|---|
| committer | RunitaiLinden <davep@lindenlab.com> | 2023-11-15 10:32:18 -0600 | 
| commit | 361efcb9267f2c91f88198081bbe6ac2264766fd (patch) | |
| tree | 1b91985a7aa1bd48137fd493d6ce9444a7afb21b /indra/llprimitive | |
| parent | 0edb7cad6bdeaf02cbd89d1f2dd38c47d6078c03 (diff) | |
| parent | 843866d193a0fb5ea882408c8862335ab9c5539b (diff) | |
Merge remote-tracking branch 'remotes/origin/DRTVWR-559' into DRTVWR-596
Diffstat (limited to 'indra/llprimitive')
| -rw-r--r-- | indra/llprimitive/llgltfmaterial.cpp | 52 | ||||
| -rw-r--r-- | indra/llprimitive/llgltfmaterial.h | 13 | 
2 files changed, 64 insertions, 1 deletions
| diff --git a/indra/llprimitive/llgltfmaterial.cpp b/indra/llprimitive/llgltfmaterial.cpp index 9945c230a2..237636bd0b 100644 --- a/indra/llprimitive/llgltfmaterial.cpp +++ b/indra/llprimitive/llgltfmaterial.cpp @@ -89,6 +89,10 @@ LLGLTFMaterial& LLGLTFMaterial::operator=(const LLGLTFMaterial& rhs)      mOverrideDoubleSided = rhs.mOverrideDoubleSided;      mOverrideAlphaMode = rhs.mOverrideAlphaMode; +    mTrackingIdToLocalTexture = rhs.mTrackingIdToLocalTexture; + +    updateTextureTracking(); +      return *this;  } @@ -601,6 +605,10 @@ void LLGLTFMaterial::applyOverride(const LLGLTFMaterial& override_mat)              mTextureTransform[i].mRotation = override_mat.mTextureTransform[i].mRotation;          }      } + +    mTrackingIdToLocalTexture.insert(override_mat.mTrackingIdToLocalTexture.begin(), override_mat.mTrackingIdToLocalTexture.begin()); + +    updateTextureTracking();  }  void LLGLTFMaterial::getOverrideLLSD(const LLGLTFMaterial& override_mat, LLSD& data) @@ -791,3 +799,47 @@ LLUUID LLGLTFMaterial::getHash() const      return hash;  } +void LLGLTFMaterial::addLocalTextureTracking(const LLUUID& tracking_id, const LLUUID& tex_id) +{ +    mTrackingIdToLocalTexture[tracking_id] = tex_id; +} + +void LLGLTFMaterial::removeLocalTextureTracking(const LLUUID& tracking_id) +{ +    mTrackingIdToLocalTexture.erase(tracking_id); +} + +bool LLGLTFMaterial::replaceLocalTexture(const LLUUID& tracking_id, 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; +        } +        else if (mTextureId[i] == new_id) +        { +            res = true; +        } +    } + +    if (res) +    { +        mTrackingIdToLocalTexture[tracking_id] = new_id; +    } +    else +    { +        mTrackingIdToLocalTexture.erase(tracking_id); +    } + +    return res; +} + +void LLGLTFMaterial::updateTextureTracking() +{ +    // setTEGLTFMaterialOverride is responsible for tracking +    // for material overrides editor will set it +} diff --git a/indra/llprimitive/llgltfmaterial.h b/indra/llprimitive/llgltfmaterial.h index 822a0aab22..02f62fb08c 100644 --- a/indra/llprimitive/llgltfmaterial.h +++ b/indra/llprimitive/llgltfmaterial.h @@ -196,7 +196,7 @@ public:      // write to given tinygltf::Model      void writeToModel(tinygltf::Model& model, S32 mat_index) const; -    void applyOverride(const LLGLTFMaterial& override_mat); +    virtual void applyOverride(const LLGLTFMaterial& override_mat);      // apply the given LLSD override data      void applyOverrideLLSD(const LLSD& data); @@ -222,6 +222,17 @@ public:      virtual void addTextureEntry(LLTextureEntry* te) {};      virtual void removeTextureEntry(LLTextureEntry* te) {}; +    // For local textures so that editor will know to track changes +    void addLocalTextureTracking(const LLUUID& tracking_id, const LLUUID &tex_id); +    void removeLocalTextureTracking(const LLUUID& tracking_id); +    bool hasLocalTextures() { return !mTrackingIdToLocalTexture.empty(); } +    virtual bool replaceLocalTexture(const LLUUID& tracking_id, const LLUUID &old_id, const LLUUID& new_id); +    virtual void updateTextureTracking(); + +    // These fields are local to viewer and are a part of local bitmap support +    typedef std::map<LLUUID, LLUUID> local_tex_map_t; +    local_tex_map_t mTrackingIdToLocalTexture; +  protected:      static LLVector2 vec2FromJson(const std::map<std::string, tinygltf::Value>& object, const char* key, const LLVector2& default_value);      static F32 floatFromJson(const std::map<std::string, tinygltf::Value>& object, const char* key, const F32 default_value); | 
