Opengl glBindImageTexture()和glBindTexture()之间有什么区别?

Opengl glBindImageTexture()和glBindTexture()之间有什么区别?,opengl,texture2d,glteximage2d,Opengl,Texture2d,Glteximage2d,glBindImageTexture和glBindTexture之间的区别是什么?以及着色器中以下声明之间的区别: layout (binding = 0, rgba32f) uniform image2D img_input; 及 它声明了一个从纹理对象获取其数据的。绑定0(可以在GLSL 4.20中的着色器中设置该值)表示绑定到纹理图像单元0的2D纹理(通过glActiveTexture(GL_TEXTURE0);glBindTexture(GL_texture_2D,…;)是将用于此采样

glBindImageTexture和glBindTexture之间的区别是什么?以及着色器中以下声明之间的区别:

layout (binding = 0, rgba32f) uniform image2D img_input;

它声明了一个从纹理对象获取其数据的。绑定0(可以在GLSL 4.20中的着色器中设置该值)表示绑定到纹理图像单元0的2D纹理(通过
glActiveTexture(GL_TEXTURE0);glBindTexture(GL_texture_2D,…;
)是将用于此采样器的纹理

采样器使用整个纹理,包括所有mipmap级别和阵列层。大多数纹理采样函数使用规格化纹理坐标([0,1]映射到纹理的大小)。大多数纹理采样函数也考虑了这一点

这声明了一个图像,它表示纹理中的单个图像。纹理可以是:mipmap级别等。当您使用
glBindImageTexture
时,您是从纹理绑定单个图像

图像和采样器是完全分开的。它们有自己的一套约束指数;将纹理绑定到
GL_TEXTURE0
和将不同纹理的图像绑定到图像0是非常有效的。为关联采样器使用纹理函数将从绑定到
GL_TEXTURE0
的内容中读取,而关联图像变量上的图像函数将从绑定到图像绑定0的图像中读取

图像访问将忽略所有采样参数。始终使用整数纹理坐标

采样器只能从纹理读取数据;图像变量可以读取和/或写入数据,也可以对其执行原子操作。当然,从着色器写入数据需要特别小心,特别是在以下情况下

uniform sampler2D img_input;
layout(binding = 0) uniform sampler2D img_input;
layout (binding = 0, rgba32f) uniform image2D img_input;