diff options
author | David Robillard <d@drobilla.net> | 2019-08-07 00:41:25 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2019-09-07 09:51:48 +0200 |
commit | 8b8ada4682ac5967b2fde4b7989c4b61c49c80e4 (patch) | |
tree | b619194d02fe68fe7c44340aa2a61ba7c91b46b1 /test/test_utils.h | |
parent | 5fac75bd9aadeb3216a591fe694806e9f4e116b7 (diff) | |
download | pugl-8b8ada4682ac5967b2fde4b7989c4b61c49c80e4.tar.gz pugl-8b8ada4682ac5967b2fde4b7989c4b61c49c80e4.tar.bz2 pugl-8b8ada4682ac5967b2fde4b7989c4b61c49c80e4.zip |
Add OpenGL 3 test program
Diffstat (limited to 'test/test_utils.h')
-rw-r--r-- | test/test_utils.h | 58 |
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) |