summaryrefslogtreecommitdiff
path: root/indra/llprimitive
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llprimitive')
-rw-r--r--indra/llprimitive/llgltfmaterial.cpp22
-rw-r--r--indra/llprimitive/llgltfmaterial.h3
2 files changed, 25 insertions, 0 deletions
diff --git a/indra/llprimitive/llgltfmaterial.cpp b/indra/llprimitive/llgltfmaterial.cpp
index c76f547570..6d23cb8039 100644
--- a/indra/llprimitive/llgltfmaterial.cpp
+++ b/indra/llprimitive/llgltfmaterial.cpp
@@ -39,6 +39,28 @@ const char* GLTF_FILE_EXTENSION_TRANSFORM_ROTATION = "rotation";
// special UUID that indicates a null UUID in override data
static const LLUUID GLTF_OVERRIDE_NULL_UUID = LLUUID("ffffffff-ffff-ffff-ffff-ffffffffffff");
+// https://github.com/KhronosGroup/glTF/tree/main/extensions/3.0/Khronos/KHR_texture_transform
+LLMatrix3 LLGLTFMaterial::TextureTransform::asMatrix()
+{
+ LLMatrix3 scale;
+ scale.mMatrix[0][0] = mScale[0];
+ scale.mMatrix[1][1] = mScale[1];
+
+ LLMatrix3 rotation;
+ const F32 cos_r = cos(mRotation);
+ const F32 sin_r = sin(mRotation);
+ rotation.mMatrix[0][0] = cos_r;
+ rotation.mMatrix[0][1] = sin_r;
+ rotation.mMatrix[1][0] = -sin_r;
+ rotation.mMatrix[1][1] = cos_r;
+
+ LLMatrix3 offset;
+ offset.mMatrix[2][0] = mOffset[0];
+ offset.mMatrix[2][1] = mOffset[1];
+
+ return offset * rotation * scale;
+}
+
LLGLTFMaterial::LLGLTFMaterial(const LLGLTFMaterial& rhs)
{
*this = rhs;
diff --git a/indra/llprimitive/llgltfmaterial.h b/indra/llprimitive/llgltfmaterial.h
index 9489837de7..60116fd423 100644
--- a/indra/llprimitive/llgltfmaterial.h
+++ b/indra/llprimitive/llgltfmaterial.h
@@ -28,6 +28,7 @@
#include "llrefcount.h"
#include "llmemory.h"
+#include "m3math.h"
#include "v4color.h"
#include "v3color.h"
#include "v2math.h"
@@ -53,6 +54,8 @@ public:
LLVector2 mOffset = { 0.f, 0.f };
LLVector2 mScale = { 1.f, 1.f };
F32 mRotation = 0.f;
+
+ LLMatrix3 asMatrix();
};
enum AlphaMode