为什么Adobe要推出Starling框架?
来源:互联网 发布:银联数据2016校园招聘 编辑:程序博客网 时间:2024/06/07 07:14
相信很多开发者都在问这个问题:为什么Adobe要推出Starling框架来做2D加速,而不是直接对DisplayList进行GPU渲染呢?
* {9 ?& D8 y8 j: ~ m: I/ [" o' r# x% q
这篇文章(EN)给予了详细的解答,参见:
http://blog.kaourantin.net/?p=138
文章摘要:) M4 e% b; k4 W. R' s6 l
很多朋友在问上面的问题(为什么不直接对DisplayList进行GPU支持),而实际上,Adobe已经在这条路上探索了好几年了。
1.在2008年推出的Flash Player 10,增加了一个"wmode=gpu"选项,这个选项的作用就是,将CPU预处理的显示对象,作为纹理发送给GPU来处理和合成。但实际上发现开启这个选项的网站非常少,大多数人对于“更快的内容展现”没有兴趣,更糟糕的是在某些情况下人们会发现CPU渲染比GPU渲染更快(后文会解释),基于这个原因,而且增加GPU支持的研发成本很高,所以Adobe在Flash Player 10.3的时候就将选项回滚到了wmode=direct
2.在移动设备上,包括Android和iOS,我们提供了‘renderMode=gpu’.不同于桌面的wmode设置,这个将直接通过OpenGLES2调用GPU来渲染矢量图形。这个特性至今而在使用并取得了成功。
那么对于传统的显示列表进行GPU渲染的问题是什么?因为传统的DisplayList的设计思想是基于软件渲染的,它并不是很容易就能通过GPU渲染得到更快的速度。& C+ Q; ?% U8 a
1.传统的显示列表渲染提供了一些特性,比如遮罩,九宫格,这些您在Starling中不得不寻找其它的途径才能得到相似的结果。! O6 s, x0 a5 d$ N0 `8 z
2.很多传统的显示列表的特性难以很快的转移到GPU模式,包括:图层色彩混合模式,滤镜,变换,和系统文本等等。这些无法实现的部分我们还是需要回滚到软件渲染模式。
3.GPU难以处理深层次的嵌套。在Flash中一个电影剪辑套另一个电影剪辑是常见的,但这对GPU渲染是一大禁忌。您或许认为应该很容易实现对它的优化,但实际情况并非如此。
4.GPU喜欢位图。如果是矢量图形,将意味着每帧都要提交纹理,这将产生大量的vertex data,将在移动设备的GPU和Intel的桌面GPU产生问题。
5. 鼠标事件是基于经典的DisplayList的事件冒泡机制。) _; b, I2 y- ?/ ~4 @
6.传统的DisplayList是一个巨大的状态机,基于“帧”进行刷新。
希望这些解释,可以解答一部分网友的疑问。7 Z. ?) r$ {, n
我希望在未来,大多数的游戏和多媒体内容,将迁移至Stage3D,但仍然基于传统的显示列表,去处理诸如高保真的矢量图形,文本渲染,像素处理等内容。传统的显示列表肯定不会消失,我们将继续增加新的功能和优化性能。
* {9 ?& D8 y8 j: ~ m: I/ [" o' r# x% q
这篇文章(EN)给予了详细的解答,参见:
http://blog.kaourantin.net/?p=138
文章摘要:) M4 e% b; k4 W. R' s6 l
很多朋友在问上面的问题(为什么不直接对DisplayList进行GPU支持),而实际上,Adobe已经在这条路上探索了好几年了。
1.在2008年推出的Flash Player 10,增加了一个"wmode=gpu"选项,这个选项的作用就是,将CPU预处理的显示对象,作为纹理发送给GPU来处理和合成。但实际上发现开启这个选项的网站非常少,大多数人对于“更快的内容展现”没有兴趣,更糟糕的是在某些情况下人们会发现CPU渲染比GPU渲染更快(后文会解释),基于这个原因,而且增加GPU支持的研发成本很高,所以Adobe在Flash Player 10.3的时候就将选项回滚到了wmode=direct
2.在移动设备上,包括Android和iOS,我们提供了‘renderMode=gpu’.不同于桌面的wmode设置,这个将直接通过OpenGLES2调用GPU来渲染矢量图形。这个特性至今而在使用并取得了成功。
那么对于传统的显示列表进行GPU渲染的问题是什么?因为传统的DisplayList的设计思想是基于软件渲染的,它并不是很容易就能通过GPU渲染得到更快的速度。& C+ Q; ?% U8 a
1.传统的显示列表渲染提供了一些特性,比如遮罩,九宫格,这些您在Starling中不得不寻找其它的途径才能得到相似的结果。! O6 s, x0 a5 d$ N0 `8 z
2.很多传统的显示列表的特性难以很快的转移到GPU模式,包括:图层色彩混合模式,滤镜,变换,和系统文本等等。这些无法实现的部分我们还是需要回滚到软件渲染模式。
3.GPU难以处理深层次的嵌套。在Flash中一个电影剪辑套另一个电影剪辑是常见的,但这对GPU渲染是一大禁忌。您或许认为应该很容易实现对它的优化,但实际情况并非如此。
4.GPU喜欢位图。如果是矢量图形,将意味着每帧都要提交纹理,这将产生大量的vertex data,将在移动设备的GPU和Intel的桌面GPU产生问题。
5. 鼠标事件是基于经典的DisplayList的事件冒泡机制。) _; b, I2 y- ?/ ~4 @
6.传统的DisplayList是一个巨大的状态机,基于“帧”进行刷新。
希望这些解释,可以解答一部分网友的疑问。7 Z. ?) r$ {, n
我希望在未来,大多数的游戏和多媒体内容,将迁移至Stage3D,但仍然基于传统的显示列表,去处理诸如高保真的矢量图形,文本渲染,像素处理等内容。传统的显示列表肯定不会消失,我们将继续增加新的功能和优化性能。
- 为什么Adobe要推出Starling框架?
- flex Adobe公司推出的开放源码框架
- 让Robotlegs支持Starling框架
- Starling 框架性能优化方案
- 我们为什么要推出ASP.NET栏目?
- CSDN为什么要推出技术网摘?
- 我们为什么要推出ASP.NET栏目?
- 我们为什么要推出ASP.NET栏目?
- 我们为什么要推出ASP.NET栏目?
- 我们为什么要推出ASP.NET栏目?
- 我们为什么要推出ASP.NET栏目?
- 我们为什么要推出ASP.NET栏目?
- 我们为什么要推出ASP.NET栏目?
- 我们为什么要推出ASP.NET栏目?
- 我们为什么要推出ASP.NET栏目?
- 我们为什么要推出ASP.NET栏目?
- 我们为什么要推出ASP.NET栏目?
- 我们为什么要推出ASP.NET栏目?
- PHP.ini的register_globals参数
- 数据库读取和存储大型数据(图片、音视频文件)的函数封装
- js如何判断一个控件是否获得焦点
- 软件项目版本号的命名格式
- 执行SQL脚本文件 :@与@@的区别
- 为什么Adobe要推出Starling框架?
- 【Android自学笔记之三】surfaceView更新线程
- camera flash flow(临时)
- 9. 2. 17. 轮换指定列表中的元素Rotate elements of a collection
- 变异体项目生成的问题
- Oracle10g ASM tesing
- sip.conf配置说明
- Oracle Data Guard 主库报--RFS Possible network disconnect with primary database
- SIGPIPE信号