2014-11-23 31 views
0

我想在原始圖像上進行圖像處理而不在屏幕上顯示(我想根據圖像數據進行一些計算並在屏幕上顯示一些結果。計算)我發現一個有趣的答案this question,如下所示:使用OpenGL進行圖像處理 - 設置OpenGL上下文

請在GPU的實際處理:設置OpenGL上下文(OpenGL的 ES 2教程),並建立在這方面一個表面紋理對象。 然後將該對象傳遞給setPreviewTexture,並開始預覽。然後,在您的OpenGL代碼中,您可以調用SurfaceTexture.updateTexImage,並且 與SurfaceTexture關聯的紋理ID將更新爲 來自相機的最新預覽幀。如果需要,還可以使用glReadPixels將 RGB紋理數據讀回到CPU以進行進一步處理, 。

我有一個關於如何去實現它的問題。

我是否需要創建GLSurfaceViewRenderer,我實際上並不想使用OpenGL在屏幕上繪製任何東西,因此我不確定是否需要它們?從我在網上閱讀的內容看,雖然看起來非常重要,但爲了設置OpenGL上下文,還需要這些內容?任何人都可以給我這個指針?

回答

1

您不要必須使用GLSurfaceViewGLSurfaceView是純粹用Java編寫的便利類。它簡化了想要在Android中使用OpenGL渲染的應用程序的設置部分,但其所有功能也可以通過Android框架中的低級接口獲得。

對於純粹的離屏渲染,您可以使用EGL接口有點混亂的創建上下文,表面等,有兩個版本在Android框架的完全不同的部分:

  • EGL10EGL11javax.microedition.khronos.egl包,由於在android.opengl包API級別1
  • EGL14可用,因爲API級別可用17.

它們非常相似,但較新的EGL14顯然有更多的功能。如果您的目標至少是API級別17,那麼我會選擇更新的版本。

使用EGL14類中的方法,可以創建上下文,曲面等。對於離屏渲染,一種選擇是創建用於渲染的Pbuffer曲面。要完成設置,您通常會使用類似功能:

eglInitialize 
eglChooseConfig 
eglCreatePbufferSurface 
eglCreateContext 
eglMakeCurrent 

的Android文檔並不能真正說明這些功能,但你可以找到在Khronos的網站上的實際的文件:https://www.khronos.org/registry/egl/sdk/docs/man/