【问题标题】:What is the difference between glBindImageTexture() and glBindTexture()?glBindImageTexture() 和 glBindTexture() 有什么区别?
【发布时间】:2016-09-05 07:55:54
【问题描述】:

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

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

uniform sampler2D img_input;

【问题讨论】:

    标签: opengl texture2d glteximage2d


    【解决方案1】:
    layout(binding = 0) uniform sampler2D img_input;
    

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

    采样器使用 整个 纹理,包括所有 mipmap 级别和数组层。大多数纹理采样函数使用归一化的纹理坐标([0, 1] 映射到纹理的大小)。大多数纹理采样函数也尊重filtering properties and other sampling parameters

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

    这声明了一个图像,它表示来自纹理的单个图像。纹理可以have multiple images:mipmap 级别、array layers 等。当您使用glBindImageTexture 时,您正在绑定来自纹理的单个图像。

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

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

    采样器只能从纹理中读取数据;图像变量可以读取和/或写入数据,以及对它们执行原子操作。当然,从着色器写入数据需要特别小心,特别是在someone goes to read that data 时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-10
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      • 2012-03-14
      • 2012-02-06
      • 2011-02-25
      • 2011-11-22
      相关资源
      最近更新 更多