Opengl GL_R16和GL_R16UI之间的区别?

Opengl GL_R16和GL_R16UI之间的区别?,opengl,graphics,glsl,shader,Opengl,Graphics,Glsl,Shader,根据,区别在于R16是标准化的,而R16UI不是。这实际上意味着什么?它们在内部以相同的方式存储,作为无符号整数,假设一个表示规范化整数,一个仅表示整数,这一事实并不能真正告诉我任何事情。在着色器中对这两种类型进行采样时,仍然会在0到1的范围内获得规格化值,对吗?那么区别是什么呢?您对它们的采样方式不同。对于R16纹理,着色器中会有类似的内容: uniform sampler2D tex; in vec2 texCoord; ... float val = texture(tex, texCoo

根据,区别在于R16是标准化的,而R16UI不是。这实际上意味着什么?它们在内部以相同的方式存储,作为无符号整数,假设一个表示规范化整数,一个仅表示整数,这一事实并不能真正告诉我任何事情。在着色器中对这两种类型进行采样时,仍然会在0到1的范围内获得规格化值,对吗?那么区别是什么呢?

您对它们的采样方式不同。对于R16纹理,着色器中会有类似的内容:

uniform sampler2D tex;
in vec2 texCoord;
...
float val = texture(tex, texCoord).r;
对于R16UI纹理,它将如下所示:

uniform usampler2D tex;
in vec2 texCoord;
...
uint val = texture(tex, texCoord).r;
所以对于R16UI,在采样时读取一个整数值。另一方面,R16的行为与R8和类似格式(RGBA8等)非常相似,只是其内部精度是R8的两倍

请注意,所有整数纹理(包括R16UI)仅支持最近的过滤,或最接近缩小过滤器的最近的_MIPMAP_


当整数纹理用作渲染目标时,还有其他约束。例如,不支持混合。在使用整数渲染目标之前,请参阅规范以避免意外情况。

另外值得注意的是,对于非规范化整数格式,纹理过滤也不可用。@derhass:同意。我正要睡觉的时候打了这个。当我开始时,我可以尝试添加更多细节。