在片段着色器中改变纹理坐标时的像素化结果

Pixelated results when altering texture coordinates in fragment shader

我正在尝试更改片段着色器中的纹理坐标。 精度设置为中等。 它适用于某些设备,但会在某些(更便宜的)设备上导致严重的像素化。 我认为这是一个精度问题,但它很奇怪,因为我将默认设置为 medium,它应该在所有设备上都可用。任何的想法?谢谢你的时间。

+"mediump vec2 coords=v_TexCoordinate;   \n"
+"coords+=0.1;   \n"

mediump 仅根据最小允许精度在规范中定义。有些设备可以将 mediump 实现为 highp(即或多或少是单精度 32 位浮点数)。

可能还有其他设备真正具有 mediump(类似半精度浮点数)和独立的 highp 在硬件中,但使用一些试探法来注意到它是一个纹理坐标并决定你最好使用更高的精度.

其他设备仍然可以将您的琐碎的 tex 坐标修改移动到顶点着色器,并将使用顶点着色器输出的纹理坐标在片段着色器甚至执行之前预取纹理元素(从而避免片段着色器的 shonky完全精确)。

因此,仅仅因为您到处都需要 mediump,您只能在您的一部分设备上重现精度问题并不罕见。

就修复它而言 - 根据您在问题中包含的内容,您可以只对顶点着色器进行 tex 坐标修改。