【发布时间】:2019-06-27 21:27:39
【问题描述】:
在https://www.lighthouse3d.com/tutorials/glsl-tutorial/uniform-blocks/ 的示例页面中有这样的内容:
- uniformBlockBinding()
- bindBuffer()
- bufferData()
- bindBufferBase()
但从概念上讲,这不是更正确吗?
- bindBuffer()
- bufferData()
- uniformBlockBinding()
- bindBufferBase()
这个想法是上传到缓冲区 (bindBuffer+bufferData) 应该不知道缓冲区将用于什么 - 然后,uniformBlockBinding()+bindBufferBase() 将分别用于更新这些制服,每个着色器,当相关缓冲区发生变化时?
【问题讨论】:
-
您应该选择标记 OpenGL 或 WebGL。答案会有所不同。 OpenGL 支持映射缓冲区,而 WebGL 不支持(因为它不安全),因此更新统一块缓冲区的方式可能会有很大不同。此外,OpenGL 是一个 C api,而 WebGL 是一个 JavaScript API,因此更新数据的方法大不相同。在 OpenGL 中,您可以声明一个与您的统一块数据匹配的结构。在 JavaScript 中你不能,你必须以非常不同的方式来做。正如您接受的答案所暗示的那样,WebGL 也不支持在 GLSL 中设置绑定索引。