zoukankan      html  css  js  c++  java
  • 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)。

  • 相关阅读:
    西藏之行的一点总结
    《吃的法则》总结
    《心法》总结
    分布式系统中的CAP、ACID、BASE概念
    《你当像鸟飞往你的山》总结
    《怪诞行为学》总结
    编程的一些抽象核心
    《活法》总结
    Mac使用Charles给iPhone抓包流程
    《认知天性》总结
  • 原文地址:https://www.cnblogs.com/lydyy/p/3848881.html
Copyright © 2011-2022 走看看