Android:选择SurfaceView还是OpenGL(GLSurfaceView)

21

在规划阶段,是否有一种方法可以根据游戏/应用程序的预期复杂度来决定是使用SurfaceView中的常规Canvas绘图还是使用OpenGL?

我一直在尝试使用Canvas进行2D移动,而且在一部相当新的手机上,我在一个纯色背景上运行一堆基本对象和几个位图,屏幕上运行得非常流畅。

如果我要绘制背景图像并增加正在移动并在其上绘制的对象数量,那么直接使用OpenGL是否更好呢?

2个回答

31
我能说的是,这取决于你打算使用多少精灵。来自Google的Chris Pruett也非常好地记录了这一部分。 Google I/O 2009Google I/O 2010
下面是他的幻灯片之一与您的主题相关的图片: enter image description here 有了这些知识,您应该使用OpenGL并使用draw_texture扩展。请记住查询字符串并检查实际设备是否支持draw_texture
有关一般游戏开发的进一步信息,请参见this

4
但是这张图片并没有显示ARM核心和GPU的负载情况。当你使用OpenGL渲染时,你将负载转移到了GPU上,而ARM核心可以用于其他计算任务。我相信Canvas最终会调用Skia进行渲染,而Skia主要使用ARM周期进行渲染。根据你使用的Android版本,Skia的一些部分似乎被硬件加速了。 - videoguy

11

SurfaceView(视图表面)

GLSurfaceView是一个可以使用OpenGL进行渲染的SurfaceView。 在选择它们之间时很简单:

如果你熟悉OpenGL并需要它提供的功能,请使用GLSurfaceView。否则,请使用SurfaceView。OpenGL是低级别的。如果您还不熟悉它,则需要学习。如果您只需要2D绘图,则SurfaceView使用高级,相当高性能的Canvas。非常容易使用。

除非您有充分的理由使用GLSurfaceView,否则应该使用普通的SurfaceView。如果您还不知道是否需要GL,则建议您使用普通SurfaceView。

OpenGL

OpenGL能够轻松处理旋转和缩放。

老实说,您可能需要学习许多与以下主题相关的OpenGL内容:

几何图形、光照(或仅禁用它)、拾取(选择要在其上绘制的图形)、像素映射、纹理映射、Mipmapping。另外,为此学习OpenGL可能过度了,而且您必须非常擅长才能使其高效。

相反,我建议使用构建在OpenGL之上的游戏库的图形组件,例如:

Cocos2d

libgdx

在此处列出的任何引擎

来源

SurfaceView和GLSurfaceView在Android中的区别

Android:Canvas与OpenGL


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