Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GLVERTEXATTRIB2,但仅转发一个_C++_Opengl_Glsl - Fatal编程技术网

C++ GLVERTEXATTRIB2,但仅转发一个

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作为

我有这个,它将在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
作为步长参数是一个方便的快捷方式,意味着紧密压缩数组,因此在您的情况下,它将相当于
2*sizeof(GLfloat)
,但GL中没有任何内容阻止您将步长设置在紧密压缩数组的该值以下:

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

这回答了问题,byt我仍然有问题,我想要的是访问着色器中以前的顶点值,我只需要最后一个。你是对的,这有一种黑客行为,有没有更好的方法?@derhass,如果你必须在紧凑的vec2数组中设置步幅,步幅应该是:2*sizeof(GLfloat)而不是你的代码中的sizeof(GLfloat)。@wangdq:没错,但这不是问题和答案所在。我明确地说,“但是GL中没有任何东西可以阻止您将跨距设置为低于紧密压缩数组的该值:”。