glVertexAttribPointer vec2但只转发一个

时间:2016-03-25 23:44:12

标签: c++ opengl glsl

我有这个,它将在vec2中读取,是否可以只转发一个,所以顶点着色器将在每个0,1然后1,2 2,3接收等等?

float v[]{0,1,2,3,4...};
glVertexAttribPointer((GLuint)0, 2, GL_FLOAT, GL_FALSE, 0, 0);

1 个答案:

答案 0 :(得分:1)

这感觉就像是黑客攻击,但您可以明确地将stride glVertexAttribPointer参数设置为单个float的大小。

基本上,每当GL获取索引为i的顶点时,它将使用地址offset + i * stride。您当前使用的0作为步幅参数是一个方便的快捷方式,意味着紧密排列的数组,因此在您的情况下它将等同于2 * sizeof(GLfloat),但GL中没有任何内容阻止您设置低于紧密数组的值的步幅:

glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat), 0);