`
smalllixin
  • 浏览: 2532 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

nexus one上Canvas和Opengl ES画图速度比较

阅读更多
正着手开发一款游戏,看了一些资料,(注意墙……)
http://www.youtube.com/watch?v=U4Bk5rmIpic&feature=player_embedded

上面的视频有一段比较并总结了用Canvas 和 OpenGL ES两种方式render sprite的速度,
结论是
Sprite数量少的时候,几种方式速度一样。
随着sprite数量增加,Canvas的速度明显下降,opengl速度下降缓慢。
Canvas是用CPU,OpenGL明显是用GPU和显存

哥儿很好奇,用我的nexus one也来跑一跑测试(从svn中download下来http://code.google.com/p/apps-for-android/ 中的SpriteMethodTest项目)

首先介绍一下测试结果的分类方法:

这个测试可以控制
Sprite的数量
Sprite的是否运动
用Canvas画
用OpenGL ES画分三种方式:
1.Use Basic Vert Quads.       (下面缩写为OpenGL 1)
2.Use Draw Texture Extension  (下面缩写为OpenGL 2)
3. Use VBO Extension           (下面缩写为OpenGL 3)
注:后面的两种方式是要求OpenGL ES版本大于1.0才有的(nexus one的android 2.1上面的版本是1.1

OK,为了节约碳资源,不截图了……

========================================
测试一: 10个Sprite 不运动
Canvas:   142.85 fps
OpenGL 1: 34.48 fps
OpenGL 2: 33.33 fps
OpenGL 3: 33.33 fps

测试二: 10个Sprite 运动
Canvas:   90 fps
OpenGL 1: 32 fps
OpenGL 2: 33 fps
OpenGL 3: 32 fps

========================================
测试三: 100个Sprite不运动
Canvas:   111 fps
OpenGL 1: 43.47 fps
OpenGL 2: 43.47 fps
OpenGL 3: 41.66 fps
测试四: 100个Sprite运动
Canvas:  62.5 fps
OpenGL 1: 45 fps
OpenGL 2: 43 fps
OpenGL 3: 45 fps
=======================================
测试五: 500个Sprite不运动
Canvas:  27 fps
OpenGL 1:20 fps
OpenGL 2:23.8 fps
OpenGL 3:23.8 fps
测试六: 500个Sprite运动
Canvas:   25 fps
OpenGL 1: 20 fps
OpenGL 2: 23 fps
OpenGL 3: 22 fps
=======================================
测试七: 1000个Sprite不运动
Canvas:   15.38 fps
OpenGL 1: 10.5 fps
OpenGL 2: 12.82 fps
OpenGL 3: 14.7 fps
测试八: 1000个Sprite运动
Canvas:   15.15 fps
OpenGL 1: 10.3 fps
OpenGL 2: 12.65 fps
OpenGL 3: 14.28 fps

==================================

测试结果很奇怪,非常奇怪~
看点一: 用OpenGL 100个比10个速度快。
看点二: Canvas在Nexus one上战胜了OpenGL方式……

看到过文章说Nexus one上的gpu很<script type="text/javascript" src="http://www.iteye.com/javascripts/tinymce/themes/advanced/langs/zh.js"></script><script type="text/javascript" src="http://www.iteye.com/javascripts/tinymce/plugins/javaeye/langs/zh.js"></script>惨,所以拿高频的CPU来拟补不足,以为开玩笑呢。

我没有其它设备,有其它设备的兄弟也放上测试数据比较一下!

==================================
原来放到附件里的apk是没签过名的,不能用,sorry,我也是新手。
重新上传了一个,在我的手机里测试过能安装!!
大家也测试测试
================================

分享到:
评论
17 楼 zapldy 2010-04-02  
杯具啊,YOUTUBE上不去啊!
16 楼 BarryWei 2010-04-02  
smalllixin 写道
BarryWei 写道
lz感觉nexus one到底如何?我近期也打算没一个nexus one来着。


我用着还不错啊~ 不过以前没用过其他的智能机,就有个itouch玩玩,应该不算哈~~
我个人使用情况看nexus one是有一些小问题的,不知道google什么时候搞定:
1. 你也能搜到nexus one的屏幕问题,可以明确的说现在肯定是有bug的,很容易不小心碰到屏幕边上造成混乱。而且经过我亲身实践还有去各种论坛取经,nexus one的触摸屏跟iphone的还不是一个档次。
Anyway,屏幕的问题真正用起来没那么遭,还是可以接受和正常使用的。

2. 现在android 2.1 update1跑在2.6.29的内核上,以前查到过资料,这个版本的内核强制要求的内存大,
nexus one的512mb内存实际上只有不到100留给应用程序玩(当然你可以root,那就随便了),google的工程师说下次更新到2.6.31内核就能多出不少内存了。
PS:内存对于机器的影响在于 当内存剩余比较少接近android os的threshold(nexus one是16mb)。例如现在有22mb内存avaliable,这时候再打开程序会触发os去评价并且kill一些activity,从用户体验上讲就是你发现界面没那么流畅了。


楼上也有兄弟说HTC Desire,我觉得可以等这个机器,下面四个按键是硬键盘会好一些(有证据表明nexus one的飘逸问题就是因为下面4个按键是用触摸屏造成的),当然还得看看价格,什么东西都有个性价比。

总之,还是不错的机器


太感谢。那还是等等。还是HTC的强一些。
15 楼 smalllixin 2010-04-02  
mncc 写道
奇怪了。。真的是canvas快啊。。。
1000个spirit,运动的。
Canvas: 16.9
OpenGL1:10.3
OpenGL2:12.04
OpenGL3:15.15
我的也是NONE。。。和内核有关系吗?默认是29,是不是到31会好些。。。按道理说GPU也不差啊。


GPU好像确实一般,我在台湾一个论坛上看到高手分析过,找不到了~
不知道其他机型是什么效果,很想知道~
14 楼 mncc 2010-04-01  
奇怪了。。真的是canvas快啊。。。
1000个spirit,运动的。
Canvas: 16.9
OpenGL1:10.3
OpenGL2:12.04
OpenGL3:15.15
我的也是NONE。。。和内核有关系吗?默认是29,是不是到31会好些。。。按道理说GPU也不差啊。
13 楼 smalllixin 2010-04-01  
mncc 写道
smalllixin 写道
BarryWei 写道
lz感觉nexus one到底如何?我近期也打算没一个nexus one来着。


我用着还不错啊~ 不过以前没用过其他的智能机,就有个itouch玩玩,应该不算哈~~
我个人使用情况看nexus one是有一些小问题的,不知道google什么时候搞定:
1. 你也能搜到nexus one的屏幕问题,可以明确的说现在肯定是有bug的,很容易不小心碰到屏幕边上造成混乱。而且经过我亲身实践还有去各种论坛取经,nexus one的触摸屏跟iphone的还不是一个档次。
Anyway,屏幕的问题真正用起来没那么遭,还是可以接受和正常使用的。

2. 现在android 2.1 update1跑在2.6.29的内核上,以前查到过资料,这个版本的内核强制要求的内存大,
nexus one的512mb内存实际上只有不到100留给应用程序玩(当然你可以root,那就随便了),google的工程师说下次更新到2.6.31内核就能多出不少内存了。
PS:内存对于机器的影响在于 当内存剩余比较少接近android os的threshold(nexus one是16mb)。例如现在有22mb内存avaliable,这时候再打开程序会触发os去评价并且kill一些activity,从用户体验上讲就是你发现界面没那么流畅了。


楼上也有兄弟说HTC Desire,我觉得可以等这个机器,下面四个按键是硬键盘会好一些(有证据表明nexus one的飘逸问题就是因为下面4个按键是用触摸屏造成的),当然还得看看价格,什么东西都有个性价比。

总之,还是不错的机器



同意。。。像是手太肉的话碰住屏幕边缘有时候都没反应。。。。还有好像现在内存剩余越来越少了,我最开始最多的时候能有100MB,现在也就是70多了。这还是因为用Advance Task Killer所以还好一点。我没刷过机也没有root。


还有啊。。。LZ。。。那个程序在我的机子上安装不上啊。。咋弄?


非常抱歉,我更新了一下apk,现在应该能装上了,你下载下来测试一下!
12 楼 mncc 2010-04-01  
smalllixin 写道
BarryWei 写道
lz感觉nexus one到底如何?我近期也打算没一个nexus one来着。


我用着还不错啊~ 不过以前没用过其他的智能机,就有个itouch玩玩,应该不算哈~~
我个人使用情况看nexus one是有一些小问题的,不知道google什么时候搞定:
1. 你也能搜到nexus one的屏幕问题,可以明确的说现在肯定是有bug的,很容易不小心碰到屏幕边上造成混乱。而且经过我亲身实践还有去各种论坛取经,nexus one的触摸屏跟iphone的还不是一个档次。
Anyway,屏幕的问题真正用起来没那么遭,还是可以接受和正常使用的。

2. 现在android 2.1 update1跑在2.6.29的内核上,以前查到过资料,这个版本的内核强制要求的内存大,
nexus one的512mb内存实际上只有不到100留给应用程序玩(当然你可以root,那就随便了),google的工程师说下次更新到2.6.31内核就能多出不少内存了。
PS:内存对于机器的影响在于 当内存剩余比较少接近android os的threshold(nexus one是16mb)。例如现在有22mb内存avaliable,这时候再打开程序会触发os去评价并且kill一些activity,从用户体验上讲就是你发现界面没那么流畅了。


楼上也有兄弟说HTC Desire,我觉得可以等这个机器,下面四个按键是硬键盘会好一些(有证据表明nexus one的飘逸问题就是因为下面4个按键是用触摸屏造成的),当然还得看看价格,什么东西都有个性价比。

总之,还是不错的机器



同意。。。像是手太肉的话碰住屏幕边缘有时候都没反应。。。。还有好像现在内存剩余越来越少了,我最开始最多的时候能有100MB,现在也就是70多了。这还是因为用Advance Task Killer所以还好一点。我没刷过机也没有root。


还有啊。。。LZ。。。那个程序在我的机子上安装不上啊。。咋弄?
11 楼 fkpwolf 2010-04-01  
有钱啊,可怜我还在用g1
10 楼 smalllixin 2010-04-01  
BarryWei 写道
lz感觉nexus one到底如何?我近期也打算没一个nexus one来着。


我用着还不错啊~ 不过以前没用过其他的智能机,就有个itouch玩玩,应该不算哈~~
我个人使用情况看nexus one是有一些小问题的,不知道google什么时候搞定:
1. 你也能搜到nexus one的屏幕问题,可以明确的说现在肯定是有bug的,很容易不小心碰到屏幕边上造成混乱。而且经过我亲身实践还有去各种论坛取经,nexus one的触摸屏跟iphone的还不是一个档次。
Anyway,屏幕的问题真正用起来没那么遭,还是可以接受和正常使用的。

2. 现在android 2.1 update1跑在2.6.29的内核上,以前查到过资料,这个版本的内核强制要求的内存大,
nexus one的512mb内存实际上只有不到100留给应用程序玩(当然你可以root,那就随便了),google的工程师说下次更新到2.6.31内核就能多出不少内存了。
PS:内存对于机器的影响在于 当内存剩余比较少接近android os的threshold(nexus one是16mb)。例如现在有22mb内存avaliable,这时候再打开程序会触发os去评价并且kill一些activity,从用户体验上讲就是你发现界面没那么流畅了。


楼上也有兄弟说HTC Desire,我觉得可以等这个机器,下面四个按键是硬键盘会好一些(有证据表明nexus one的飘逸问题就是因为下面4个按键是用触摸屏造成的),当然还得看看价格,什么东西都有个性价比。

总之,还是不错的机器
9 楼 smalllixin 2010-04-01  
mncc 写道
问一哈楼主,这个包咋用啊?我安不上啊?直接往手机里边安的,用的是apkInstaller。。。我是直接把后缀名的zip去掉了。。。变成了SpriteMethodTest.apk。。。不对吗?

对啊!难道我打包的有问题……
建议去
http://code.google.com/p/apps-for-android/
用SVN把项目下载下来自己打开试试
8 楼 BarryWei 2010-04-01  
mncc 写道
BarryWei 写道
lz感觉nexus one到底如何?我近期也打算没一个nexus one来着。



整个HTC Desire吧,一样子的配置,就是把触屏键改成了实体键,轨迹球改成了像苹果一样的光感。主要是漂亮多了,HTC的sence好看多了,听说还支持Flash Player 10.1呢。四月份马上就出了。

价格上呢?有没有比较过?
7 楼 mncc 2010-04-01  
BarryWei 写道
lz感觉nexus one到底如何?我近期也打算没一个nexus one来着。



整个HTC Desire吧,一样子的配置,就是把触屏键改成了实体键,轨迹球改成了像苹果一样的光感。主要是漂亮多了,HTC的sence好看多了,听说还支持Flash Player 10.1呢。四月份马上就出了。
6 楼 BarryWei 2010-04-01  
lz感觉nexus one到底如何?我近期也打算没一个nexus one来着。
5 楼 mncc 2010-04-01  
问一哈楼主,这个包咋用啊?我安不上啊?直接往手机里边安的,用的是apkInstaller。。。我是直接把后缀名的zip去掉了。。。变成了SpriteMethodTest.apk。。。不对吗?
4 楼 smalllixin 2010-03-31  
fkpwolf 写道
udvs 写道
fkpwolf 写道
cool! Canvas指HTML5中的么?

囧,指的是Android 里面的Canvas

:)

那是java和c/c++的比较吗?opengl es在android现在可以用ndk编程了


这个只是java的,java用不同方式画图的效果~

android虽然是可以用ndk编程了,个人认为对于个人开发者来讲开发成本有点高。
java的性能也没有想象的那么糟,最主要还是看项目的规模和类型,搞游戏来讲大型的3D游戏有一些意义。
3 楼 fkpwolf 2010-03-30  
udvs 写道
fkpwolf 写道
cool! Canvas指HTML5中的么?

囧,指的是Android 里面的Canvas

:)

那是java和c/c++的比较吗?opengl es在android现在可以用ndk编程了
2 楼 udvs 2010-03-30  
fkpwolf 写道
cool! Canvas指HTML5中的么?

囧,指的是Android 里面的Canvas
1 楼 fkpwolf 2010-03-29  
cool! Canvas指HTML5中的么?

相关推荐

    Canvas和OpenGL结合实现绘图和高速缩放漫游的Demo

    在计算机图形学领域,Canvas和OpenGL都是用于在屏幕上绘制图形的重要工具。Canvas是HTML5引入的一个功能,允许开发者在网页上进行2D和3D图形的动态渲染,而OpenGL则是一个更为底层、强大的图形库,广泛应用于游戏...

    基于HTML5 Canvas和jQuery 的画图工具的实现

    HTML5 Canvas和jQuery是现代网页开发中的两个...通过理解Canvas的绘图API和jQuery的事件处理机制,开发者可以构建出具有用户友好的界面和流畅体验的画图应用。这种技术在教育、设计、在线协作等领域有着广泛的应用。

    canvas 画图板.zip

    `css/style.css` 文件则负责调整画布的大小、位置和其他视觉效果,确保画图板在不同设备上都能正常显示。例如: ```css #drawCanvas { border: 1px solid #ccc; display: block; margin: auto; width: 80%; ...

    OpenGL Canvas for Delphi

    这是一个可以利用OpenGL硬件加速的画布控件,使用最基础的OpenGL支持(Delphi 此单元,有如下特性: 1. 硬件加速,绘图速度远远胜过GDI与GDIP。 2. 支持抗锯齿,输出图像质量较高。 3. 支持类似GDIP的坐标变换,...

    使用Canvas进行鼠标画图和线程画线

    总结来说,使用Canvas进行鼠标画图和线程画线涉及的主要知识点有:Canvas元素的创建与获取、2D渲染上下文、事件监听、路径绘制(`beginPath`、`moveTo`、`lineTo`、`stroke`)、线条属性(颜色、宽度)的设置,以及...

    开源的HTML5 Canvas画图插件 - Literally Canvas

    Literally Canvas还提供了丰富的API接口,用于获取和修改画布上的内容。例如,你可以通过`lc.getImage()`获取当前画布的图像数据,或者使用`lc.clear()`清空整个画布。此外,它还支持JSON格式的数据交换,方便你在...

    canvas画图

    html5 canvas 画图练习

    HTML5_Canvas编写的动态画图程序

    这个动态画图程序充分利用了Canvas API的功能,提供了直线、圆和矩形三种基本图形的绘制选项,并支持用户自定义颜色,为学习和理解HTML5 Canvas提供了一个直观的实例。 首先,Canvas是HTML5中一个非常重要的元素,...

    Android下使用Canvas画图

    本文将深入探讨Android中Canvas画图的相关知识点,帮助你理解和掌握其核心功能。 1. **Canvas的基本概念** - Canvas是Android系统提供的一个类,它提供了在二维画布上进行绘制的方法。 - 通常,我们会在一个...

    在线画板,基于 Canvas 和 JavaScript 的画图工具

    在线画板,基于 Canvas 和 JavaScript 的画图工具。 const board = new DrawBoard({}); board.setColor(); board.setLineWidth(); board.clearAll(); board.usePenTool(); board.useLineTool(); board....

    android-openGL-canvas-master.zip

    在“android-openGL-canvas-master.zip”这个项目中,开发者可能结合了这两者,创建了一个示例应用来展示如何在 Android 上使用 OpenGL ES(OpenGL 的嵌入式版本)与 Canvas 进行交互,以实现更高效的图形绘制和动画...

    html5 Canvas 画图板

    html5 Canvas 画图板,学习使用html5 Canvas ,让你画画更轻松

    在线画图canvas

    在这个主题中,我们将深入探讨“在线画图canvas”以及如何结合HTML5和JavaScript实现这一功能。 首先,Canvas是一个HTML标签,它的基本结构是在HTML文件中插入`&lt;canvas&gt;`元素。例如: ```html &lt;canvas id=...

    canvas定义画图板

    本教程将深入探讨`canvas`元素的定义和使用,以及如何通过JavaScript来操作它,创建一个基本的画图板。 一、canvas元素的定义 `&lt;canvas&gt;`元素是HTML5引入的新特性,它是一个内联块级元素,主要用于在网页上绘制图形...

    vue+canvas绘制图形

    总之,"vue+canvas绘制图形"项目展示了如何利用Vue的组件化思想和Canvas的绘图能力,创建出具有动态效果和用户交互的前端应用。通过学习和实践这种方式,开发者可以提高自己的前端技能,为网页带来更丰富的视觉体验...

    Android上canvas自定义画图案例

    总之,"Android上canvas自定义画图案例"是一个很好的学习资源,它涵盖了Android Canvas的基本用法和一些进阶技巧,可以帮助开发者创建出各种复杂的自定义视图。通过阅读和实践这个案例,可以提升在Android图形编程...

    canvas基本画图功能

    canvas,canvas UI,canvas画图功能

    js canvas制作宝马bmw图标画图代码

    在JavaScript的世界里,Canvas是一个非常重要的元素,它允许开发者通过编程的方式来绘制图形,实现动态的、交互式的网页内容。在这个“js canvas制作宝马bmw图标画图代码”的主题中,我们将深入探讨如何利用HTML5的...

    基于HTMLCanvas的画图板设计和实现.doc

    本文详细介绍了实现过程中的关键技术和思路,并讨论了Canvas元素在画图板设计和实现中的应用和优点。 CSS3技术应用: 在画图板的设计和实现过程中,本文还讨论了CSS3技术的应用,包括选择器、样式和动画等功能。CSS...

    html5 canvas 画图

    Canvas还支持文本渲染,`fillText()`和`strokeText()`方法用于在画布上填充或描边文本: ```javascript ctx.font = '30px Arial'; ctx.fillText('Hello, World!', 50, 50); ``` 动画是Canvas的一个重要应用,通过...

Global site tag (gtag.js) - Google Analytics