我有一个没有声明顶点属性的顶点着色器。它根据UBO,gl_VertexId
和gl_InstanceID
计算所有需要的值。
I know必须绑定非零VAO才能呈现。
使用大count
参数调用draw命令是合法的,而当前VAO状态的缓冲区很小,即只包含四个floats
?可能由于某些平台上的隐式和未使用读取而导致视频内存访问冲突?这样的绘制调用似乎在我的机器上工作正常,但我不确定在任何地方运行是否安全。
答案 0 :(得分:2)
这完全合法。非零VAO并不意味着属性计数不能为零。零属性时,不会从顶点缓冲区中读取任何内容。
编辑:规范链接 https://www.khronos.org/registry/OpenGL/specs/gl/glspec46.core.pdf
客户端顶点和索引数组 - 所有顶点数组属性和元素数组 索引指针必须引用缓冲区对象。默认的顶点数组对象 (名称为零)也已弃用。调用 VertexAttribPointer 什么时候没有 缓冲对象或没有顶点数组对象将生成一个 无效_- 操作 错误,因为没有ver时会调用任何数组绘图命令 tex数组对象被绑定。
但创造和约束"空" VAO解决了这个问题。请参阅第580页的表格 - VAO的初始(和有效)状态已禁用所有属性。