Android LibGDX 着色器兼容性

我正在使用 Android 版 LibGDX。我的片段和顶点着色器如下


片段着色器:


#ifdef GL_ES

#define LOW lowp

#define MED mediump

#define HIGH highp

precision mediump float;

#else

#define MED

#define LOW

#define HIGH

#endif


varying 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_ES

precision mediump float;

#endif


varying 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)中测试了这段代码。


但对其他设备有疑问。


这个片段着色器是否与所有设备兼容?


红颜莎娜
浏览 45回答 1
1回答

慕尼黑的夜晚无繁华

这个片段着色器与所有设备兼容吗?它应该适用于任何支持 OpenGL ES 2.0 及以上版本的设备。一个观察结果是,对每个像素执行此操作的成本比实际需要的要高:frgCOverRes = gl_FragCoord.xy * oneOverResolution.xy; frgCOverRes.y = -frgCOverRes.y + 1.0;为什么不首先上传正确的纹理坐标呢?y 轴翻转应该是可预测的。(如果失败,最好在每个顶点的顶点着色器中纠正它,而不是每个片段)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java