保证不对整数纹理进行抗锯齿渲染

Guarantee no anti-aliasing rendering to integer texture

对于 WebGL 2 canvas,我需要一个简单的 'picking' 系统,即给定 2D 中的点 p,系统可以判断哪个对象(如果有的话)被渲染为 p。 (我不需要 CPU 中的拾取结果,只需要在着色器中。)

为实现这一点,每个对象都将使用不同的 'color id' 渲染到专用于拾取的帧缓冲区。我正在考虑使用 R16UI 或 R32UI 纹理格式,以及 GL_NEAREST 过滤。我关心的是抗锯齿:我如何保证对象的边缘不会被抗锯齿,从而改变输出值,并破坏拾取系统?

我正在寻找禁用抗锯齿的代码,以及为什么这 is/isn 不能保证的解释,来自了解标准的人。

WebGL(和 OpenGL ES)不会以任何自动方式对帧缓冲区进行抗锯齿处理。帧缓冲区的抗锯齿是手动操作。在 WebGL1 中,您根本无法对帧缓冲区进行抗锯齿处理。在 WebGL2 中,您将创建一个多重采样渲染缓冲区。所以基本上,如果您不创建多重采样渲染缓冲区,您将无法获得抗锯齿效果。

此外,Integer 和 Unsigned integer 纹理不可过滤,这意味着它们仅支持 gl.NEAREST

所以没有什么可以给你看的。如果您使用 R16UIR32UI 纹理并对其进行渲染,它将如您所愿地工作。