现在的位置: 首页 > 综合 > 正文

浅谈Google Skia图形引擎

2013年12月16日 ⁄ 综合 ⁄ 共 2846字 ⁄ 字号 评论关闭

[转]浅谈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
向量图形处理函式库,包含字型、坐标转换,以及位图都有高效能且简洁的表现。不仅用于
Google
Chrome
浏览器,新兴的
Android
开放手机平台也采用
skia
作为绘图处理,搭配
OpenGL/ES
与特定的硬件特征,强化显示的效果,本文简介
Google
Skia
的历史背景、应用层面,并探讨其程序设计模型。

Google
为了搭建
Open
Handset Alliance (OHA)

Android
平台,布局极久,背后的百人研发团队部份来自之前的并购案,其中两项具指标性意义:

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

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


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

"Skia’s
first product, SGL, is a portable graphics engine capable of
rendering state-of-the-art 2D graphics on low-end devices such as
mobile phones, TVs, and handhelds,” the Web site said. “SGL is
feature-set compatible with existing 2D standards, making it ideal to
serve 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 match
specific HW/framebuffer requirements.”


2005

Skia

Google 收购后,一直相当神秘低调,直到
2007
年初,Skia
GL
相关的程序代码才被揭露,作为
Google
Android
平台的图形引擎,稍候的
Google
Chrome
浏览器也采用
Skia
引擎。随着
Android

Chrome
(
开放版本称为
"Chromium")
两大项目公布程序代码后,skia
也一并公开原始程序代码,以
Apache
License v2
释出
(注意,这意味着与
GPLv2
授权不兼容),而
Android

Chrome
的程序代码库中都有一份
[skia]
的复制,因需求不同,做了部份的修改,比方说
Chrome
项目底下的
[chrome/trunk/src/skia],需要注意的是,Skia
本身是不涉及底层环境,如
Linux
Framebuffer

Gtk+
衔接的处理,这也是何以
Android
(
透过
Linux
Framebuffer)

Chrome
(
开发中的
Linux
版本使用
Gtk+)
需要提供一份修改,以便系统接轨,关于这方面的信息,可参照
Google
Chromium
的开发日志
[Graphics
in Google Chrome
]
相较于
Firefox
1.x
,后继的
Firefox
2.x/3.x
在图形显示方面有相当大的进展,很大层面归功于引入
Cario
向量图形链接库来处理网页绘制,而
Skia
就相当于扮演
Cairo
的角色,不过更轻量些。快速发展的
WebKit
俨然是从桌面应用跨足移动装置之网页引擎解决方案的首选,Apple

Google
都有为数可观的全职工程师投入,拜因特网的威力,也有其它厂商与团体个人积极投入开发,目前
WebKit
支持的图形函式库计有
Cairo,
Gtk+, Qt4, WxWidgets, Cg (Mac
的非开放原始码函式库),
Skia
等等,并以
WebKit

class
GraphicsContext
处理前述图形函式库的实做,可针对不同平台的特性,规范不同平台所需的宏与成员,详情可参考程序代码
WebCore/platform/graphics/GraphicsContext.{h,cpp}
Skia

C++
实做,程序代码约八万行,基本某些未知的因素,可参考的文件相当有限,但
Chromium

SVN
log
与程序代码则是现在最完整的文件,以下是其特征:

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

  • 选择性透过
    OpenGL/ES,加速特定操作,如
    shader

    textures
    (module gl/)

  • 动画处理能力(module
    animator/)

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

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

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

  • 效能特性:


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

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

    • Thread-safety

Skia
实做所需的相依性:

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

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

  • XML:
    expat, tinyxml

抱歉!评论已关闭.