如果我有两个绑定到程序的缓冲区,但是一个缓冲区的大小小于另一个缓冲区的大小。当顶点着色器执行时,将生成额外值,直到最大缓冲区完成,或者当较小缓冲区耗尽时顶点着色器将停止执行。假设法线比法线少。
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);
代码是为了表明我的意思,所以变量是伪的。
答案 0 :(得分:2)
只要你没有阅读超过两者中的最小值那么就没有问题。
否则,在旧版本中,尝试绘制超过normals->size()
个顶点的未定义行为(纳粹恶魔类型)。
但是,如果启用了扩展名ARB_robustness
或KHR_robustness
,则传递给着色器的值将是未定义的,但不会导致未定义的行为(尽管着色器中存在行为)。