opengl - OpenGL 3 中的图像加载存储等效项

标签 opengl glsl

我的项目应该大大受益于 glsl 着色器纹理中的任意/原子读写操作。图像加载存储扩展正是我所需要的。唯一的问题是,我的目标平台不支持 OpenGL 4。 OGL 3 是否有一个扩展可以达到类似的结果?我的意思是,来自片段着色器的纹理或共享缓冲区中的原子读/写操作。

最佳答案

Image Load Store而且,特别是原子操作是必须由特定硬件功能支持的功能,这与计算着色器中使用的功能非常相似。只有某些 GL3 硬件可以处理它,而且只能以有限的方式处理。

  1. Image Load Store从 4.2 开始就在核心配置文件中,因此如果您的硬件(和驱动程序)支持 OpenGL 4.2,那么您根本不需要任何扩展

  2. 如果您的硬件(和驱动程序)功能低于 GL 4.2,但高于 GL 3.0,您可能可以使用 ARB_shader_image_load_store扩展名。

    • quote:需要 OpenGL 3.0 和 GLSL 1.30
    • 显然,并非所有 3.0 硬件(和驱动程序)都支持此扩展,因此在使用之前必须检查其支持
    • 我相信,大多数 NVIDIA GL 3.3 硬件都支持它,但 AMD 或 Intel 不支持(这是我的主观观察;))。
  3. 如果您的硬件低于 GL 4.2 并且不支持此扩展,那么您实际上无能为力。只需有一个替代代码路径,其中包含纹理采样和渲染到纹理,并且没有原子(据我所知,这是可能的,但没有“原子的巨大好处”),或者只是向那些尚未升级其装备的用户报告错误。

希望有帮助。

关于opengl - OpenGL 3 中的图像加载存储等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20542235/

相关文章:

c++ - OpenGL - 重新排序渲染方法后崩溃

c++ - OpenGL 3D 旋转看起来不像预期的那样

python - 使用pyclutter编程

c++ - Xcode 非终端 C++ 项目

ios - 如何在 GLSL ES 中编写 const 数组

android - 将当前时间传递给 OpenGL ES 2.0 着色器以进行纹理动画 : animation stops after certain time

c++ - 将结构发送到着色器存储缓冲区时,为什么会得到垃圾数据?

javascript - Webgl Angular 循环非常慢

c++ - OpenGL header 中的平台特定宏

java - LWJGL 渲染无任何内容