gpt4 book ai didi

opengl - glBindImageTexture() 和 glBindTexture() 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 03:26:09 29 4
gpt4 key购买 nike

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

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


uniform sampler2D img_input;

最佳答案

layout(binding = 0) uniform sampler2D img_input;

这声明了 sampler ,它从纹理对象中获取数据。 0 的绑定(bind)(您可以在 GLSL 4.20 的着色器中设置)表示绑定(bind)到纹理图像单元 0 的 2D 纹理(通过 glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_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 ,您正在绑定(bind)纹理中的单个图像。
图像和采样器是完全分开的。他们有自己的一套绑定(bind)索引;将纹理绑定(bind)到 GL_TEXTURE0 是完全有效的以及从不同纹理到图像绑定(bind) 0 的图像。对关联的采样器使用纹理函数将从绑定(bind)到 GL_TEXTURE0 的内容中读取。 ,而相关图像变量上的图像函数将从绑定(bind)到图像绑定(bind) 0 的图像中读取。
图像访问忽略所有采样参数。 Image accessing functions始终使用整数纹理坐标。
采样器只能从纹理中读取数据;图像变量可以读取和/或写入数据,以及对它们执行原子操作。当然,从着色器写入数据需要特别小心,尤其是在 someone goes to read that data 时。 .

关于opengl - glBindImageTexture() 和 glBindTexture() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37136813/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com