![](/img/trans.png)
[英]How create GLES 2.0 offscreen framebuffer object (in Xamarin for Android)?
[英]GLES2.0+ framebuffer fade artifacts
我正在使用GLES 2.0或3.0在android上編寫一個簡單的測試程序。 (如果該解決方案只適用於另一種解決方案,那我將使用它。)
問題:
例:
布局:
渲染代碼:
int i = 0;
@Override public void onDrawView() {
setRenderTarget(mRenderTexture[i]);
mTestShader.setTexture0(mRenderTexture[(i + 1) % 2].getTextureHandle());
mTestShader.draw(mBlitQuad);
setRenderTarget(null);
mBlitShader.setTexture0(mRenderTexture[i].getTextureHandle());
mBlitShader.draw(mBlitQuad);
i = ++i % 2;
}
着色器代碼:
precision highp float;
uniform float u_GlobalTime;
uniform vec3 u_Resolution;
uniform sampler2D u_Texture0;
varying vec2 v_TexCoord;
void main(void) {
vec2 uv = v_TexCoord * 2.0 - 1.0;
uv.x *= u_Resolution.z;
vec2 pos = vec2(cos(u_GlobalTime), sin(u_GlobalTime)) * 0.5;
vec4 circle = vec4(1.0 - smoothstep(0.09, 0.11, length(pos - uv)));
vec4 px = max(texture2D(u_Texture0, v_TexCoord), circle) - 0.025;
gl_FragColor = step(0.15, px) * px;
}
在這個問題上有幫助嗎?
編輯:
經過對Jerem的抖動研究后,我找到了GLES20.glDisable(GLES20.GL_DITHER)。 這可以幫助解決此問題,並且在更新的設備上可以完美運行。 在較舊的設備上,我仍然在這里遇到偽像。
EDIT2:
經過更多測試后,切換到甚至具有RGB顏色的緩沖區格式似乎已經達到了GLES30.GL_UNSIGNED_SHORT_5_5_5_1的目的。 我的猜測是,這與GPU如何壓縮幀緩沖區有關,因為綠色更加明顯。 (了解為什么它不喜歡5_6_5格式的具體原因仍然很有幫助。)
應用兩種修復程序后的最終結果:i.imgur.com/bQsG9YJ.png。
它是一個多部分解決方案,稱為GLES20.glDisable(GLES20.GL_DITHER),將渲染緩沖區格式設置為GLES30.GL_UNSIGNED_SHORT_5_5_5_1,並且正如Jerem所說,即使對alpha進行了實驗,您也可以得到更好的結果。我的設備選擇似乎沒有作用,可能對其他設備沒有影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.