OpenGL:将动态分配的矩阵传递给统一

时间:2018-10-07 13:55:49

标签: c++ opengl

标题说明了一切。

出于某些原因,此代码有效:

float m[3][3] = {
    {1.0f, 0.0f, 0.0f},
    {0.0f, 1.0f, 0.0f},
    {0.0f, 0.0f, 1.0f}
};
glUniformMatrix3fv(basicShader->uniformAt(5), 1, GL_TRUE, &m[0][0]);

但这不是:

float **m = new float*[3];
for(int i = 0; i < 3; i++) {
    m[i] = new float[3];
    for(int j = 0; j < 3; j++) m[i][j] = 0;
}
m[0][0] = 1.0f;
m[1][1] = 1.0f;
m[2][2] = 1.0f;
glUniformMatrix3fv(basicShader->uniformAt(5), 1, GL_TRUE, &m[0][0]);

1 个答案:

答案 0 :(得分:1)

float* m = new float[9] {1.0f, 0.0f, 0.0f, 
                         0.0f, 1.0f, 0.0f,
                         0.0f, 0.0f, 1.0f };



glUniformMatrix3fv(basicShader->uniformAt(5), 1, GL_TRUE, m);

2D数组实际上是连续布置的。

编辑:只是说,在您的第一个示例中,您不需要&m[0][0]。仅&m就足够了,因为地址会自动指向第一个元素。