为什么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,但仍然基于传统的显示列表,去处理诸如高保真的矢量图形,文本渲染,像素处理等内容。传统的显示列表肯定不会消失,我们将继续增加新的功能和优化性能。