我正在使用 Android 版 LibGDX。我的片段和頂點(diǎn)著色器如下片段著色器:#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;}頂點(diǎn)著色器: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與某些設(shè)備不兼容。而且也沒有使用過(中、低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。我已經(jīng)在模擬器和我的手機(jī)(華為j6ii)中測(cè)試了這段代碼。但對(duì)其他設(shè)備有疑問。這個(gè)片段著色器是否與所有設(shè)備兼容?
1 回答

慕尼黑的夜晚無繁華
TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊
這個(gè)片段著色器與所有設(shè)備兼容嗎?
它應(yīng)該適用于任何支持 OpenGL ES 2.0 及以上版本的設(shè)備。
一個(gè)觀察結(jié)果是,對(duì)每個(gè)像素執(zhí)行此操作的成本比實(shí)際需要的要高:
frgCOverRes = gl_FragCoord.xy * oneOverResolution.xy; frgCOverRes.y = -frgCOverRes.y + 1.0;
為什么不首先上傳正確的紋理坐標(biāo)呢?y 軸翻轉(zhuǎn)應(yīng)該是可預(yù)測(cè)的。(如果失敗,最好在每個(gè)頂點(diǎn)的頂點(diǎn)著色器中糾正它,而不是每個(gè)片段)。
添加回答
舉報(bào)
0/150
提交
取消