当顶点属性大小不匹配时会发生什么

时间:2014-12-10 15:10:09

标签: c++ opengl

如果我有两个绑定到程序的缓冲区,但是一个缓冲区的大小小于另一个缓冲区的大小。当顶点着色器执行时,将生成额外值,直到最大缓冲区完成,或者当较小缓冲区耗尽时顶点着色器将停止执行。假设法线比法线少。

glGenBuffers(1, &array_1_id);
glBindBuffer(GL_ARRAY_BUFFER, array_1_id);
glBufferData(GL_ARRAY_BUFFER, verticies->size(), verticies->data(), GL_STREAM_DRAW);
setVertexAttribute(program_id, "verticies", size, type, normalized, stride, offset);

glGenBuffers(1, &array_2_id);
glBindBuffer(GL_ARRAY_BUFFER, array_2_id);
glBufferData(GL_ARRAY_BUFFER, normals->size(), normals->data(), GL_STREAM_DRAW);
setVertexAttribute(program_id, "normals", size, type, normalized, stride, offset);

代码是为了表明我的意思,所以变量是伪的。

1 个答案:

答案 0 :(得分:2)

只要你没有阅读超过两者中的最小值那么就没有问题。

否则,在旧版本中,尝试绘制超过normals->size()个顶点的未定义行为(纳粹恶魔类型)。

但是,如果启用了扩展名ARB_robustnessKHR_robustness,则传递给着色器的值将是未定义的,但不会导致未定义的行为(尽管着色器中存在行为)。