根据维基百科上的介绍,R16与R16UI之间的区别在于R16是规格化的,而R16UI则不是。这实际上意味着什么?它们在内部存储方式上是相同的,都被当作无符号整数处理。一个表示规格化整数,一个表示普通整数,这并不能真正告诉我任何东西。当你在着色器中对这两种类型进行采样时,你仍然会得到0到1范围内的规格化值,那么它们之间有什么区别呢?
你需要在着色器中使用特定的代码来处理 R16 纹理。
uniform sampler2D tex;
in vec2 texCoord;
...
float val = texture(tex, texCoord).r;
uniform usampler2D tex;
in vec2 texCoord;
...
uint val = texture(tex, texCoord).r;
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
。 - Luke Skywalker