diff options
| author | Cosmic Linden <cosmic@lindenlab.com> | 2022-12-12 14:12:03 -0800 | 
|---|---|---|
| committer | Cosmic Linden <cosmic@lindenlab.com> | 2023-01-09 14:13:09 -0800 | 
| commit | 4fa77b6f728b6be3d2e7fc74dda97b835476f797 (patch) | |
| tree | a9e8b5504061c1fc83c289549c572af1483d2f59 | |
| parent | a710bf9067bd4c4217b9febc0ad277a1636ec882 (diff) | |
SL-18820: Update LLGLTFMaterial: Add setBaseMaterial() and equality comparison
| -rw-r--r-- | indra/llprimitive/llgltfmaterial.cpp | 33 | ||||
| -rw-r--r-- | indra/llprimitive/llgltfmaterial.h | 7 | 
2 files changed, 39 insertions, 1 deletions
diff --git a/indra/llprimitive/llgltfmaterial.cpp b/indra/llprimitive/llgltfmaterial.cpp index c98fd7d1ee..5442af33d0 100644 --- a/indra/llprimitive/llgltfmaterial.cpp +++ b/indra/llprimitive/llgltfmaterial.cpp @@ -98,6 +98,29 @@ LLGLTFMaterial& LLGLTFMaterial::operator=(const LLGLTFMaterial& rhs)      return *this;  } +bool LLGLTFMaterial::operator==(const LLGLTFMaterial& rhs) const +{ +    return mBaseColorId == rhs.mBaseColorId && +        mNormalId == rhs.mNormalId && +        mMetallicRoughnessId == rhs.mMetallicRoughnessId && +        mEmissiveId == rhs.mEmissiveId && + +        mBaseColor == rhs.mBaseColor && +        mEmissiveColor == rhs.mEmissiveColor && +         +        mMetallicFactor == rhs.mMetallicFactor && +        mRoughnessFactor == rhs.mRoughnessFactor && +        mAlphaCutoff == rhs.mAlphaCutoff && + +        mDoubleSided == rhs.mDoubleSided && +        mAlphaMode == rhs.mAlphaMode && + +        mTextureTransform == rhs.mTextureTransform && + +        mOverrideDoubleSided == rhs.mOverrideDoubleSided && +        mOverrideAlphaMode == rhs.mOverrideAlphaMode; +} +  bool LLGLTFMaterial::fromJSON(const std::string& json, std::string& warn_msg, std::string& error_msg)  {      LL_PROFILE_ZONE_SCOPED; @@ -365,6 +388,16 @@ void LLGLTFMaterial::writeToTexture(tinygltf::Model& model, T& texture_info, Tex      texture_info.extensions[GLTF_FILE_EXTENSION_TRANSFORM] = tinygltf::Value(transform_map);  } +bool LLGLTFMaterial::setBaseMaterial() +{ +    const LLGLTFMaterial old_override = *this; +    *this = sDefault; +    // Preserve the texture transforms +    mTextureTransform = old_override.mTextureTransform; +    return *this != old_override; +} + +  // static  void LLGLTFMaterial::hackOverrideUUID(LLUUID& id)  { diff --git a/indra/llprimitive/llgltfmaterial.h b/indra/llprimitive/llgltfmaterial.h index aa49a58f0c..7bfcd3bf66 100644 --- a/indra/llprimitive/llgltfmaterial.h +++ b/indra/llprimitive/llgltfmaterial.h @@ -71,6 +71,8 @@ public:      LLGLTFMaterial(const LLGLTFMaterial& rhs);      LLGLTFMaterial& operator=(const LLGLTFMaterial& rhs); +    bool operator==(const LLGLTFMaterial& rhs) const; +    bool operator!=(const LLGLTFMaterial& rhs) const { return !(*this == rhs); }      LLUUID mBaseColorId;      LLUUID mNormalId; @@ -101,7 +103,6 @@ public:          md5.finalize();          LLUUID id;          md5.raw_digest(id.mData); -        // *TODO: Hash the overrides          return id;      } @@ -181,6 +182,10 @@ public:      void applyOverride(const LLGLTFMaterial& override_mat); +    // For material overrides only. Clears most properties to +    // default/fallthrough, but preserves the transforms. +    bool setBaseMaterial(); +  private:      template<typename T>  | 
