我正在使用 Android 版 LibGDX。我的片段和顶点着色器如下片段着色器:#ifdef GL_ES#define LOW lowp#define MED mediump#define HIGH highpprecision mediump float;#else#define MED#define LOW#define HIGH#endifvarying vec4 v_color;varying vec2 v_texCoords;uniform sampler2D u_texture;uniform vec2 oneOverResolution;vec2 frgCOverRes;void main() { frgCOverRes = gl_FragCoord.xy*oneOverResolution.xy; frgCOverRes.y = -frgCOverRes.y+1; vec4 c = texture2D(u_texture, frgCOverRes); gl_FragColor = c;}顶点着色器:attribute vec4 a_position;attribute vec4 a_color;attribute vec2 a_texCoord0;uniform mat4 u_projTrans;varying vec4 v_color;varying vec2 v_texCoords;void main() { v_color = a_color; v_texCoords = a_texCoord0; gl_Position = u_projTrans * a_position;}但我读到highp与某些设备不兼容。而且也没有使用过(中、低p也没有使用过)。所以我要将片段着色器更改为以下代码:#ifdef GL_ESprecision mediump float;#endifvarying vec4 v_color;varying vec2 v_texCoords;uniform sampler2D u_texture;uniform vec2 oneOverResolution;vec2 frgCOverRes;void main() { frgCOverRes = gl_FragCoord.xy*oneOverResolution.xy; frgCOverRes.y = -frgCOverRes.y+1.0; vec4 c = texture2D(u_texture, frgCOverRes); gl_FragColor = c;}我使用 9 作为 minSdkVersion。我已经在模拟器和我的手机(华为j6ii)中测试了这段代码。但对其他设备有疑问。这个片段着色器是否与所有设备兼容?
1 回答
慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
这个片段着色器与所有设备兼容吗?
它应该适用于任何支持 OpenGL ES 2.0 及以上版本的设备。
一个观察结果是,对每个像素执行此操作的成本比实际需要的要高:
frgCOverRes = gl_FragCoord.xy * oneOverResolution.xy; frgCOverRes.y = -frgCOverRes.y + 1.0;
为什么不首先上传正确的纹理坐标呢?y 轴翻转应该是可预测的。(如果失败,最好在每个顶点的顶点着色器中纠正它,而不是每个片段)。
添加回答
举报
0/150
提交
取消