2011-12-20 16 views
6

我發現當我啓用此開發人員選項時,我的OpenGL項目停止工作。有點令人擔憂的是,至少可以說。Android ICS:系統「強制GPU渲染」選項實際上做了什麼?

logcat中顯示了這些數不勝數:

E/libEGL (1022): called unimplemented OpenGL ES API 
E/libEGL (1022): called unimplemented OpenGL ES API 
E/libEGL (1022): called unimplemented OpenGL ES API 
... 

的第一個場景渲染得很好,不過這首先swapbuffers()後,所有susbequent GL ES的API(甚至glSetMatrixMode())做什麼,但登錄 「未實現的API」。

如果我的「強制GPU渲染」選項關閉,這一切都可以很好地工作(即實現)。

那麼,這個選項實際上做了什麼?

回答

3

該選項適用於開發人員,以便他們可以在H/W加速打開的情況下輕鬆測試他們的應用程序。據我瞭解,一個使用Canvas Apis的2D應用程序可以從這個選項中受益,因爲將其打開將確實迫使系統在不同線程上創建本機GLES2.0上下文,並讓Canvas類使用GLES h/w加速後端而不是Skia。這種本地GLES2.0上下文創建發生在C本機代碼中,應用程序開發人員無法控制這一點。回到你的問題,「被稱爲未實現的錯誤消息」基本上是說(1)你確實使用錯誤的GL上下文(例如,使GLES1.1調用與GLES2.0上下文或反之亦然)或(2)您的設備無法加載GLES驅動程序,因此係統無法找到實際的GL函數指針。系統通過讀取egl知道要加載什麼。在/ system/lib/egl /下找到cfg文件,而GL驅動程序本身位於/ system/vendor/lib /下。

我會跟進谷歌,因爲這可能只是一個錯誤。

+0

這對我來說已經足夠接近了,符合觀察以及我在別處學到的知識。我收到了來自Android圖形人員Romain Guy的推文......他說,如果OpenGL應用程序在主UI線程上創建EGL上下文,它將只會遇到這個問題。所有GL調用都在專用線程上運行更爲常見,這是我不喜歡的一個習慣,因爲太無聊了。 – 2011-12-29 14:24:41

+1

@ReubenScratton我在這裏有完全相同的問題,我也在主線程上創建EGL上下文。你有沒有找到一個解決方案,或者你最終使用一個單獨的線程的GL? – 2013-04-12 11:42:29

+1

我最終創建了一個專用渲染線程並將所有GL代碼移入其中。這對於我的需求來說太過於誇張了,大概是你的,但這個特定的操作系統特性假設所有GL應用程序都呈現出主線程,我們必須遵循這一點。 – 2013-04-12 12:22:45

2

它在所有應用程序中強制硬件加速。你可以在這裏閱讀更多關於它的信息:http://developer.android.com/guide/topics/graphics/hardware-accel.html

請務必查看不支持的操作,這可能是您遇到問題的原因。

+0

感謝您的鏈接,但我的用戶界面完全* OpenGL ES ...它已經加速。我不使用任何Canvas API,也不明白爲什麼這個設置會影響基於GL的應用程序。它看起來像這個設置導致一個替代的GL驅動程序被加載。 – 2011-12-21 10:52:41

+0

有趣的是,如果加載另一個驅動程序來爲canvas API做硬件加速,我不會感到驚訝。 (我幾乎100%肯定是你所迫使的)爲了測試我的理論,你可以在你的應用程序清單中啓用hw acc,其sdk目標至少爲3.0。有關說明位於組織結構鏈接中。 – smith324 2011-12-22 00:09:49

0

ICS中的加速模式在Honeycomd中並不特別。默認情況下,針對所有針對api 14或更高版本的應用程序啓用加速模式。但與此同時,還有針對其他版本SDK的應用程序。因此,您可以通過設置「強制GPU渲染」來在這些應用程序中啓用硬件加速。 Dianne有一個很好的explanationpost來解釋這一點。

+0

這確實是來自hackbod的一個好帖子,但不幸的是對我沒有多大幫助。我越來越認爲這是ICS中的一個錯誤。最新的觀察是,在第一幀繪製(成功)後,我的EGLImpl.mEGLContext發生了變化。肯定不會發生。 – 2011-12-26 17:02:12

+0

嘗試在android平臺google組中詢問這個特定問題。 https://groups.google.com/forum/#!forum/android-platform另外我在這裏找到了這個錯誤的一個很好的解釋:http://stackoverflow.com/questions/5926316/android-gles20-called-unimplemented- opengl-es-api – Yury 2011-12-26 17:10:25

+0

我可能會這樣做,我仍在調查。它看起來像操作系統迫使應用程序交換到2.0渲染器,這就是爲什麼glMatrixMode等API都突然不受支持。儘管使用了只有1.1的清單聲明。史詩ICS的位如果這個觀察是正確的失敗... – 2011-12-26 19:20:05

0

如上所述,該選項強制使用圖形硬件加速,它被假定爲API級別14或15的默認值,我的意思是ICS。

我不建議在模擬器上測試它,因爲它會讓你的計算機和Eclipse呆滯和/或崩潰。我已經在模擬器上嘗試過這種設置,它具有API Level 14和15以及的各種資源配置(顯示器,緩存,CPU和RAM的不同大小),它總是會崩潰

這將是更好地測試您的應用雙核設備上,例如最近的三星Galaxy 10.1,8.9平板電腦或摩托羅拉的Xoom平板電腦你有什麼實際的硬件如NVIDIA的Tegra GPU支持,因爲蜂窩加速,使其更好地爲OpenGL ES應用程序......並且由於市場上沒有ICS平板電腦,所以您將無法匹配上述API Level 14和ICS的配置。

我會完成的同意,有一個谷歌尚未解決的問題/ SDK尚未解決。

相關問題