GLES mediump float 是否具有足够的精度来映射显示坐标?

Does GLES mediump float have enough precision for mapping display coordinates?

mediump float 在 GLES 着色器中应该足够用于纹理坐标,但它是否足够用于屏幕坐标?

根据 this answermediump float 的范围很大 - 从 -16384+16384,但是精度只有 10 位,这意味着在 +1024 以上或 -1024 以下,浮点变量一次只能增加两个像素,如果我理解正确的话,所以你会在屏幕边缘附近的纹理之间出现像素错误和接缝。

随着现代 phone 的显示分辨率上升到 3840x2160,mediop 似乎不足以在顶点着色器中指定像素完美的屏幕坐标。

我想1920x1080屏幕还是可以的,如果你使用屏幕中间作为你的零坐标,而不是左上角或左下角,注意算术运算您对这些变量的执行不会超出它们的安全 -1024:+1024 范围。

phone 制造商还可以将其 GFX 硬件的浮点精度提高到规格以上,以匹配更大的屏幕,但我怀疑他们会这样做。

有人可以确认一下吗?

大多数 GPU 可能将 mediop 实现为半精度浮点数。这略好于 mediump 允许的最小值,因为它可以表示 -2048 到 2048 (Source) 范围内的所有整数,而不是您担心的 -1024 到 1024。

此外,在正确焊接的几何体上不应该有可见的接缝,因为光栅化规则会避免这种情况。

但是您完全正确,mediump 会在高分辨率屏幕上引起问题,您将无法指定确切的坐标。

我总是建议将 highp 用于位置坐标和任何对位置进行操作的矩阵。但是,即使您这样做了,在高分辨率屏幕上也存在一个问题,即 gl_FragCoord 可以实现为 mediump (some discussion here)