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