glUniformBlockBinding 和 glBindBufferBase 之间的排序重要吗?
Posted
技术标签:
【中文标题】glUniformBlockBinding 和 glBindBufferBase 之间的排序重要吗?【英文标题】:Is ordering between glUniformBlockBinding and glBindBufferBase important? 【发布时间】:2013-07-24 07:23:35 【问题描述】:使用 UBO 时,我们将统一块绑定到绑定点。然后我们还将 UBO 绑定到同一个绑定点: 类似:
glUseProgram(ProgramName);
glUniformBlockBinding(ProgramName, uniformLocation, bindingPoint);
glBindBufferBase(GL_UNIFORM_BUFFER, bindingPoint, bufId);
我有两个问题:
-
我应该先指定 glUniformBlockBinding 还是 glBindBufferBase 或者顺序无关紧要?
如果我的理解是正确的,那么只有在我们用数据更新了 UBO 之后才必须调用 glBindBufferBase。如果这是正确的,那么这就回答了我的第一个问题。
【问题讨论】:
uniformLocation
这不是一个统一的位置。那是一个统一的块索引。这不是一回事。
“如果这是正确的,那么这回答了我的第一个问题。” - 不,它没有(参考 “答案” 不是“是正确的”)。为什么要这样做?
【参考方案1】:
glUniformBlockBinding
在程序中设置状态(这就是为什么你不应该每帧都调用它的原因)。 glBindBufferRange
在 OpenGL 上下文中设置状态。在您渲染之前,两者都不会影响另一个,所以不,哪个都没有关系。
是的,你不能调用glBindBufferRange
(或Base,它是根据Range定义的),除非你已经为缓冲区对象分配了存储空间。
【讨论】:
谢谢尼科尔。这回答了我的问题。 顺便说一句,您能否解释一下在程序中设置状态与在 GL 上下文中设置状态之间的区别? @kvikram:也许你应该花点时间来learn a bit more about OpenGL。以上是关于glUniformBlockBinding 和 glBindBufferBase 之间的排序重要吗?的主要内容,如果未能解决你的问题,请参考以下文章
G.1X 和 G.2X 的 AWS Glue 工作线程定价详细信息
需要帮助 w/ 恼人的 Makefile 错误 -- g++: g++ 和 shell 错误 -- 和 Multi-Makefile 设计建议