2012-03-21 42 views
7

我需要將一些像素着色器應用到位圖(使用OpenGL)並將結果發送到服務器。渲染應該在後臺進行,所以我無法爲此創建GLSurfaceView。所以我的問題是:是否可以在不使用GLSurfaceView的情況下在Android上進行OpenGL渲染?像直接渲染到位圖,或畫布或某種緩衝區/數組?或者可以通過它可以使用某種虛擬GLSurfaceView?OpenGl直接渲染位圖(沒有任何視圖)

+0

[在後臺運行Android OpenGL作爲應用程序的呈現資源?]的可能的副本(http://stackoverflow.com/questions/6524212/run-android-opengl-in-background-as-rendering-resource-for-應用程序) – 2017-02-16 10:19:23

回答

4

This SO post包含一個鏈接到an anddev post樣本。有點向下,有人創建了一個PixelBuffer類,重用了GLSurfaceView.Renderer接口,但除此之外,只有EGL。

+0

幸運的是,我剛剛完成了基於相同想法的自己的渲染器。謝謝你的答案和鏈接思想。它對其他人可能有用。 – 2012-03-23 07:38:37

+0

提到的PixelBuffer對象確實包含了一個很好的概念證明,但它存在一個嚴重的性能問題:一旦緩衝區被渲染,位圖的第二個副本就會通過在一個循環中複製每個像素而產生100%或更多運行時增加!只是表明將參考框架保持在OGL中是很重要的。 – tomwhipple 2012-06-21 00:56:25

+1

另外,PixelBuffer可以在一些手機上工作,但不能用於其他手機。耶破碎! – tomwhipple 2012-06-21 01:23:32

0

聽起來你想渲染到幀緩衝區對象(即直接渲染到紋理)。這絕對有可能。只需在這裏或網絡上搜索答案即可。我發現這一個沒有太努力。我不確定您是否使用GL ES 1.1或2.0。

http://blog.shayanjaved.com/2011/05/13/android-opengl-es-2-0-render-to-texture/

它也像在SDK APIDemos有1.1

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/FrameBufferObjectActivity.html

+0

謝謝你的答案。正如我所看到的,這兩種方法都依賴於GLSurfaceView。我需要我的渲染沒有任何屏幕/活動/佈局可用。我的意思是在一些後臺線程。我不知道GLSurfaceView是否能夠創建GL上下文而不能初始化它的表面(因爲它需要一個屏幕來繪製)。無論如何,謝謝你的提示,這似乎是有用的。 – 2012-03-21 15:18:33

+0

@boulder是否GLSurfaceView不初始化,如果它離開屏幕?如果在屏幕上顯示1px,該怎麼辦? – 2014-03-02 22:12:11

+0

@BradMoore我現在不記得了。你可以很容易地檢查這個。據我記得,沒有屏幕就不能使用GLSurfaceView。 1px不是一個選項,因爲渲染應該在服務上完成。 – 2014-03-04 13:05:12