GL_R16和GL_R16UI之间的区别?

时间:2014-05-08 05:53:31

标签: opengl graphics glsl shader

根据wiki,区别在于R16是标准化的而R16UI不是。这实际上是什么意思?它们都在内部以相同的方式存储,如无符号整数,一个假设代表一个规范化的整数,一个假设只是一个整数,实际上并没有告诉我什么。在着色器中对这两种类型进行采样时,仍然可以在0到1范围内获得标准化值吗?那有什么区别?

1 个答案:

答案 0 :(得分:3)

您以不同方式对其进行抽样。对于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等)非常相似,只是内部精度是其两倍。

请注意,所有整数纹理(包括R16UI)仅支持NEAREST过滤,或NEAREST_MIPMAP_NEAREST用于缩小过滤器。

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