diff --git a/gfx/math/matrix.c b/gfx/math/matrix.c index 6b240d6b76..9e8f197bb1 100644 --- a/gfx/math/matrix.c +++ b/gfx/math/matrix.c @@ -95,44 +95,31 @@ void matrix_ortho(math_matrix *mat, void matrix_scale(math_matrix *out, float x, float y, float z) { - math_matrix mat; - - MAT_ELEM(mat, 0, 0) = x; - MAT_ELEM(mat, 1, 1) = y; - MAT_ELEM(mat, 2, 2) = z; - MAT_ELEM(mat, 3, 3) = 1.0; - - *out = mat; + memset(out, 0, sizeof(*out)); + MAT_ELEM(*out, 0, 0) = x; + MAT_ELEM(*out, 1, 1) = y; + MAT_ELEM(*out, 2, 2) = z; + MAT_ELEM(*out, 3, 3) = 1.0f; } void matrix_translate(math_matrix *out, float x, float y, float z) { - math_matrix mat; - - MAT_ELEM(mat, 0, 0) = 1.0; - MAT_ELEM(mat, 1, 1) = 1.0; - MAT_ELEM(mat, 2, 2) = 1.0; - MAT_ELEM(mat, 3, 3) = 1.0; - MAT_ELEM(mat, 0, 3) = x; - MAT_ELEM(mat, 1, 3) = y; - MAT_ELEM(mat, 2, 3) = z; - - *out = mat; + matrix_identity(out); + MAT_ELEM(*out, 0, 3) = x; + MAT_ELEM(*out, 1, 3) = y; + MAT_ELEM(*out, 2, 3) = z; } void matrix_projection(math_matrix *out, float znear, float zfar) { - math_matrix mat; - - MAT_ELEM(mat, 0, 0) = znear; - MAT_ELEM(mat, 1, 1) = zfar; - MAT_ELEM(mat, 2, 2) = (zfar + znear) / (zfar - znear); - MAT_ELEM(mat, 2, 3) = -2.0f * zfar * znear / (zfar - znear); - MAT_ELEM(mat, 3, 2) = -1.0f; - - *out = mat; + matrix_identity(out); + MAT_ELEM(*out, 0, 0) = znear; + MAT_ELEM(*out, 1, 1) = zfar; + MAT_ELEM(*out, 2, 2) = (zfar + znear) / (zfar - znear); + MAT_ELEM(*out, 2, 3) = -2.0f * zfar * znear / (zfar - znear); + MAT_ELEM(*out, 3, 2) = -1.0f; } void matrix_multiply(math_matrix *out, @@ -153,3 +140,4 @@ void matrix_multiply(math_matrix *out, *out = mat; } +