【原创】Gecko和Cairo
众所周知,Gecko是Firefox(Mozilla)的输出引擎,一般习惯于称之为内核。其性能直接决定了浏览器的效率。伴随着Firefox 1.1推出日期的临近,一项新的东西走入了人们的视野,Cairo. 本文简单介绍一下Gecko和 Cairo,更深入的内容,请参考网上专业教程。 疏漏之处,敬请批评指正。1、什么是Cairo?
Cairo,过去叫做Xr或Xr/Xc,是一个跨平台的开放源代码的矢量图形函数库,可以提供高质量的显示和打印输出。通过Glitz函数库,Cairo 能使用 OpenGL或X Render扩展的硬件加速功能来绘制图像,这使得基于Cairo的应用能在现代化的3D显示硬件上获得益处。
Cairo提供一个稳定的用户层API,它可以提供现代化的图形处理管理能力,如绘制和填充,映射转换,合成(注意,是合成)与改变alpha半透明图像,高真文本显示等等。能够在不同的媒体上实现相同的输出。
其实更早关于Cairo人们关注的还是Gtk/Gnome的进展,我们可以在 Gnome中国 上看到对Cairo应用前景的展望,可以看到,Cairo应用可以实现的东西是激动人心的。
Cairo拥有多种不同的后端,能够支持多种输出设备。现在所支持的后端包括:
图像:以内存图像缓冲区(in-memory image buffers)为目标。该图像缓冲区可被保存成文件,或者其数据可以被不具有本地后端的图形系统调用。
gl: 通过 glitz库(http://www.freedesktop.org/Software/glitz)使用OpenGL的硬件加速功能来绘制图像。包括GLX 和 AGL (分别为Unix和苹果的标准)。
png: 这个后端使用图像后端来生成png图像文件。
ps: 生成一个PostScript文件,适合高质量打印输出。现在ps后端生成点阵内容,连接图像后端。
xlib: 使用X Window的xlib接口,以Windows 或 Pixmaps 为目标。Render扩展可用,但不必需。
xcb: 和xlib相似,但使用XCB(http://freedesktop.org/Software/xcb)接口。
还有其他一些后端正在开发中:
svg
quartz——MacOS的后端(http://cairographics.org/QuartzBackend)
win32——Windows GDI 后端(http://cairographics.org/win32)
2、Gecko使用Cairo有什么好处?
可能上面的Gnome展望会令你感到难忘,其实,Cairo在Mozilla上使用的前景同样值得期待。
比如,你的Firefox的CPU占用率是否经常达到100%?实际上很大原因就是因为目前Firefox的Gecko引擎生成页面的方式并不是那么有效率,它的高速度很大程度上依赖于CPU的开销。而通过Cairo可以实现的硬件加速,Gecko就可以把大部分的显示工作交给显卡(GPU)来完成。这样一来,Gecko在那些有3D显卡的机器上是非常高效的。(当然,它不会把你的小猫变成100M专线)
不仅仅是这些,按照 roc 的说法,转移到Cairo上,将会“带给我们现代化的2D图形处理能力(如填充、描旁、去背、映射转换,alpha透明支持等)」。Cairo可以将它的输出传送到不同的后端,这使它很适合在屏幕上显示图像和打印。借助Glitz函数库,Cairo能使用OpenGL的硬件加速功能来绘制图像,这使得Mozilla能在现代化的3D显卡上获得益处。
为了实现上述目标,Mozilla需要去除软件中大量的图形代码,把它们重新构建于Cairo之上。目前,这一工作正在有条不紊地进行着。在 roc的blog 里面有一篇文章,介绍了Mozilla的图形处理基础架构转换到Cairo的最新进度,其中所附的Mozilla截图便是以Cairo来生成网页以及本身的XUL使用者介面。(尚处于开发测试阶段)
http://weblogs.mozillazine.org/roc/archives/images/cairo-seamonkey.png
3、cairo在 Gecko 上实现的路线图:
首先是cairo在 Gecko 1.8/Firefox 1.1中的实现:
canvas 和 SVG的实现将基于cairo
没有硬件加速;只用软件方式实现render-to-bitmap
非cairo的SVG实现方式(例如GDI+)仍会被支持
Windows上cairo的实现将随进度而定
非canvas,非SVG利用现有的平台API实现。
如图,Cairo的运用只是部分的。如Windows平台对于SVG的实现就被排除。
http://www.mozilla.org/roadmap/gfx-arch-1.8.png
其次是cairo 在 Gecko 1.9 中的实现:
停止使用2D API, 使用cairo来实现所有内容。
解决foreignObject问题
实现HTML显示的硬件加速
更高的质量(比如,双线性图像扫描)
如图所示,Cairo在Gecko 1.9中将得到完全的实现。
http://www.mozilla.org/roadmap/gfx-arch-1.9.png
现在Mozilla的路线图指向2.0,这是一个非常长远和有规划的项目。或许,伴随着Gecko 1.9或更高版本性能的不断提升,你会在不远的将来看到一个完全不一样的Mozilla. Mozilla基金会运作规范,工作高效。是开源软件组织中难得的典范。
4、新的进展:
1、在2005年5月5日roc的blog里面(http://weblogs.mozillazine.org/roc/archives/2005/05/cairo_progress.html),他介绍了cairo在Mozilla中的新进展:
使用了Glitz.(是不是意味着真正开始了硬件加速之路呢?)但他也提到,存在非常严重的bug,可能导致计划延迟。
使用cairo 绘制文字。以往Mozilla都是使用Xft来绘制文字,roc升级了最新的cairo,并且把原来的Xft-Pango 代码改为Xft-cairo-Pango. 这意味着我们使用xft和pango来做 基于客户方字形(glyph)和 text measurement 工作,而只使用cairo来渲染实际glyph. 这看起来工作的很好,最终我们将使用cairo来代替xft执行text measurement的工作。在Windows和Mac上我们不能使用pango(pango基于LGPL而Mozilla执行MPL),所以我们将不得不使用现有的很多文字代码。
同时还修正了许多问题。
roc也提到了GTK中采用cairo的不确定性。总体给人的印象是:Cairo是方向,没错。但路途很艰辛。
2、http://weblogs.mozillazine.org/roc/archives/2005/06/graphics_though.html#comments
http://weblogs.mozillazine.org/roc/archives/images/minus30degrees.png
祝Mozilla和其他自由软件事业一路走好! 如图,自己把1.1alpha1编译了一遍,加入了cairo对svg的支持。
http://www.linuxfans.org/nuke/modules/Forums/files/____6_105.png 支持svg吗?
我上面只加了--enable-svg,系统不支持svg~~(1.1 RC1)
页:
[1]