为了账号安全,请及时绑定邮箱和手机立即绑定

Android LibGDX 着色器兼容性

Android LibGDX 着色器兼容性

红颜莎娜 2023-11-01 17:04:32
我正在使用 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 轴翻转应该是可预测的。(如果失败,最好在每个顶点的顶点着色器中纠正它,而不是每个片段)。


查看完整回答
反对 回复 2023-11-01
  • 1 回答
  • 0 关注
  • 68 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信