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

时间:2018-01-12 14:17:50

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

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

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

1 个答案:

答案 0 :(得分:1)

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

可能有其他设备真正有一个mediump(半精度浮点数)和硬件中的单独highp,但使用一些启发式来注意它是一个纹理坐标,并决定你用更高的精度更好。 / p>

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

所以,仅仅因为你在任何地方都要求使用mediump,你只能在设备的子集上重复精确度问题并不罕见。

在修复问题方面 - 根据您在问题中的内容,您可以在顶点着色器上进行tex坐标修改。