2012-12-20 61 views
0

將「OpenGL」添加到「嚴重」(而不是遊戲)Android應用程序中是否有任何折衷?在Android應用程序中使用OpenGL的缺點?

我想使用OpenGL的原因是爲幾個視圖添加一些3d行爲。

根據此http://developer.android.com/guide/topics/graphics/opengl.html OpenGL 1.0適用於所有Android設備,不需要修改清單文件。所以永遠不會有兼容性問題。

我能想到的唯一兩件事是1.其他開發者無法使用OpenGL的可持續性。可能2.與其他組件集成問題/不能很好地重用(雖然,不確定)。

還有其他什麼,意想不到的事情,某些類型的開銷,併發症等等?

因爲它似乎不是一種非常流行的做法,所以人們似乎更喜歡用2D來「僞造」3d或放棄它。不知道這是否僅僅是因爲他們不想學習OpenGL。

+0

如果您計劃支持標準應用程序工作流程,使用opengl來管理多個屏幕變得非常困難。在最新的設備中,支持硬件加速,當它可以的時候將工作推向GPU。啓動/拆卸運行opengl所需的開關環境/活動對最終用戶來說非常痛苦。 –

+0

你的意思是哪個啓動/拆卸? – Ixx

+1

嗯,在你的情況下,向自定義視圖添加一些3d特定功能可能不會增加大量開銷,但是在一個體面大小的遊戲中,設置glcontext並將資源加載到內存中需要一些時間。這種情況在暫停時會丟失,需要在簡歷上重新創建,這會導致一些滯後。這真的取決於你想要完成什麼。 –

回答

0

我在一個已發佈的應用程序中使用OpenGL進行一些可視化,並且我有一個未捕獲的異常處理程序來捕獲來自GLThread的任何異常,並在下次運行該應用程序時禁用OpenGL,因爲我有一些崩潰報告GLSurfaceView.java的內部來自buggier設備。如果3D渲染對您的應用程序不是至關重要的,這是您可以採取的一種方法,以便擁有這些設備的用戶可以繼續使用該應用程序。

從Android 3.0+開始,您還可以通過調用GLSurfaceView來保存EGL上下文。 setPreserveEGLContextOnPause(真);.如果渲染器的初始化非常昂貴,那麼只有當您不需要銷燬GLSurfaceView(即旋轉設備時的默認行爲)時才需要執行此操作。如果你沒有加載那麼多的資源,那麼初始化OpenGL通常足夠快。

0

SurfaceView文檔(重點煤礦):

表面是Z-排序使得它是窗口保持其SurfaceView後面; SurfaceView在其窗口上打孔以允許顯示其表面。視圖層次結構將負責正確地合成Surface中通常出現在其上的任何SurfaceView的同胞。這可用於在Surface上放置諸如按鈕之類的疊加層,但請注意,它可能會影響性能,因爲每次Surface變化時都會執行完整的alpha混合組合。

好處是您的GL線程可以獨立於UI線程更新屏幕(即,它不需要渲染到紋理並將紋理渲染到屏幕上);缺點是東西需要複合你的觀點與屏幕。如果幸運的話,可以在「硬件作曲家」中完成。否則會在GPU上完成,可能會對GPU資源造成一些浪費(請參閱For Butter or Worse:平滑Android UI中的性能27:3240:23)。

如果您的視圖很小,最好使用TextureView。這將渲染到紋理並將紋理渲染爲普通視圖層次結構的一部分,這可能會更好,但會增加延遲。缺點是隻有API級別14纔可用。

相關問題