imageAtomic GLSL函数和RGBA图像格式

时间:2016-05-10 15:37:18

标签: glsl opengl-4

我有一个应用程序,我使用glBindImageTexture绑定纹理缓冲区,我的GLSL代码执行各种操作并更新缓冲区。

最近我将一些图像缓冲区格式从GL_R32UI更改为GL_RGBA32UI。所以基本上,一个texel之前是1 unsigned int,现在它是4个无符号整数。在进行imageStores,imageLoads和客户端事务时,一切正常。

我在使用imageAtomic *函数时遇到了一些问题。 我们来看imageAtomicAdd。无论缓冲区格式如何,最后一个参数始终为整数大小。例如。它不是一个uvec4,而且只是一个单一的uint。 当我调用imageAtomicAdd(some_uimageBuffer,some_address,1u)时,应该发生什么? GLSL会增加所有4个texel组件(x,y,z和w),还是只增加一个?哪一个?

感谢您的见解!

1 个答案:

答案 0 :(得分:2)

  

GLSL会增加所有4个纹素组件(x,y,z和w),还是只增加一个?哪一个?

既不;根本不允许。从规范:

  

仅所有图像变量类型的子集支持原子内存操作;图片必须是:

     
      
  • 有符号整数图像变量(类型以“iimage”开头)和格式限定符r32i,与int类型的数据参数一起使用,或
  •   
  • 无符号图像变量(类型以“uimage”开头)和格式限定符r32ui,与uint类型的数据参数一起使用。
  •