结合Canvas和OpenGL ES渲染器?

时间:2011-12-12 16:28:04

标签: java android opengl-es canvas rendering

我有一个应用程序使用带有扩展SurfaceView的类来绘制到画布,但我正在考虑转移到openGL。我注意到,如果我只是将SurfaceView扩展更改为GLSurfaceView,则应用程序仍然运行相同。我也可以使用openGL ES在另一个应用程序中开始基本绘图。

我接下来一步,在GLSurfaceView中为渲染器实例化了另一个类,并指示渲染绘制一个三角形。这一切都编译并运行良好,但它的运行方式与原始应用程序完全相同,没有渲染三角形,但画布的其余部分正确绘制。

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

我知道尝试使用这两种方法似乎很奇怪,因为我的应用程序是实时的,我宁愿按照我自己的步调将渲染切换到GL,这样我就不需要一个月的时间来进行下一次更新出。

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

3 个答案:

答案 0 :(得分:2)

尝试以下方法:

addContentView(SurfaceView);
addContentView(GLSurfaceView);

或使用两个视图创建相对布局。

答案 1 :(得分:2)

这是我在OpenGL视图中添加 over 时的示例代码,感谢@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 );

答案 2 :(得分:1)

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