首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >硬件加速预蜂窝

硬件加速预蜂窝
EN

Stack Overflow用户
提问于 2012-03-06 23:41:38
回答 1查看 553关注 0票数 1

我正在使用Android API,并着眼于开发2D游戏的长期前景。通常,我可以只使用Canvas来绘制精灵作为我的游戏的图形。我希望能够执行许多视觉效果的绘图,但似乎之前的安卓版本蜂巢(3.0,API level 11) don't support hardware acceleration

不过,我不确定这到底是什么意思。我不敢相信这幅画是由CPU逐个像素完成的!?!如果我最终有光晕,镜头效果等效果...我会在每个像素上画好几次。我认为一个典型的智能手机CPU不能在大约30 FPS的情况下处理它,这是正确的吗?

我没有奢侈的目标安卓版本的>=3.0,因为他们constitute 8%的已经不是那么大的安卓市场。我是否应该从容不迫地走OpenGL的路(我是OpenGL的初学者)?如果我这样做了,你认为我会通过使用Canvas在自定义的android视图上叠加一个GLSurfaceView来处理效果,否则我会获得什么好处吗?或者,出于任何原因,将两者混合在一起是不是一个坏主意?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-06 23:55:11

哦,天啊,是的。特别是如果你的目标是Android3之前的设备,从SurfaceView (通过Canvas.drawXxx()调用)转到OpenGlSurface效果很好。你不仅有更快的每秒帧数(更新),而且内存消耗也好得多。

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

  • 如果你想做(多)精灵动画,用加载为OpenGL纹理并显示在OpenGL四边形上的图像来做它们会给你更多的内存空间。这是因为虽然常规的位图对象受到安卓每进程内存限制的限制(根据设备和安卓版本的不同,内存大小约为16-48MB),但从这些图像创建OpenGL纹理(并在之后立即清除图像)没有此限制。你只会受到设备总内存的限制,它比16-48兆内存要大得多。

其次,但仍然与此相关,在Android2和更低版本中,跟踪Bitmap实例占用的内存要棘手得多,因为这些意图不会针对Java堆内存进行报告。它们被分配在其他的内存空间中。简而言之,如果你使用OpenGL,另一个麻烦就少了。

有了OpenGL,旋转图像等简单的

  • 动画就变得轻而易举了。你只需对一个四边形进行纹理处理,然后以任何你想要的方式旋转它。等同于Sprite动画的是按顺序显示图像的不同(旋转版本)。
  • 如果你正在做一个类似2D的游戏,使用OpenGL的正交投影不仅简化了你在常规OpenGL透视投影中遇到的很多麻烦(在这种情况下是无用的),而且它实际上缓解了你在需要缩放所有图形元素以使它们在不同屏幕分辨率/比例上看起来相同大小时使用常规SurfaceView时遇到的许多问题。使用OpenGL的正交投影,你可以有效地创建所需宽度和高度的固定区域,然后让OpenGL将其投影到设备屏幕区域automatically.
  • It不用说,使用OpenGL制作简单的效果(例如脉动的光线影响某些图形元素)要容易得多(在这种情况下,你只需制作光线并使其脉动,所有东西都相应地照亮),而不是使用SurfaceView模拟并烘焙精灵。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9586924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档