summaryrefslogtreecommitdiff
path: root/indra/llprimitive/llgltfmaterial.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llprimitive/llgltfmaterial.h')
-rw-r--r--indra/llprimitive/llgltfmaterial.h67
1 files changed, 48 insertions, 19 deletions
diff --git a/indra/llprimitive/llgltfmaterial.h b/indra/llprimitive/llgltfmaterial.h
index f62cab1a61..90f1ecfa8f 100644
--- a/indra/llprimitive/llgltfmaterial.h
+++ b/indra/llprimitive/llgltfmaterial.h
@@ -81,7 +81,7 @@ public:
ALPHA_MODE_MASK
};
- LLGLTFMaterial() {}
+ LLGLTFMaterial();
LLGLTFMaterial(const LLGLTFMaterial& rhs);
LLGLTFMaterial& operator=(const LLGLTFMaterial& rhs);
@@ -110,25 +110,18 @@ public:
static const char* const GLTF_FILE_EXTENSION_TRANSFORM_ROTATION;
static const LLUUID GLTF_OVERRIDE_NULL_UUID;
- std::array<LLUUID, GLTF_TEXTURE_INFO_COUNT> mTextureId;
- std::array<TextureTransform, GLTF_TEXTURE_INFO_COUNT> mTextureTransform;
-
- // NOTE: initialize values to defaults according to the GLTF spec
- // NOTE: these values should be in linear color space
- LLColor4 mBaseColor = LLColor4(1, 1, 1, 1);
- LLColor3 mEmissiveColor = LLColor3(0, 0, 0);
-
- F32 mMetallicFactor = 1.f;
- F32 mRoughnessFactor = 1.f;
- F32 mAlphaCutoff = 0.5f;
-
- AlphaMode mAlphaMode = ALPHA_MODE_OPAQUE;
-
+ // *TODO: If/when we implement additional GLTF extensions, they may not be
+ // compatible with our GLTF terrain implementation. We may want to disallow
+ // materials with some features from being set on terrain, if their
+ // implementation on terrain is not compliant with the spec:
+ // - KHR_materials_transmission: Probably OK?
+ // - KHR_materials_ior: Probably OK?
+ // - KHR_materials_volume: Likely incompatible, as our terrain
+ // heightmaps cannot currently be described as finite enclosed
+ // volumes.
+ // See also LLPanelRegionTerrainInfo::validateMaterials
bool mDoubleSided = false;
- // override specific flags for state that can't use off-by-epsilon or UUID hack
- bool mOverrideDoubleSided = false;
- bool mOverrideAlphaMode = false;
// These fields are local to viewer and are a part of local bitmap support
typedef std::map<LLUUID, LLUUID> local_tex_map_t;
@@ -235,7 +228,6 @@ public:
bool hasLocalTextures() { return !mTrackingIdToLocalTexture.empty(); }
virtual bool replaceLocalTexture(const LLUUID& tracking_id, const LLUUID &old_id, const LLUUID& new_id);
virtual void updateTextureTracking();
-
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);
@@ -252,4 +244,41 @@ 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);
+
+ // Used to update the digest of the mTrackingIdToLocalTexture map each time
+ // it is changed; this way, that digest can be used by the fast getHash()
+ // method intsead of having to hash all individual keys and values. HB
+ void updateLocalTexDataDigest();
+
+public:
+ // These fields are local to viewer and are a part of local bitmap support
+ // IMPORTANT: do not move this member down (and do not move
+ // mLocalTexDataDigest either): the getHash() method does rely on the
+ // current ordering. HB
+ typedef std::map<LLUUID, LLUUID> local_tex_map_t;
+ local_tex_map_t mTrackingIdToLocalTexture;
+
+ // Used to store a digest of mTrackingIdToLocalTexture when the latter is
+ // not empty, or zero otherwise. HB
+ U64 mLocalTexDataDigest;
+
+ std::array<LLUUID, GLTF_TEXTURE_INFO_COUNT> mTextureId;
+ std::array<TextureTransform, GLTF_TEXTURE_INFO_COUNT> mTextureTransform;
+
+ // NOTE: initialize values to defaults according to the GLTF spec
+ // NOTE: these values should be in linear color space
+ LLColor4 mBaseColor;
+ LLColor3 mEmissiveColor;
+
+ F32 mMetallicFactor;
+ F32 mRoughnessFactor;
+ F32 mAlphaCutoff;
+
+ AlphaMode mAlphaMode;
+ bool mDoubleSided = false;
+
+ // Override specific flags for state that can't use off-by-epsilon or UUID
+ // hack
+ bool mOverrideDoubleSided = false;
+ bool mOverrideAlphaMode = false;
};