繁体   English   中英

硬件加速前蜂窝

[英]Hardware Acceleration pre-Honeycomb

我正在玩Android API,长期开发2D游戏。 通常情况下,我只能使用Canvas绘制精灵作为游戏的图形。 我希望能够为视觉效果执行大量绘制,但似乎Honeycomb之前的Android版本(3.0,API级别11) 不支持硬件加速

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

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

哦,上帝是的。 特别是如果你的目标是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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM