glVertexAttribPointer vec2 但只转发一个

glVertexAttribPointer vec2 but forward just one

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

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

这感觉像是 hack,但您可以明确地将 glVertexAttribPointerstride 参数设置为单个 float 的大小。

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

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