我在使用Android NDK的OpenGL應用程序中混合了一個圖形故障。adb screencap輸出與設備上的不同
奇怪的是,當我通過adb screencap
命令截圖時,問題完全消失,結果看起來沒問題。
我的問題是: 有沒有辦法知道背後的幕後製作截圖?例如,是否有eglChooseConfig
用整個框架的某些特定值調用?或者也許有一些特定的初始GL狀態被迫?
一些背景:當我打電話glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
一些幾何
我的設備所採用了高通的Adreno 320
發生的glich。
我也發現設置glColorMask(1, 1, 1, 0)
會導致我的設備(僅在此設備上)出現黑屏,而截取屏幕會產生完整的正確遊戲幀。
該應用程序不會在其他幾個Android設備上輸出故障,其他應用程序也可以正常工作,即使那些使用大量混合的應用程序也能正常工作。
FWIW,Grafika選擇alpha大小爲8(https://github.com/google/grafika/blob/master/src/com/android/grafika/gles/EglCore.java#L144),我從未見過任何奇怪的東西。我猜想大多數GLES應用程序都使用這種配置(32位RGBA)。屏幕截圖代碼組合了呈現的輸出,我不希望用於blitting的EGL配置具有「修復」渲染的效果。所以這是一個非常有趣的數據點,但我懷疑還有更多。這可能是值得恢復的alpha大小,並添加'EGL_RENDERABLE_TYPE'看看這是否也改變了事情。 – fadden
對 - 我沒有想到這些其他配置變量。雖然,我已經嘗試了所有9個配置,但未註釋EGL_ALPHA_SIZE,它們都產生了不正確的結果。 我不認爲解決這個謎題值得付出努力,它很可能是這些模型已知的驅動程序錯誤之一,並且這個模型甚至不支持glBlendFuncSeparate(!) –