我有这个,它将在vec2中读取,是否可以只转发一个,所以顶点着色器将在每个0,1然后1,2 2,3接收等等?
float v[]{0,1,2,3,4...};
glVertexAttribPointer((GLuint)0, 2, GL_FLOAT, GL_FALSE, 0, 0);
答案 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);