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

时间:2016-09-26 16:07:50

标签: shader opengl-es-2.0 vertex-shader

GLES着色器中的

mediump float应该足够用于纹理坐标,但它对于屏幕坐标是否足够?

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

现代手机的显示分辨率达到3840x2160,看起来mediump不足以在顶点着色器中指定像素完美的屏幕坐标。

我猜1920x1080屏幕仍然没问题,如果您使用屏幕中间作为零坐标,而不是左上角或左下角,请注意算术运算对这些变量执行操作永远不会超过其安全-1024:+1024范围。

手机制造商也可以将GFX硬件的浮点精度提高到规格以上,以匹配更大的屏幕,但我怀疑他们会不会。

有人可以确认吗?

1 个答案:

答案 0 :(得分:0)

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

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

但是你绝对正确的是,mediump会在高分辨率屏幕上引起问题,你将无法指定精确的坐标。

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