结合画布和OpenGL ES渲染器?

问题描述:

我有一个应用程序,它使用带有扩展SurfaceView的类来绘制到画布上,但我正在转向openGL。我注意到,如果我只是将SurfaceView扩展更改为GLSurfaceView,应用程序仍然运行相同。我还能够使用openGL ES在另一个应用程序中开始基本绘图。结合画布和OpenGL ES渲染器?

我把它作为下一步,为GLSurfaceView中的渲染器实例化另一个类,并且我指示渲染器绘制一个三角形。这一切都编译和运行良好,但它运行完全像原来的应用程序,没有三角形呈现,但画布的其余部分正确绘制。

我想不出它为什么不渲染,或者它为什么不渲染。或者它可能是渲染,但它只是被画布覆盖?

我知道这似乎很奇怪,尝试使用这两种方法,因为我的应用程序是活的,我宁愿实现切换渲染过我自己的速度GL,这样它并不需要我每月能拿到下一更新。

所以有人试过这样做吗?在画布上运行一个Gl渲染器?

您不能同时使用OpenGL和Canvas在单个SurfaceView上进行渲染。但是,您可以在SurfaceView的顶部放置另一个视图以获得所需的效果。

+1

好吧,这听起来像是一个很好的开始。问题,这个概念如何与setContentView()方法一起工作? – cody

尝试以下操作:

addContentView(SurfaceView); 
addContentView(GLSurfaceView); 

或者创建拥有两种观点相对布局。

在这里将我的示例代码当画布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);