Skip to content
Snippets Groups Projects
Commit 2727eb20 authored by Sabrina Shanman's avatar Sabrina Shanman
Browse files

Merged in SL-18411 (pull request #1166)

SL-18411: Copy over LLGLTFMaterial changes (most notably various getters/setters and texture transform stub)

Approved-by: Dave Parks
parents d1b21bb9 7231e0b3
No related branches found
No related tags found
2 merge requests!3Update to main branch,!2Rebase onto current main branch
......@@ -37,7 +37,7 @@ LLGLTFMaterial::LLGLTFMaterial(const LLGLTFMaterial& rhs)
LLGLTFMaterial& LLGLTFMaterial::operator=(const LLGLTFMaterial& rhs)
{
//have to do a manual operator= because of LLRefCount
//have to do a manual operator= because of LLRefCount
mBaseColorId = rhs.mBaseColorId;
mNormalId = rhs.mNormalId;
mMetallicRoughnessId = rhs.mMetallicRoughnessId;
......@@ -53,10 +53,7 @@ LLGLTFMaterial& LLGLTFMaterial::operator=(const LLGLTFMaterial& rhs)
mDoubleSided = rhs.mDoubleSided;
mAlphaMode = rhs.mAlphaMode;
for (S32 i = 0; i < 3; ++i)
{
mTextureTransform[i] = rhs.mTextureTransform[i];
}
mTextureTransform = rhs.mTextureTransform;
return *this;
}
......@@ -285,16 +282,31 @@ void LLGLTFMaterial::setRoughnessFactor(F32 roughness)
void LLGLTFMaterial::setAlphaMode(S32 mode)
{
mAlphaMode = (AlphaMode)llclamp(mode, (S32)ALPHA_MODE_OPAQUE, (S32)ALPHA_MODE_MASK);
mAlphaMode = (AlphaMode) llclamp(mode, (S32) ALPHA_MODE_OPAQUE, (S32) ALPHA_MODE_MASK);
}
void LLGLTFMaterial::setDoubleSided(bool double_sided)
{
// sure, no clamping will ever be needed for a bool, but include the
// sure, no clamping will ever be needed for a bool, but include the
// setter for consistency with the clamping API
mDoubleSided = double_sided;
}
void LLGLTFMaterial::setTextureOffset(TextureInfo texture_info, const LLVector2& offset)
{
mTextureTransform[texture_info].mOffset = offset;
}
void LLGLTFMaterial::setTextureScale(TextureInfo texture_info, const LLVector2& scale)
{
mTextureTransform[texture_info].mScale = scale;
}
void LLGLTFMaterial::setTextureRotation(TextureInfo texture_info, float rotation)
{
mTextureTransform[texture_info].mRotation = rotation;
}
// Default value accessors
LLUUID LLGLTFMaterial::getDefaultBaseColorId()
......@@ -324,7 +336,7 @@ F32 LLGLTFMaterial::getDefaultAlphaCutoff()
S32 LLGLTFMaterial::getDefaultAlphaMode()
{
return (S32)ALPHA_MODE_OPAQUE;
return (S32) ALPHA_MODE_OPAQUE;
}
F32 LLGLTFMaterial::getDefaultMetallicFactor()
......@@ -352,6 +364,21 @@ bool LLGLTFMaterial::getDefaultDoubleSided()
return false;
}
LLVector2 LLGLTFMaterial::getDefaultTextureOffset()
{
return LLVector2(0.f, 0.f);
}
LLVector2 LLGLTFMaterial::getDefaultTextureScale()
{
return LLVector2(1.f, 1.f);
}
F32 LLGLTFMaterial::getDefaultTextureRotation()
{
return 0.f;
}
void LLGLTFMaterial::writeOverridesToModel(tinygltf::Model& model, S32 mat_index, LLGLTFMaterial const* base_material) const
{
if (model.materials.size() < mat_index + 1)
......
......@@ -79,13 +79,30 @@ class LLGLTFMaterial : public LLRefCount
bool mDoubleSided = false;
AlphaMode mAlphaMode = ALPHA_MODE_OPAQUE;
enum TextureTransformIdx : U32
// get a UUID based on a hash of this LLGLTFMaterial
LLUUID getHash() const
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE;
LLMD5 md5;
md5.update((unsigned char*)this, sizeof(this));
md5.finalize();
LLUUID id;
md5.raw_digest(id.mData);
// *TODO: Hash the overrides
return id;
}
enum TextureInfo : U32
{
TEXTURE_TRANSFORM_DIFFUSE_EMISSIVE,
TEXTURE_TRANSFORM_NORMAL,
TEXTURE_TRANSFORM_METALLIC_ROUGHNESS
GLTF_TEXTURE_INFO_BASE_COLOR,
GLTF_TEXTURE_INFO_NORMAL,
GLTF_TEXTURE_INFO_METALLIC_ROUGHNESS,
GLTF_TEXTURE_INFO_EMISSIVE,
GLTF_TEXTURE_INFO_COUNT
};
TextureTransform mTextureTransform[3];
std::array<TextureTransform, GLTF_TEXTURE_INFO_COUNT> mTextureTransform;
//setters for various members (will clamp to acceptable ranges)
......@@ -101,6 +118,9 @@ class LLGLTFMaterial : public LLRefCount
void setRoughnessFactor(F32 roughness);
void setAlphaMode(S32 mode);
void setDoubleSided(bool double_sided);
void setTextureOffset(TextureInfo texture_info, const LLVector2& offset);
void setTextureScale(TextureInfo texture_info, const LLVector2& scale);
void setTextureRotation(TextureInfo texture_info, float rotation);
// Default value accessors
static LLUUID getDefaultBaseColorId();
......@@ -114,6 +134,9 @@ class LLGLTFMaterial : public LLRefCount
static LLColor4 getDefaultBaseColor();
static LLColor3 getDefaultEmissiveColor();
static bool getDefaultDoubleSided();
static LLVector2 getDefaultTextureOffset();
static LLVector2 getDefaultTextureScale();
static F32 getDefaultTextureRotation();
// set mAlphaMode from string.
// Anything otherthan "MASK" or "BLEND" sets mAlphaMode to ALPHA_MODE_OPAQUE
......@@ -161,17 +184,6 @@ class LLGLTFMaterial : public LLRefCount
// write to given tinygltf::Model
void writeToModel(tinygltf::Model& model, S32 mat_index) const;
// get a UUID based on a hash of this LLGLTFMaterial
LLUUID getHash() const
{
LLMD5 md5;
md5.update((unsigned char*)this, sizeof(this));
md5.finalize();
LLUUID id;
md5.raw_digest(id.mData);
return id;
}
// calculate the fields in this material that differ from a base material and write them out to a given tinygltf::Model
void writeOverridesToModel(tinygltf::Model& model, S32 mat_index, LLGLTFMaterial const* base_material) const;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment