2011-12-12 139 views
1

我有一個應用程序,它使用帶有擴展SurfaceView的類來繪製到畫布上,但我正在轉向openGL。我注意到,如果我只是將SurfaceView擴展更改爲GLSurfaceView,應用程序仍然運行相同。我還能夠使用openGL ES在另一個應用程序中開始基本繪圖。結合畫布和OpenGL ES渲染器?

我把它作爲下一步,爲GLSurfaceView中的渲染器實例化另一個類,並且我指示渲染器繪製一個三角形。這一切都編譯和運行良好,但它運行完全像原來的應用程序,沒有三角形呈現,但畫布的其餘部分正確繪製。

我想不出它爲什麼不渲染,或者它爲什麼不渲染。或者它可能是渲染,但它只是被畫布覆蓋?

我知道這似乎很奇怪,嘗試使用這兩種方法,因爲我的應用程序是活的,我寧願實現切換渲染過我自己的速度GL,這樣它並不需要我每月能拿到下一更新。

所以有人試過這樣做嗎?在畫布上運行一個Gl渲染器?

回答

1

您不能同時使用OpenGL和Canvas在單個SurfaceView上進行渲染。但是,您可以在SurfaceView的頂部放置另一個視圖以獲得所需的效果。

+1

好吧,這聽起來像是一個很好的開始。問題,這個概念如何與setContentView()方法一起工作? – cody

2

嘗試以下操作:

addContentView(SurfaceView); 
addContentView(GLSurfaceView); 

或者創建擁有兩種觀點相對佈局。

2

在這裏將我的示例代碼當畫布OpenGL的看法,感謝@Audrius Butkevicius!

mGLView = new MyOpenGLSurfaceView; 
// SET OpenGL View 
setContentView(myOpenGLView); 


mCanvasOverlayView = new View(context) 
mOverlayViewParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
// ADD Canvas view overlay 
addContentView(mCanvasOverlayView, mOverlayViewParams);