aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_utils.h')
-rw-r--r--test/test_utils.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/test/test_utils.h b/test/test_utils.h
index f4f6c31..8e9c7ff 100644
--- a/test/test_utils.h
+++ b/test/test_utils.h
@@ -34,6 +34,9 @@ typedef struct {
bool resizable;
} PuglTestOptions;
+typedef float vec4[4];
+typedef vec4 mat4[4];
+
static const float cubeStripVertices[] = {
-1.0f, 1.0f, 1.0f, // Front top left
1.0f, 1.0f, 1.0f, // Front top right
@@ -79,6 +82,61 @@ static const float cubeSideLines[] = {
1.0f, -1.0f, -1.0f, // Back bottom right
};
+static inline void
+mat4Identity(mat4 m)
+{
+ for (int c = 0; c < 4; ++c) {
+ for (int r = 0; r < 4; ++r) {
+ m[c][r] = c == r ? 1.0f : 0.0f;
+ }
+ }
+}
+
+static inline void
+mat4Translate(mat4 m, const float x, const float y, const float z)
+{
+ m[3][0] = x;
+ m[3][1] = y;
+ m[3][2] = z;
+}
+
+static inline void
+mat4Mul(mat4 m, mat4 a, mat4 b)
+{
+ for (int c = 0; c < 4; ++c) {
+ for (int r = 0; r < 4; ++r) {
+ m[c][r] = 0.0f;
+ for (int k = 0; k < 4; ++k) {
+ m[c][r] += a[k][r] * b[c][k];
+ }
+ }
+ }
+}
+
+static inline void
+mat4Ortho(mat4 m,
+ const float l,
+ const float r,
+ const float b,
+ const float t,
+ const float n,
+ const float f)
+{
+ m[0][0] = 2.0f / (r - l);
+ m[0][1] = m[0][2] = m[0][3] = 0.0f;
+
+ m[1][1] = 2.0f / (t - b);
+ m[1][0] = m[1][2] = m[1][3] = 0.0f;
+
+ m[2][2] = -2.0f / (f - n);
+ m[2][0] = m[2][1] = m[2][3] = 0.0f;
+
+ m[3][0] = -(r + l) / (r - l);
+ m[3][1] = -(t + b) / (t - b);
+ m[3][2] = -(f + n) / (f - n);
+ m[3][3] = 1.0f;
+}
+
/** Calculate a projection matrix for a given perspective. */
static inline void
perspective(float* m, float fov, float aspect, float zNear, float zFar)