簡體   English   中英

在某些Android設備上具有OpenGL ES 2.0的添加混合偽像

[英]Additive blending artefacts with OpenGL ES 2.0 on some Android devices

我正在為Android和iOS開發跨平台游戲。 對於幾個類似廣告牌的對象,我正在使用具有黑色背景紋理的加法混合( glBlend(GL_ONE, GL_ONE) )。 幾乎在任何地方,渲染的對象看起來都很好(即,紋理中的黑色像素看起來完全透明)。 但是,在帶有Adreno GPU的兩個不同的Android設備(一個Nexus 4和另一個Sony Xperia Go)上,我有這樣的偽像: 在此處輸入圖片說明

如通過漢堡包圖標可見,背景色滲入渲染的四邊形。 我假設這是背景色滲色,因為當廣告牌四邊形位於背景正前方時,效果不明顯。 為了使事情變得更怪異,當我從設備上截取屏幕截圖時,效果是不可見的,因此我必須使用另一台攝像機拍攝屏幕圖像。 我還注意到,當我從Android開發人員設置中啟用“ Disable HW Overlays時,偽像消失了。 當我在屏幕上還有另一個透明窗口時,例如按音量按鈕時的音量滑塊,偽影也會消失。

渲染場景時,首先在第一遍渲染不透明的對象,然后在第二遍渲染,使用glBlend(GL_ONE, GL_ONE)並禁用深度寫入來渲染我的透明廣告牌。

僅作記錄,我花了很長時間才找到罪魁禍首,但最終我找到了原因。 事實證明,並非我所有“應該”的不透明對象都是真正不透明的(即它們的alpha值<1.0)。

因此,在使用硬件覆蓋的設備上,偽像變得可見,而在具有單個硬件覆蓋的設備上,則看起來不錯。 我不是100%確信,但是當我在應用程序窗口頂部有一個疊加窗口(例如系統音量欄)批准時,其效果與疊加有關。

確定所有不透明對象確實是不透明后,問題消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM