• glsl-UBO


    UBO 是什么?为何要用UBO?

    1、数据共享设计

    采用Block的原因是:

    如果你的程序中包含了多个着色器,而且这些着色器使用了相同的Uniform变量,你就不得不为每个着色器分别管理这些变量。Uniform变量的location是在程序链接的时候产生的,因此Uniform变量的location会随着着色器的不同而发生变化。因此,这些Uniform变量的数据必须重新产生,然后应用到新的location上。

    而Uniform Block正是为了使在着色器间共享Uniform数据变得更加容易而设计的。有了Uniform Block,我们可以创建一个缓冲区对象来存储这些Uniform变量的值,然后将缓冲区对象绑定到Uniform Block。当着色器程序改变的时候,只需要将同样的缓冲区对重新绑定到在新的着色器中与之相关的Block即可。

    2、效率设计

    实验链接 http://blog.csdn.net/lsldd/article/details/8475908

    GLSL提供了UBO技术能很好的解决这个问题。通过把uniform绑定到显卡的缓冲区,可以极大提升修改Uniform数据的速度。

    使用glBufferSubData的效率比使用sendUniform高将近2个数量级!

    然而使用UBO也要付出代价。因为每个显卡不同,UBO里每个uniform所占用字节数都未必相同,所以每次使用前需要查询其起始地址和偏移地址。

    除非指定了layout(std140)。

  • 相关阅读:
    读取数据变JSON传值!
    YII2.0多条件查询升级版
    JS跳转页面方法
    yii的简单片段缓存
    我读过的最好的epoll讲解--转自”知乎“
    I/O多路复用详解
    ”open-close"prinple (OCP)
    获取本机的IPv4或者v6地址
    .Net 下未捕获异常的处理
    TCP断开连接的过程
  • 原文地址:https://www.cnblogs.com/lydyy/p/3848881.html
Copyright © 2020-2023  润新知