如何将linmath.h矩阵传递给glsl着色器?

3
我正在学习 linmath.h 库,但在我的主程序中,我无法将使用它创建的矩阵传递给我的顶点着色器:
#include "linmath.h"
…
GLint mat_uniform_handle = glGetUniformLocation(shade_program_handle, "matrix");
…
mat4x4 M;
mat4x4_identity(M);
glUniformMatrix4fv(mat_uniform_handle, 1, GL_FALSE, M);

当然,这会让我出现类型错误,因为linmath矩阵的类型是float (*)[4],而glUniformMatrix4fv需要的类型是const GLfloat *

我尝试编写自己的转换器,将矩阵的列连接成一个单独的数组,然后返回第一个元素的指针,但那行不通。

我是否错过了一些linmath.h库中能够为我执行此转换的函数?如果没有,我该如何正确地将linmath.h矩阵转换为OpenGL矩阵?

1个回答

4

很遗憾,在向这里提问之前我没有尝试过这个方法,但是这就是解决方案,只需进行直接转换即可。

glUniformMatrix4fv(mat_uniform_handle, 1, GL_FALSE, (GLfloat *)M);

希望这能帮助到某些人。

1
预期的方法,也更短一些的写法是 M[0]*M - 但你的写法也很好。 - datenwolf
我遇到了同样的问题,然后采用了你提供的强制类型转换解决方案。我的唯一担忧是这种方法是否安全:2D数组的子数组是否保证连续?即M[1]是否直接跟在M[2]的内存之后? - user717572

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接