着色器存储块vs统一块
Shader Storage Block vs Uniform Blocks
我现在读到,你不能写统一块,所以着色器存储块比统一块有优势。此外,着色器存储块的大小(上限)要高得多。
我没有得到的是一个着色器存储块的原子操作属性,什么时候可以变得方便?有现实生活中的例子吗?
此外,当我更喜欢一个比另一个?
我认为你的问题提得不对。这听起来像你试图找出统一缓冲区和着色器存储缓冲区之间的差异。块只是组织着色器输入和输出的一种方式。
正如你所指出的,统一缓冲区和着色器存储缓冲区之间最大的区别是你可以从着色器程序中写入着色器存储缓冲区。
问为什么写ssbo很方便,就像问为什么变量很方便。任何时候你想积累结果或在渲染通道之间共享数据,你都可以使用ssbo作为"临时内存"。
在过去(我相信),如果你想要共享数据,你必须对纹理进行渲染,这将需要通过整个图形管道,并承担所有的成本。
关于着色器存储缓冲对象的更多信息:
https://www.opengl.org/wiki/Shader_Storage_Buffer_Object为了真正确保你理解其中的区别,请按时间顺序查找各种提供着色器数据的方法:
- 纹理,帧缓冲对象
- 制服
- 统一缓冲对象
- 纹理缓冲对象
- 纹理与图像加载/存储
- Shader Storage Buffer Objects
这个关于SO的答案很好地概述了几乎所有这些问题:
给fragment shader传递一个值列表
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 数据成员SFINAE的C++17测试:gcc vs clang
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 正在VS调试器中监视映射条目
- Confusion: decltype vs std::function
- 将IBM Rhapsody模型集成到VS 2019中
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用VS Code和CMake Tools运行自定义命令
- 修改 VS Code 中的默认C++代码段
- 如何使用c++在VS 2019上运行SQL查询
- vs 2015 constexpr变量不恒定,但与2019相比还好吗
- 完美前进使用 std::forward vs RefRefCast
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- consteval wrapper vs. source_location
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- 着色器存储块vs统一块