gpt4 book ai didi

java - Android LibGDX 着色器兼容性

转载 作者:行者123 更新时间:2023-12-02 09:24:52 31 4
gpt4 key购买 nike

我正在使用适用于 Android 的 LibGDX。我的 fragment 和顶点着色器如下

fragment 着色器:

#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也没有使用过)。

所以我要将 fragment 着色器更改为以下代码:

#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)中测试了此代码。

但对其他设备有疑问。

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

最佳答案

Does this fragment shader compatible with all device?

它应该适用于任何支持 OpenGL ES 2.0 及以上版本的设备。

一个观察结果是,按像素执行此操作的成本比实际需要的要高:

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

为什么不首先上传正确的纹理坐标呢? y 轴翻转应该是可预测的。 (如果失败,最好在每个顶点的顶点着色器中纠正它,而不是每个 fragment )。

关于java - Android LibGDX 着色器兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58406471/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com