最简单的 UBO(Uniform Buffer Object) 【修订补充】【OpenGL】【GLSL】

举报
ShaderJoy 发表于 2021/12/29 23:32:45 2021/12/29
【摘要】 一、引入 Uniform Buffer Object / Uniform Block 的 原因 1)  如果程序涉及了多个 Shader 程序,而且它们使用同一个Uniform 变量,那么你不得不为每个 Shader 程序单独管理它们。当一个程序被链接时,OpenGL 会自动生成 Uniform 的位置,因此对于不同的 ...

一、引入 Uniform Buffer Object / Uniform Block 的 原因

1)  如果程序涉及了多个 Shader 程序,而且它们使用同一个Uniform 变量,那么你不得不为每个 Shader 程序单独管理它们。当一个程序被链接时,OpenGL 会自动生成 Uniform 的位置,因此对于不同的 Shader 程序,同一个 Uniform 变量的位置可能是不一样的。而 Uniform Blocks 就是为了方便我们管理 Shader 之间共享的 Uniform 变量
通过一个 Uniform Block 对象,我们可以创建一个缓冲区用于存储所有的 Uniform 变量,然后把这个缓冲区绑定到 Uniform bBock 上。这样,当我们需要改变使用的 Shader 程序时,只需要再重新把 Uniform Block 绑定到新的 Shader 程序就可以了。【摘自《【OpenGL】向Shader中传递数据》

2)有多个相同的 Uniform 变量,需要统一管理

二、UBO 的优点

  • UBO 缓冲区是发送数据“结构体”的一种更有组织的方式
  • 如果发送相同的数据到多个着色器,UBO 可以显著减少代码,优化 Uniform 变量的访问,

文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。

原文链接:panda1234lee.blog.csdn.net/article/details/71326063

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。