C++ GLVERTEXATTRIB2,但仅转发一个
我有这个,它将在vec2中读取,是否可以只转发一个,这样顶点着色器将在每个0,1然后1,2,3中接收,依此类推C++ GLVERTEXATTRIB2,但仅转发一个,c++,opengl,glsl,C++,Opengl,Glsl,我有这个,它将在vec2中读取,是否可以只转发一个,这样顶点着色器将在每个0,1然后1,2,3中接收,依此类推 float v[]{0,1,2,3,4...}; glVertexAttribPointer((GLuint)0, 2, GL_FLOAT, GL_FALSE, 0, 0); 这感觉像一个黑客,但您可以明确地将glvertexattributepointer的stride参数设置为单个浮点的大小 基本上,每当GL获取索引为i的顶点时,它都将使用地址偏移量+i*步长。您当前使用的0作为
float v[]{0,1,2,3,4...};
glVertexAttribPointer((GLuint)0, 2, GL_FLOAT, GL_FALSE, 0, 0);
这感觉像一个黑客,但您可以明确地将
glvertexattributepointer
的stride
参数设置为单个浮点的大小
基本上,每当GL获取索引为i
的顶点时,它都将使用地址偏移量+i*步长
。您当前使用的0
作为步长参数是一个方便的快捷方式,意味着紧密压缩数组,因此在您的情况下,它将相当于2*sizeof(GLfloat)
,但GL中没有任何内容阻止您将步长设置在紧密压缩数组的该值以下:
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat), 0);
这回答了问题,byt我仍然有问题,我想要的是访问着色器中以前的顶点值,我只需要最后一个。你是对的,这有一种黑客行为,有没有更好的方法?@derhass,如果你必须在紧凑的vec2数组中设置步幅,步幅应该是:2*sizeof(GLfloat)而不是你的代码中的sizeof(GLfloat)。@wangdq:没错,但这不是问题和答案所在。我明确地说,“但是GL中没有任何东西可以阻止您将跨距设置为低于紧密压缩数组的该值:”。