2016-09-26 21 views
0

mediump float在GLES着色器中应该足够用于纹理坐标,但对于屏幕坐标来说足够了吗?GLES mediump float是否具有足够的精度来映射显示坐标?

按照this answermediump float具有范围量好 - 从-16384+16384,但是精度只有10位,这意味着,上面+1024或低于-1024,浮子变量可以以递增只有两个像素如果我对它的理解正确,那么你会在屏幕边缘附近的纹理之间产生像素误差和接缝。

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

我猜想1920x1080屏幕仍然可以,如果您使用屏幕中间作为零坐标,而不是左上角或左下角,并且小心您正在这些屏幕上执行的算术运算变量永远不会超过其安全-1024:+1024范围。

手机制造商也可以增加其GFX硬件浮点精度超过规格,以匹配他们更大的屏幕,但我怀疑他们会。

有人可以确认吗?

回答

0

大多数GPU都可能将半双精度浮点数实现为中等。这比中介所允许的最小值要好一点,因为它可以表示范围为-2048至2048(Source)范围内的所有整数,而不是-1024至1024,这是您担心的。

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

但是,你绝对正确的是,中值会导致高分辨率屏幕上的问题,你将无法指定确切的坐标。

我总是建议使用highp来定位位置坐标和任何矩阵。但是,即使您这样做,高分辨率屏幕上也存在一个问题,gl_FragCoord可以作为中介实施(some discussion here