有人能告诉我Uniform Buffers为什么看起来那么复杂吗?我已经阅读了OpenGL Superbible 5中的部分内容,查看了一些博客上的示例,并阅读了官方规范,但我仍然不理解。
具体来说,所有示例似乎都需要先使用着色器程序才能使用glGetActiveUniformsiv来初始化uniform buffer。我不明白这一点。为什么接口不允许您在不引用着色器程序的情况下定义结构,在链接时对缓冲区/格式进行验证呢?
其次,如果我从一个程序中获取结构布局,并假设该结构布局对使用该组uniform的所有程序都相同,那么结构是否保证具有相同的偏移量、数据大小等?我会这样假设。
第三,我不理解binding points。我必须使用索引调用glBindBufferBase,然后使用块索引和传递给glBindBufferBase的索引调用glUniformBlockBinding。我很难想象这里到底发生了什么。Superbible、规范和我看到的示例都缺乏清晰度。
glBindTexture(GL_TEXTURE0+i)
是什么?我又落伍了还是这是一个打字错误(或者可能是简化)? - Christian Rau