硬件加速前蜂窝

时间:2012-03-06 15:41:38

标签: android opengl-es 2d hardware-acceleration

我正在玩Android API,长期开发2D游戏。通常情况下,我只能使用Canvas来绘制精灵作为游戏的图形。我希望能够为视觉效果执行大量绘制,但似乎是Honeycomb之前的Android版本(3.0,API等级11)don't support hardware acceleration

我不确定这究竟意味着什么。我无法让自己相信绘图是由CPU逐像素完成的!?!如果我最终得到像发光,镜头效果等效果......我会在每个像素上画很多次。我是否有理由相信典型的智能手机CPU无法以30 FPS的速度应对?

我没有足够的优势来定位Android版本> = 3.0,因为它们已经不是那么大的Android市场constitute 8%了。我应该花时间去OpenGL方式(我是OpenGL的初学者)吗?如果我这样做,你认为我会通过使用Canvas覆盖GLSurfaceView来处理自定义android视图顶部的效果来获得任何东西。或者,出于任何原因将两者混合起来是个坏主意吗?

1 个答案:

答案 0 :(得分:4)

天啊,是的。特别是如果你的目标是Android 3之前的设备,那么从SurfaceView(使用Canvas.drawXxx()调用)到OpenGlSurface的工作效果很好。您不仅每秒具有更快的帧(更新),而且内存消耗也更好。

以下是我注意到的一些观点:

  • 如果你想做(多个)精灵动画,那么使用加载为OpenGL纹理并在OpenGL四元组上显示的图像来执行它们会为你提供更多的内存空间。这是因为虽然常规Bitmap对象受到每进程Android内存限制(类似于16-48 Mb,取决于设备和Android版本)的限制,但是从这些图像中创建OpenGL纹理(并清除后面的iamges) )没有这个限制。您只受到设备总内存的限制,该内存大于16-48兆。

其次,但仍然与此相关,使用Android 2及以下跟踪Bitmap实例占用多少内存是非常棘手的,因为这些内容不会针对Java堆内存进行报告。它们被分配在其他一些内存空间中。简而言之,如果您使用OpenGL,则会减少另一个麻烦。

  • 使用OpenGL轻松制作旋转图像等动画。你只是纹理四边形,然后以任何你想要的方式旋转它。与Sprite动画等效的是顺序显示图像的不同(旋转版本)。这对于内存消耗和速度更好。

  • 如果您正在进行类似2D的游戏,那么使用OpenGL的正交投影不仅可以简化许多(无用的,在这种情况下)您使用常规OpenGL透视投影的麻烦,但实际上在需要缩放所有图形元素时,使用常规SurfaceView可以解决很多问题,因此它们在不同的屏幕分辨率/比例下看起来大小相同。使用OpenGL的正投影,您可以有效地创建所需宽度和高度的固定区域,然后让OpenGL自动将其投影到设备屏幕区域。

  • 毋庸置疑,制作简单的效果,例如影响某些图形元素的脉动光,对于OpenGL来说要容易得多(在这种情况下,你只需要制作光线并让它产生脉动,并且一切都相应地点亮)而不是用SurfaceView模拟这个并用精灵烘焙。

我实际上已经使用SurfaceView和Canvas开始了一个小型的星期防御式游戏,然后由于上述原因迅速切换到OpenGL。长话短说,游戏现在看起来更好,虽然它最初在三星TEOS上运行16 UPS,在Optimus LG 2x上运行30 UPS但它现在在Teos上运行33 UPS,在LG 2x上运行约80 UPS。