glMemoryBarrier在GL 4.2和更高版本中可用,而glTextureBarrier在GL 4.5中可用
glTextureBarrier允许在从片段着色器获取纹理时同时渲染到相同的纹理中,IFF将纹理的每个纹理元素恰好击中一次纹理。
我想知道glMemoryBarrier(GL_TEXTURE_FETCH_BARRIER_BIT)是否也允许吗?如果没有,是否存在与glTextureBarrier等效的OpenGL ES?
最佳答案
不,不是。glTextureBarrier
是一个函数。 ARB_texture_barrier是扩展(并且是GL 4.5的一部分)。作为规范更改的一部分,ARB_texture_barrier扩展名允许对附加的图像进行单个读取/修改/写入。
现在,调用glTextureBarrier
将允许您进行第二次读/修改/写操作。您可以再次调用它以获得另一张通行证。但是glTextureBarrier
本身并不能赋予您读取/修改/写入权限。这是整个扩展。
另外,请注意,这两个功能没有共同之处。glMemoryBarrier(GL_TEXTURE_FETCH_BARRIER_BIT)
仅适用于incoherent memory operations的写入(SSBO/图像加载/存储)。该特定的屏障位意味着在此函数之后发出的纹理采样操作将可以看到在此函数之前发出的不连贯写入。glTextureBarrier
特别适用于写入帧缓冲区附加的图像,以及随后在着色器中对其进行的读取。帧缓冲区写不是不相关的内存操作,因此不受glMemoryBarrier
调用的约束。
还没有。考虑到倾向于实现ES的硬件种类,它不可能实现。虽然一般的想法对基于图块的渲染器有好处,但这对他们来说只是错误的抽象。
Vulkan的输入附件和管道壁垒更适合在TBR中执行此类操作。