浅谈Google Skia图形引擎

来源:互联网 发布:吉林建筑大学网络接入 编辑:程序博客网 时间:2024/04/27 13:48

[转]浅谈Google Skia图形引擎 http://blog.sina.com.cn/s/blog_4a0a39c30100cog4.html

Jserv's blog http://blog.linux.org.tw/~jserv/archives/002095.html

 

 

历史

2008年九月,Google宣布以改良过的WebKit为核心的网络浏览器Chrome,揭露了众多新特征,比方说崭新的[V8]JavaScript (ECMAscript) 执行引擎,或许因为太亮眼,掩蔽了所使用另一个开放原始码项目[skia],后者是个 2D向量图形处理函式库,包含字型、坐标转换,以及位图都有高效能且简洁的表现。不仅用于GoogleChrome 浏览器,新兴的Android开放手机平台也采用skia作为绘图处理,搭配OpenGL/ES与特定的硬件特征,强化显示的效果,本文简介GoogleSkia 的历史背景、应用层面,并探讨其程序设计模型。

Google为了搭建OpenHandset Alliance (OHA) Android平台,布局极久,背后的百人研发团队部份来自之前的并购案,其中两项具指标性意义:

  • 2005年八月17日,收购美国Android公司,业务是手机软件开发,这当然就是现在开放源码Android计划的前身

  • 2005年十一月,收购美国Skia公司,业务是向量绘图软件

Google收购前的Android公司有着在IT产业为人所津津乐道的成果,本文就不多谈,而Skia公司自然也不是省油的灯。SkiaInc. 设立于北卡罗莱纳州的ChapelHIll,由MichaelReed (也称为MikeReed) 所创办,他在图形技术领域是相当顶尖的人物,与BenoitSchillings (BeOS 主要开发者,BeInc. 第二位工程师,现为NokiaCTO) 于专业手机软件开发公司OpenWave共事时,即在该公司产品OpenWavePhone Suite Version 7.0 (以下简称V7)引入精湛的向量图形技术,在50-300kb 空间的实做中,提供了图层overlay之间alphablended 预览、全功能向量矩阵转换等进阶功能。在加入OpenWave之前,MikeReed 服务于Apple,代表项目为QuickDrawGX,主导进阶图形与字型处理技术。BenoitSchillings 离开OpenWave转任TrolltechCTO 期间,MikeReed 开创了SkiaInc.,该公司第一个产品为SGL(Skia Graphics Library),一个非常严谨的向量显示引擎,能在低端设备比如手机、电视及其它手持设备之上,呈现高质量的2D图形。根据LocalTechWire的描述:

"Skia’sfirst product, SGL, is a portable graphics engine capable ofrendering state-of-the-art 2D graphics on low-end devices such asmobile phones, TVs, and handhelds,” the Web site said. “SGL isfeature-set compatible with existing 2D standards, making it ideal toserve as a back-end for public formats such as SVG, PDF, and OpenVG.SGL is licensed as source or binary, and can be customized to matchspecific HW/framebuffer requirements.”

2005SkiaGoogle 收购后,一直相当神秘低调,直到2007年初,SkiaGL 相关的程序代码才被揭露,作为GoogleAndroid 平台的图形引擎,稍候的GoogleChrome 浏览器也采用Skia引擎。随着AndroidChrome(开放版本称为"Chromium")两大项目公布程序代码后,skia也一并公开原始程序代码,以ApacheLicense v2 释出(注意,这意味着与GPLv2授权不兼容),而AndroidChrome的程序代码库中都有一份[skia]的复制,因需求不同,做了部份的修改,比方说Chrome项目底下的[chrome/trunk/src/skia],需要注意的是,Skia本身是不涉及底层环境,如LinuxFramebuffer Gtk+衔接的处理,这也是何以Android(透过LinuxFramebuffer) Chrome(开发中的Linux版本使用Gtk+)需要提供一份修改,以便系统接轨,关于这方面的信息,可参照GoogleChromium 的开发日志[Graphicsin Google Chrome]
相较于Firefox1.x,后继的Firefox2.x/3.x 在图形显示方面有相当大的进展,很大层面归功于引入Cario向量图形链接库来处理网页绘制,而Skia就相当于扮演Cairo的角色,不过更轻量些。快速发展的WebKit俨然是从桌面应用跨足移动装置之网页引擎解决方案的首选,AppleGoogle都有为数可观的全职工程师投入,拜因特网的威力,也有其它厂商与团体个人积极投入开发,目前WebKit支持的图形函式库计有Cairo,Gtk+, Qt4, WxWidgets, Cg (Mac 的非开放原始码函式库),Skia 等等,并以WebKitclassGraphicsContext 处理前述图形函式库的实做,可针对不同平台的特性,规范不同平台所需的宏与成员,详情可参考程序代码WebCore/platform/graphics/GraphicsContext.{h,cpp}
Skia
C++实做,程序代码约八万行,基本某些未知的因素,可参考的文件相当有限,但ChromiumSVNlog 与程序代码则是现在最完整的文件,以下是其特征:

  • 高度优化的软件rasteriser(module sgl/)

  • 选择性透过OpenGL/ES,加速特定操作,如shadertextures(module gl/)

  • 动画处理能力(moduleanimator/)

  • 内建SVG支援(module(svg/)

  • 内建若干imagecodec,如PNG,JPEG, GIF, BMP (modules images/)

  • 内建文字处理,但缺乏泰文、藏文一类复杂文字处理的能力

  • 效能特性:

    • image与特定数据型态的Copy-on-write

    • 内部存储器管理,谨慎地被免fragmentation

    • Thread-safety

Skia实做所需的相依性:

  • 字型:FreeType (值得注意的是,FreeType的维护者DavidTurner 目前任职于Google),Windows GDI

  • 多执行绪模型:pthread, Windows threads

  • XML:expat, tinyxml

原创粉丝点击