将Canvas和OpenGL ES渲染器结合起来?

3
我有一个应用程序,它使用一个扩展SurfaceView的类来绘制到画布上,但我正在考虑转向OpenGL。我注意到,如果我仅将SurfaceView扩展更改为GLSurfaceView,应用程序仍然运行相同。我还能够在另一个应用程序中使用OpenGL ES开始基本绘图。
我接下来实例化了GLSurfaceView中的另一个渲染器类,并指示渲染器绘制一个三角形。这一切都编译和运行得很好,但它运行起来与原始应用程序完全相同,没有三角形被渲染出来,但其余的画布可以正常绘制。
我想不出为什么它不会渲染,或者为什么它不会渲染。或者它可能正在渲染,但仅仅被画布覆盖了?
我知道尝试同时使用两种方法似乎很奇怪,因为我的应用程序已经上线,我宁愿按照自己的步调实现将渲染切换到GL,以便不需要花费一个月的时间发布下一个更新。
所以有人试过这样做吗?在画布上运行Gl渲染器?
3个回答

2
您不能同时使用OpenGL和Canvas在单个SurfaceView上进行渲染。但是,您可以将另一个View放在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 );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接