标题说明了一切。
出于某些原因,此代码有效:
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]);
答案 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
就足够了,因为地址会自动指向第一个元素。