结合画布和OpenGL ES渲染器?
问题描述:
我有一个应用程序,它使用带有扩展SurfaceView的类来绘制到画布上,但我正在转向openGL。我注意到,如果我只是将SurfaceView扩展更改为GLSurfaceView,应用程序仍然运行相同。我还能够使用openGL ES在另一个应用程序中开始基本绘图。结合画布和OpenGL ES渲染器?
我把它作为下一步,为GLSurfaceView中的渲染器实例化另一个类,并且我指示渲染器绘制一个三角形。这一切都编译和运行良好,但它运行完全像原来的应用程序,没有三角形呈现,但画布的其余部分正确绘制。
我想不出它为什么不渲染,或者它为什么不渲染。或者它可能是渲染,但它只是被画布覆盖?
我知道这似乎很奇怪,尝试使用这两种方法,因为我的应用程序是活的,我宁愿实现切换渲染过我自己的速度GL,这样它并不需要我每月能拿到下一更新。
所以有人试过这样做吗?在画布上运行一个Gl渲染器?
答
您不能同时使用OpenGL和Canvas在单个SurfaceView上进行渲染。但是,您可以在SurfaceView的顶部放置另一个视图以获得所需的效果。
答
尝试以下操作:
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);
好吧,这听起来像是一个很好的开始。问题,这个概念如何与setContentView()方法一起工作? – cody