Java Android LibGDX着色器兼容性

Java Android LibGDX着色器兼容性,java,android,opengl-es,libgdx,Java,Android,Opengl Es,Libgdx,我在用LibGDX做Android。 我的片段和顶点着色器如下所示 片段着色器: #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 sampler2

我在用LibGDX做Android。 我的片段和顶点着色器如下所示

片段着色器:

#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;
}
顶点着色器:

#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与某些设备不兼容

而且它也没有被使用(mediump,lowp也没有被使用)

因此,我将把片段着色器更改为以下代码:

#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作为版本

我已经在Emulator和我的手机(HuaweiJ6II)上测试了这段代码

但对其他设备有疑问

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

此片段着色器是否与所有设备兼容

它应该适用于任何支持OpenGL ES 2.0的设备

一个观察结果是,每像素进行此操作的成本比需要的更高:

frgCOverRes = gl_FragCoord.xy * oneOverResolution.xy;
frgCOverRes.y = -frgCOverRes.y + 1.0;

为什么不首先上传正确的纹理坐标?y形翻转应该是可预测的。(如果不能做到这一点,最好在顶点着色器中逐顶点而不是逐片段进行更正)。

texture2D
已被弃用,但您应该可以。