commit 9524c5fcf9c8635eaed05371621250e95c86fa17
parent 1a9b329021d1d705a2ca6d046c2698d2177935df
Author: Amin Mesbah <dev@aminmesbah.com>
Date: Mon, 1 Apr 2019 00:25:13 -0700
Remove allocation from glmth
Diffstat:
3 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/src/glmth.c b/src/glmth.c
@@ -20,16 +20,14 @@ void glmth_m4_print(m4 m)
}
-f32 *glmth_m4_valueptr(m4 m)
+void glmth_m4_valueptr(m4 m, f32* out_valueptr)
{
- f32 *values = malloc(sizeof(m4));
for (u8 v = 0; v < 16; ++v)
{
u8 row = v / 4;
u8 col = v % 4;
- values[v] = m.E[row][col];
+ out_valueptr[v] = m.E[row][col];
}
- return values;
}
diff --git a/src/glmth.h b/src/glmth.h
@@ -97,7 +97,10 @@ typedef struct
m4 glmth_m4_init_id();
void glmth_m4_print(m4 m);
-f32 *glmth_m4_valueptr(m4 m);
+
+// out_valueptr must be a buffer of 16 f32s
+void glmth_m4_valueptr(m4 m, f32* out_valueptr);
+
bool glmth_m4m4_eq(m4 mat1, m4 mat2);
m4 glmth_m4m4_m(m4 mat1, m4 mat2);
v4 glmth_m4v4_m(m4 m, v4 v);
diff --git a/src/shader.c b/src/shader.c
@@ -144,9 +144,17 @@ void shader_setm4(struct Shader *s, char *name, m4 *mat)
{
if (s)
{
- f32* valueptr = glmth_m4_valueptr(*mat);
- glUniformMatrix4fv(glGetUniformLocation(s->program, name), 1, GL_TRUE, valueptr);
- free(valueptr);
+ f32* valueptr = malloc(sizeof(m4));
+ if (valueptr)
+ {
+ glmth_m4_valueptr(*mat, valueptr);
+ glUniformMatrix4fv(glGetUniformLocation(s->program, name), 1, GL_TRUE, valueptr);
+ free(valueptr);
+ }
+ else
+ {
+ printf("Error: Allocation failed\n");
+ }
}
else
{