计数潜力超过缓冲区大小的glDrawArrays

时间:2018-02-06 08:01:49

标签: opengl language-lawyer access-violation vertex-shader

我有一个没有声明顶点属性的顶点着色器。它根据UBO,gl_VertexIdgl_InstanceID计算所有需要的值。

I know必须绑定非零VAO才能呈现。

使用大count参数调用draw命令是合法的,而当前VAO状态的缓冲区很小,即只包含四个floats?可能由于某些平台上的隐式和未使用读取而导致视频内存访问冲突?这样的绘制调用似乎在我的机器上工作正常,但我不确定在任何地方运行是否安全。

1 个答案:

答案 0 :(得分:2)

这完全合法。非零VAO并不意味着属性计数不能为零。零属性时,不会从顶点缓冲区中读取任何内容。

编辑:规范链接 https://www.khronos.org/registry/OpenGL/specs/gl/glspec46.core.pdf

  

客户端顶点和索引数组 - 所有顶点数组属性和元素数组   索引指针必须引用缓冲区对象。默认的顶点数组对象   (名称为零)也已弃用。调用   VertexAttribPointer   什么时候没有   缓冲对象或没有顶点数组对象将生成一个   无效_-   操作   错误,因为没有ver时会调用任何数组绘图命令   tex数组对象被绑定。

但创造和约束"空" VAO解决了这个问题。请参阅第580页的表格 - VAO的初始(和有效)状态已禁用所有属性。