5 苹果开发人员技术文档连载之-系统架构

【5 苹果开发人员技术文档连载之-系统架构】Quartz的Quartz 2D部分是提供图形渲染服务的图形库之一 。它是为展现二维文本和图形所设计的 。图形和多媒体库包括

·渲染二维图像的QuickDraw
·既可以渲染二维图像也可以渲染三维图像的OpenGL
·表现数字视频流和其他多媒体的QuickTime

QuickTime是一种交互式多媒体环境,具有图形环境和应用程序环境上的功能和特性 。尽管考虑到它在Mac OS X架构中所处的混合状态,但是在这一节中,作为简单的概括,我们仍将把它看作为是与Quartz 2D、QuickDraw和OpenGL地位同等的图形库 。

所有的渲染库都直接依赖于Quartz的另外部分,即Quartz Compositor层 。然而,QuickTime和OpenGL却几乎不依赖于Quartz Compositor层,因为它们有它们自己的某种特定视窗实现机制 。

Quartz Compositor由Mac OS X视窗服务器和由它所实现的(当前私有的)系统编程接口(SPI)来组成 。视窗服务器对显示和窗口全面负责,其中包括它们的合成、配置和基本管理 。同时,它也执行低级别的指针管理和事件路由 。

很大程度上Quartz是在核心图形框架(CoreGraphics.framework)中实现的 。如图3-4所示,这一框架中的动态共享库,包含客户端API和服务器SPI,其中服务器SPI是由视窗服务器自身实现的 。应用程序或应用程序环境与Quartz 2D库的客户方相链接,这些库用于渲染屏幕、生成PDF和其它服务 。所有对服务器SPI的访问都是由客户端API来转交的 。

在某种程度上,Cocoa环境和Java环境为访问Quartz 2D和其它渲染库提供了它们自己的编程接口 。您既可以使用Cocoa和Java接口,也可以使用在应用服务层上的编程接口 。

这一节的余下部分所讨论的是,在图形和视窗环境下的Quartz所扮演的角色 。关于QuickDraw、QuickTime和OpenGL的概念内容请参考相关的Apple开发文档(developer.apple.com) 。

Quartz Compositor

Mac OS X的Quartz Compositor层由视窗服务器和由视窗服务器所实现的(私有的)系统编程接口(SPI)所组成 。这一层负责对初始屏幕显示、视窗合成与管理、事件路由和指针管理进行响应 。

视窗服务器是一个单独的系统范围内的进程,用于协调低级别的视窗动作,并强制保持在屏幕上所显示视窗的基本一致性 。它是一个轻量级的服务器,因为它自己不能进行渲染,但可以与位于其上层的客户图形库进行通讯 。从绘画模型方面来说,它是“不会发表意见的” 。

视窗服务器与其它系统服务和库几乎没有依赖关系 。它依赖于内核环境中的I/O Kit(尤其是,用I/O Kit构建的设备驱动程序),为的是与框架缓冲器、输入设备的底层结构和输入输出设备进行通讯 。它也与核心服务的某些框架相链接,以获取进程管理服务,如基本进程的激活 。

视窗服务器的一个首要职责是视窗合成 。当视窗在被绘制、被重画、覆盖和被覆盖时,由它来合成每一个应用程序的视窗像素 。每个视窗都被描述成一幅位图,它包括了半透明(alpha通道)和抗锯齿信息 。位图作为缓冲器允许视窗服务器去“记住” 一个应用程序的视窗内容,并在不干涉应用程序的情况下将它进行再合成 。然而,视窗服务器(Quartz Compositor)没有记忆那些被图形库(例如Quartz 2D)用来创建视窗和其它图象的矢量信息 。取而代之的是,位图被应用程序和视窗服务器所共享,应用程序直接对共享位图进行绘画操作,并相应地由视窗服务器来合成该位图 。

在它的Quartz Compositor组件中,Quartz以一个分层式的合成引擎来作为视窗系统的模型 。传统的视窗系统使用"交换"模型,在这个模型中屏幕上的每一个像素完全属于一个视窗(或桌面) 。因为这种模型,转变就必然很突然;举个例子来说,当您关闭一个视窗时,它会立刻消失 。在另一方面,一个分层式合成视窗系统基于“图像(视频)混合”模型 。在这个模型上,屏幕中的每一个像素都能够被视窗和视窗间实时共享(尤其是在半透明和抗锯齿特性上) 。这种模型允许平滑地在图形用户界面的状态间进行转换,这是Aqua体验所带来的与众不同的特性之一 。

推荐阅读