C++ 着色器存储块与均匀块

C++ 着色器存储块与均匀块,c++,glsl,C++,Glsl,我现在读到,您不能写入统一块,所以着色器存储块比统一块有优势。此外,着色器存储块的大小(上限)要高得多 我没有得到的是着色器存储块的原子操作属性,何时可以变得方便?有真实的例子吗 此外,当我更喜欢一个而不是另一个时?我认为你的问题是不合适的。听起来您正试图找出统一缓冲区和着色器存储缓冲区之间的区别。块只是组织着色器输入和输出的一种方式 正如您所注意到的,统一缓冲区和着色器存储缓冲区之间的最大区别在于您可以从着色器程序写入着色器存储缓冲区 问为什么写ssbo很方便就像问为什么变量很方便一样。任何时

我现在读到,您不能写入统一块,所以着色器存储块比统一块有优势。此外,着色器存储块的大小(上限)要高得多

我没有得到的是着色器存储块的原子操作属性,何时可以变得方便?有真实的例子吗


此外,当我更喜欢一个而不是另一个时?

我认为你的问题是不合适的。听起来您正试图找出统一缓冲区和着色器存储缓冲区之间的区别。块只是组织着色器输入和输出的一种方式

正如您所注意到的,统一缓冲区和着色器存储缓冲区之间的最大区别在于您可以从着色器程序写入着色器存储缓冲区

问为什么写ssbo很方便就像问为什么变量很方便一样。任何时候,如果希望在渲染过程之间累积结果或共享数据,可以将ssbo用作“暂存内存”

在过去(我相信),如果你想共享数据,你必须对纹理进行渲染,这将贯穿整个图形管道,并为此付出所有代价

有关统一缓冲区对象的详细信息,请参见:

要真正确保您了解差异,请查看按时间顺序为着色器提供数据的各种方法:

  • 纹理和帧缓冲区对象
  • 制服
  • 统一缓冲区对象
  • 纹理缓冲区对象
  • 带有图像加载/存储的纹理
  • 着色器存储缓冲区对象
这个答案对几乎所有这些问题都有很好的概述: