多层图形处理系统和方法 相关申请对照
本发明要求2001年10月18日申请的美国临时专利申请序列号60/330,244的优先权。本发明涉及同时申请的名为“Generic Parameterization for aScene Graph”(代理人文档号3130)和“Intelligent Caching Data Structurefor Immediate Mode Graphics”(代理人文档号3150)的美国专利申请,两者都被转让给本发明的受让人并在此引用作为全面参考。
技术领域
本发明一般涉及计算机系统,尤其涉及在计算机系统上显示的图形及其它视频信息的处理。
背景技术
在当代的计算系统中,图形和视频硬件的能力正快速增长。实际上,在一定的程度上可把当代计算系统中的图形系统更多的认为是协处理器,而不是简单的图形子系统。同时,例如不管是观看监视器、电视机还是蜂窝网电话机显示屏,用户正期待所显示的图像中的质量越来越高。
然而,存储器和总线速率还未跟上主处理器和/或图形处理器中地进步。结果,正在达到计算机系统上存取图形的传统立即方式模型的局限。同时,开发者和用户正要求传统图形窗口体系结构所不能满足的新特点和特殊效果。
虽然已经设计了某些游戏程序来利用图形硬件,这样的游戏程序以不同于桌面应用程序等的要求运行,主要在于所述游戏不需要涉及可能同时运行的其它程序。不同于这样的游戏程序,应用程序需要与其它应用程序共享图形和其它系统资源。然而,就图形处理而言,一般不把它们编写成协作的、全机器的共享模式。
例如,用桌面应用程序进行动画制作当前要求专门的专用代码或使用其它应用程序。尽管这样,即使不是不可能,在多窗口环境中实现平滑动画也是困难的。一般来说,这是因为完成平滑的、高速的动画要求以较高的帧速率,理想的是以所述图形设备的硬件刷新速率,来更新动画参数以及重新绘制场景(这要求遍历和绘制数据结构)。然而,更新动画参数以及遍历和绘制定义场景的数据结构一般在计算上是深入细致的。制作的场景越大或越多,计算要求就越大,这限制了所能平滑制作的场景的复杂程度。
当所述图形硬件进行显示刷新时,需要计算、绘制并准备显示动画的每个帧的要求使问题复杂化。如果当硬件要求时帧还没有准备好,结果是丢失的或延迟的帧。如果丢失了相当多的帧,则在动画显示中就有容易看到断断续续。并且,如果帧准备没有与所述刷新速率同步,可能发生被称为图象撕裂的不希望的影响。实际上,当代的多任务操作系统在许多系统任务之间分配计算资源。然而,操作系统任务调度程序对帧处理给出的时间量将难得对准所述图形硬件帧速率。因此,即使当存在足够的计算资源时,由于调度问题使所述动画系统仍可能丢失帧。例如,可能调度动画任务使之过迟地运行,或在完成一帧之前抢先,并且不能及时重新调度为屏幕的下一次硬件刷新提供下一帧。如果活动图形需要与视频或异步产生的帧的其它源合成,则这些问题将更复杂。
一般来说,当要求复杂图形效果(如复杂的动画)时,用于准备帧的当前模型(如WM_PAINT)要求太多的数据处理,以至于不能跟上刷新速率。结果,当用常规模型试图获得复杂图形效果时,可把变化加在导致视觉上和容易看到的不希望的结果的不同帧上,而不是在下一帧中完成所述变化,所述下一帧将导致对在下一帧的时间中的可察觉的视觉效果。存在计算模型,它们试图允许通过向场景图形中的每个对象提供对象句柄,选择地插入变化。然而,即使当应用程序不想对对象进行改变时所述对象句柄仍然存在,这样的模型要求应用程序跟踪相当数量的对象,并且还消耗太多的资源。
总之,在计算机系统上存取图形的现有模型正变得不足以与当前的显示硬件一起工作以及满足用户的期望。需要一种处理图形和视频的新的模型。
发明内容
简单地说,本发明提供了一种多层图形处理系统和方法(如对于操作系统的),用于提供包括例如平滑动画的改进的图形存取和输出。在一个实现中,所述图形处理系统包括两个部件,包括请求式时间片(tick-on-demand)或慢速时间片(slow-tick)高层部件以及快速时间片(fast-tick)(如以图形硬件帧速率或它的倍数)低层部件。一般来说,所述高层部件遍历所要显示的场景并用稍后的内插的时间间隔来更新动画参数,并且将简化的数据结构传递给所述低层部件。所述低层部件处理所述数据结构以获得输出数据,包括按需内插任何参数间隔来获得瞬时值,并且对动画的每个帧绘制场景。
一般来说,本发明通过对图形数据进行因子分解,使得在高层处理部件上按较少要求的计划进行更新动画参数和遍历场景数据结构的计算上深入细致的方面,解决了上面确定的(以及其它)问题。所述低层处理部件较频繁地运转,但处理较少的计算上深入细致的任务,这是由于提供相对较简化的数据结构和指令来处理的高层预处理。还可以在这些低层时间片期间把视频帧集合成合成成分。
本系统和方法和好处包括类似电视质量的动画作为操作系统外壳的一部分,并且作为活动内容的动画引擎。更进一步的好处包括将视频图像与图形合成的能力以及在网络连接上用于高质量视频显示的向多个终端分发信息的能力,所述网络连接不必须是高带宽的,至少不是充分高带宽,以所要求的高帧速率载送常规光栅化的图形比特。
可以通过一种系统来提供本发明,所述系统包括用于输出包括图形的示信息的帧的图形子系统、以第1速率向所述图形子系统提供图形数据以输出显示信息的帧的第1部件、以及与程序代码接口来为所述程序代码产生场景数据的第2部件,把所述第2部件配置成以低于所述第1速率的第2速率将所述场景数据处理成图形信息,并向所述第1部件提供该图形信息。
一种具有计算机可执行的指令的方法和计算机可读媒体可包括,在第1部件处接收包括对应于用于输出的图形图像的数据的请求,把所述数据作为场景信息保存,以第1运算速率将所述场景信息处理成图形信息,并向第2部件传播所述图形信息。在所述第2部件处,以比所述第1运算速率快的第2速率并基于所述图形子系统的帧刷新速率,所述方法可包括接收所述图形信息,将所述图形信息处理成为所述图形子系统格式化的图形数据,并将所述图形数据传播给所述图形子系统以输出帧。
一种在其上存储有数据结构的计算机可读媒体可包括包括具有视觉图像标识符的标识符域以及对应于指令块的域的视觉图像更新块,所述指令块对应于一组与由所述视觉图像标识符标识的视觉图像有关的数据,把该组数据从高层图形处理部件传递给低层图形处理部件,并且所述高层部件从场景图形中构造数据结构并将该数据结构提供给所述低层部件,所述低层部件将所述数据结构处理成图形数据,用于传递给图形子系统以输出帧。
附图说明
结合附图,从下面的详细描述中其它好处和优点将变得更清楚,附图中:
图1是表示可结合本发明的示例性计算机系统的框图;
图2是表示根据本发明的一方面的媒体集成层体系结构的框图;
图3是表示根据本发明的一方面的智能高速缓存数据结构以及它与各部件的关系的框图;
图4是表示根据本发明的一方面的高层合成及动画引擎和其它层间的控制的综合流程的框图;
图5是表示根据本发明的一方面的在简单的数据结构中高速缓存的实例容器和其它节点以及它们的关系的框图;
图6是表示根据本发明的一方面的与其它部件互相作用的低层合成及动画引擎的一般部件的框图;
图7是表示根据本发明的一方面的低层合成及动画引擎的一般部件的框图;
图8是表示根据本发明的一方面的对所述低层合成及动画引擎的连接的逻辑结构的框图;
图9和10包括表示根据本发明的一方面的从高层合成及动画引擎到低层合成及动画引擎的信息流的框图;
图11和12是表示根据本发明的一方面的通过媒体集成层体系结构层到图形子系统的信息流的框图;
图13-22包括根据本发明的一方面的数据结构以及描述了用于从所述高层合成及动画引擎向所述低层合成及动画引擎传播信息的其它信息;以及
图23和24包括根据本发明的一方面的对于用于处理数据包的逻辑的一般描述的流程图。
具体实施方式示例性操作环境
图1说明了在其上可实现本发明的适当的计算系统环境100的例子。所述计算系统环境100仅是一个适当的计算环境的例子并且不打算提出关于本发明的使用或功能性的范围的任何限制。也不应把计算环境100解释成具有涉及示例性操作环境100中所示的部件的任何一个或它们的组合的相关性或要求。
本发明可与许多其它通用或专用计算系统环境或配置一起操作。可适合与本发明一起使用的众所周知的计算系统、环境、和/或配置的例子包括,但不限于,个人计算机、服务器计算机、手提或膝上型设备、输入板设备、多处理器系统、基于微处理器的系统、机顶盒、可编程的用户电子设备、网络PC、微型计算机、大型计算机、包括任何上述系统或设备的分布式计算环境等等。
将在由计算机执行的诸如程序模块之类的计算机可执行的指令的常规范围中描述本发明。程序模块一般包括例行程序、程序、对象、部件、数据结构等等,它们执行特定的任务或实现特定的抽象数据类型。还可以在由通过通信网络链接的远程处理设备执行任务的分布式计算环境中实行本发明。在分布式计算环境中,程序模块可定位于包括存储器存储设备的本地和远程计算机存储媒体中。
参考图1,用于实现本发明的示例性系统包括以计算机110的形式的通用计算设备。所述计算机设备110的部件可以包括,但不限于,处理单元120、系统存储器130以及将包括所述系统存储器的各种系统部件耦合至所述处理单元120的系统总线121。所述系统总线121可以是若干类型的总线结构中的任何一种,包括存储器总线或存储器控制器、外围总线以及使用多种总线结构的任何一种的局部总线。作为例子,而不是限制,这样的结构包括工业标准结构(ISA)总线、微通道结构(MCA)总线、增强的工业标准结构(EISA)总线、视频电子标准协会(VESA)局部总线、图形加速端口(AGP)总线、外围部件互连(PCI)总线,也称为中层楼(Mezzanine)总线。
所述计算机110典型地包括多种计算机可读媒体。计算机可读媒体可以是任何可由计算机110存取的可用媒体,并且包括易失性和非易失性两种媒体以及可拆卸的和不可拆卸的媒体。作为例子而不是限制,计算机可读媒体可包括计算机存储媒体和通信媒体。计算机存储媒体包括以存储诸如计算机可读指令、数据结构、程序模块或其它数据之类的信息的任何方法或技术实现的易失性和非易失性媒体、可拆卸的和不可拆卸的媒体。计算机存储媒体包括但不限于,随机存取存储器(RAM)、只读存储器(ROM)、电可擦可编程只读存储器(EEPROM)、闪存或其它存储器技术,光盘只读存储器(CD-ROM)、数字通用盘片(DVD)或其它光盘存储器、磁带盒、磁带、磁盘存储器或其它磁性存储设备,或可用于存储所想要的信息并可由计算机110存取的任何其它媒体。通信媒体典型地表现为计算机可读指令、数据结构、程序模块或诸如载波或其它传送机构的经调制的数据信号中的其它数据,并且包括任何信息传递媒体。术语“经调制的数据信号”指的是以对所述信号中的信息进行编码的这种方式来设置或改变它的一个或多个特性的一个信号。作为例子而不是限制,通信媒体包括诸如有线网络或直接电缆连接的有线媒体,以及诸如声音、射频(RF)、红外线以及其它无线媒体的无线媒体。上述任何的组合也应该包含在计算机可读媒体的范围之内。
所述系统存储器130包括易失性和/或非易失性存储器形式的计算机存储媒体,诸如只读存储器(ROM)131和随机存取存储器(RAM)132。包含诸如在启动期间在计算机110中的部件间帮助传送信息的基本例行程序的基本输入/输出系统133(BIOS),典型地存储于ROM 131中。RAM 132典型地包含处理单元120可立即存取的和/或可由处理单元120执行的数据和/或程序模块。作为例子而不是限制,图1说明了操作系统134、应用程序135、其它程序模块136以及程序数据137。
所述计算机110还可包括其它可拆卸/不可拆卸的、易失性/非易失性的计算机存储媒体。仅作为例子,图1说明了从不可拆卸的非易失性的磁性媒体中读取和写入的硬盘驱动器141、从可拆卸的非易失性的磁盘152中读取和写入的磁盘驱动器151、以及从诸如CD ROM或其它光媒体之类的可拆卸的非易失性的光盘156中读取和写入的光盘驱动器155。其它可用于所述示例性操作环境的可拆卸/不可拆卸的、易失性/非易失性的计算机存储媒体包括但不限于,磁带盒、闪存存储卡、数字通用盘片、数字录像带、固态RAM、固态ROM等等。所述硬盘驱动器141典型地通过诸如接口140之类的不可拆卸的存储器接口连接到所述系统总线121,并且磁盘驱动器151和光盘驱动器155典型地由诸如接口150之类的可拆卸的存储器接口连接到所述系统总线121。
上述的以及图1中说明的驱动器及其相关的计算机存储媒体为计算机110提供了计算机可读指令、数据结构、程序模块以及其它数据的存储。例如在图1中,把硬盘驱动器141说明成存储操作系统144、应用程序145、其它程序模块146以及程序数据147。注意到这些部件可以与操作系统134、应用程序135、其它程序模块136以及程序数据137相同或不同。这里对操作系统144、应用程序145、其它程序模块146和程序数据147给出了不同数字以说明至少它们是不同的副本。用户可以通过诸如输入板(电子数字转换器)164、麦克风163、键盘162以及常称为鼠标、轨迹球或触摸输入板的定位设备之类的输入设备将命令和信息输入到计算机20中。其它输入设备(未示出)可包括操纵杆、游戏操纵杆、卫星反射器、扫描器等等。通常通过耦合至所述系统总线的用户输入接口160把这些和其它输入设备连接到所述处理单元120,但可以通过诸如并行端口、游戏端口或通用串行总线(USB)之类的其它接口和总线结构连接。通过诸如视频接口190之类的接口还把监视器191或其它类型的显示设备连接到所述系统总线121。所述监视器191还可以与能够将诸如手写之类的数字化输入通过诸如触摸屏接口192之类的接口输入到计算机110中的触摸屏显示屏193等集成。注意到所述监视器和/或触摸屏显示屏可以物理上耦合至一外壳,在该外壳中结合了所述计算设备110,诸如在输入板类型的个人计算机中,其中所述触摸屏显示屏193实质上充当所述输入板164。此外,诸如计算设备110之类的计算机还可包括可通过外部输出接口194等连接的诸如扬声器195和打印机196之类的外部输出设备。
所述计算机110可以在使用到一个或多个诸如远程计算机180之类的远程计算机的逻辑连接的连网环境中运行。所述远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其它普通的网络节点,并且虽然在图1中仅示出了存储器存储设备181,但是它可典型地包括上述与计算机110相关联的许多或所有部件。图1中描述的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但还可以包括其它网络。这样的连网环境在办公室、企业范围的计算机网络、企业内部互联网以及因特网中是普遍的。
当用于LAN连网环境中时,通过网络接口或适配器170将计算机110连接到LAN 171。当用于WAN连网环境中时,所述计算机110典型地包括用于在诸如因特网之类的WAN 173上建立通信的调制解调器172或其它装置。可以是内部的或外部的所述调制解调器172可通过用户输入接口160或其它适当机构连接到系统总线121。在连网环境中,关于计算机110描述的程序模块或其各部分可存储于远程存储器存储设备中。作为例子而不是限制,图1说明了驻留于存储器设备181上的远程应用程序185。将理解到所示的网络连接是示例性的,并且可使用在计算机之间建立通信链路的其它手段。媒体集成层结构
本发明的一个方面一般针对用杠杆操纵存在于典型计算机系统中的图形硬件的更多的能力。为此,如图2中所一般呈现的那样,给出了媒体集成层结构200。应用程序、控制或其它类似的高层程序代码(如操作系统部件的用户接口)202通过一组应用程序编程接口(API)204等访问所述媒体集成层结构200,以存取(写或读)图形信息。注意到虽然这里描述的许多例子将涉及与API接口的应用程序,但是理解到其它较高层程序代码和部件(如操作系统的用户接口)也将能与这里描述的低层部件接口。同样地,任何对这样的较高层程序代码的引用,无论是否被称为应用程序、用户接口等,都应认为是等价的。
应该注意到由于包括安全性的各种原因,所述媒体集成层200(它输出图形)最好结合于操作系统中。例如,虽然允许一些或部分媒体集成层200插入于应用程序和操作系统之间是可行的,但是这样做将使恶意程序能够显示它想要的任何图形,并从而导致危害。例如,恶意代码可能显示请求输入口令的对话框,从而窃取用户的口令。将所述媒体集成层200结合于操作系统中的其它原因包括稳定性和有效性,例如,较低层能有效地信任来自较高层的早已经过验证的数据和指令。此外,较低层能暴露只有操作系统信任的接口以可靠地调用,也就是说不将那些接口暴露给不可预见的程序,从而确保了较大的稳定性。
在一个实施中,所述媒体集成层结构200包括高层合成及动画引擎206、定时和动画部件208、以及低层合成及动画引擎210。如这里所使用的那样,术语“高层”和“低层”类似于那些用于其它计算情况中的那些术语,其中一般来说,软件部件相对于较高部件越低,所述部件与硬件越接近。从而,例如,可在低层合成及动画引擎210处接收发自高层合成及动画引擎206的图形信息,其中使用所述信息来向包括硬件的图形子系统发送图形数据。
如下面所描述的那样,所述高层合成及动画引擎(在这里也称为高层合成器及动画制作器或高层引擎或部件)206构建显示树来表示应用程序202提供的图形场景,而所述定时和动画部件提供说明性(或其它)动画和定时控制。同样如下面所描述的那样,低层合成及动画引擎(在这里也称为低层合成器及动画制作器或低层引擎或部件)210包括多个应用程序的场景的着色,并具有也被称为着色器的着色部件,在屏幕上实现图形的实际着色。然而,注意到有时在较高层发生一些着色可能是有必要的和/或有利的。例如,当较低层服务从多个应用程序请求时,在每应用程序的基础上例示较高层,从而可能在较高层进行费时的或应用程序专用的着色,并向较低层传递位图参考。
一般来说,所述高层合成及动画引擎206构建显示结构并遍历所述结构,产生要传递给低层合成及动画引擎210的着色指令和简单的动画间隔。由所述高层合成器产生的着色指令可包括定时和动画信息。所述低层合成及动画引擎210取得所述着色指令和动画间隔,并管理动画制作、着色及合成随后要向图形子系统(如图形软件和硬件)212提供的场景。
另一方面或除了局部显示输出之外,所述高层合成及动画引擎206(或与其相似的部件)可用适当的格式向用于向打印机222等发送固定图像数据的低层打印代码220提供着色和动画指令,和/或可用适当的格式向用于向远程计算机228传输的低层终端传输服务器226提供着色指令和简单的动画间隔。注意到还可以越过网络传递更丰富的信息,例如可以要求使远程计算机在本地处理鼠标滚动效应而不带有任何网络通信量。多图形处理层
根据本发明的一方面,所述媒体集成层结构200如此将图形处理分成多层。这些层的每一个进行某些智能图形处理,它们一起允许应用程序、用户接口等202输出具有平滑动画的图形,将所述图形与其它应用程序的图形和视频帧合成。还可使所述动画和/或合成与音频输出同步。例如,通过使音频与所述低层部件处的帧速率同步,音频的定时能基本上与视频或图形的定时精确符合,并且不依赖计划任务、复杂预处理跟上刷新速率的能力。
如图3中通常表示的那样,当通过API 204通信时,在应用程序202之下,所述高层合成器和动画绘制器引擎206在树结构300中高速缓存应用程序图形数据,以智能的方式预处理所述数据并进行许多其它运算(下述)以便于复杂图形的输出。一般来说,所述高层合成器和动画绘制器引擎206进行复杂处理(有时称为编译),这显著地简化了处理量并显著地降低了较低层提供正确的输出而需要处理的数据量。然而,注意到由较高层进行的处理的量和类型可在很大的程度上依赖于较低层的负载、配置和性能。例如,如果存在高性能的图形硬件,则较高层可进行较少量的处理,并且反之亦然。所述高层和低层适应于这些因素。
与本发明相一致,所述高层合成及动画引擎206能完成这样的复杂处理而不埋没可用的系统资源,因为它以比下面的层或一些层相对较低的速率运转。作为例子而不是限制,所述较低层可按硬件图形处理器的帧(刷新)速率运转。例如,所述高层合成器和动画绘制器206仅当需要在请求的基础上或在别的时间进度基础上(如每半秒)实现显示变化。注意到虽然图3中描绘了单个高层合成器及动画绘制器引擎206,但是可以有多个它们的实例,诸如每个应用程序一个,而每个图形设备典型地仅有一个低层合成及动画引擎210,如机器上的每个图形硬件卡一个。
而且,所述高层合成器和动画绘制器206能修改其输出为(或被设计成输出)下面的适当的层或一些层(如实质上任何抽象设备302)的格式。例如,高层合成器和动画绘制器206能够产生经编译的输出,该输出最终用于打印机,用于在网络上传送到若干远程终端以在其上显示,或者如这里将主要描述的那样,用于存在于本地图形软件和硬件212之上的较低层合成器及动画绘制器210。单个高层合成器和动画绘制器处理多个抽象设备的应用程序的输出,或者可有一个适当的高层合成器及动画制作器的实例来为每个类型的抽象设备(例如一个用于本地图形、一个用于打印机以及一个用于终端服务器)处理应用程序的输出。
此外,可以简化由所述高层合成器及动画绘制器206提供的命令和其它数据来匹配硬件的性能和要求,例如硬件越少,所需的高层预处理越多。更进一步,例如高层预处理的量可以是动态的,以便适应于较低层或一些层上的变化的处理需求。
对于本地图形输出,在一个配置中所述媒体集成层结构200包括高层合成器及动画绘制器206、低层合成器及动画绘制器210。如下所述,一般来说所述高层合成器及动画绘制器对从客户程序(如应用程序)接收的图形信息进行复杂处理以构建图形结构并将这些结构转换成图形命令流。然后所述较低层引擎210使用这些来自不同客户程序的图形命令流来构成计算机用户所观看的桌面,例如所述较低层合成器通过将由存在于桌面上的各种客户程序发出的命令流组合成由图形合成引擎消耗的图形命令而构成桌面。
在该实施中,所述高层合成器及动画绘制器206执行复杂处理运算,以构建并以一般比图形子系统212的图形硬件的硬件刷新速率低得多的速率将所述结构300转换成图形命令流。由于该高层预处理,所述低层引擎210能够在图形子系统212的图形硬件的硬件刷新间隔内进行其自己的处理运算。然而如上所述,所述低层引擎210能在返回信道上与所述高层引擎206反向通信,使得所述高层预处理能动态地适应于所述低层处理的需求。注意到从所述低层合成器及动画绘制器206到高层合成器及动画绘制器206的返回信道主要用于向高层引擎206传递流控制(低层引擎210信令,它需要更多数据或正接收太多数据)和/或用于高层引擎206可作用的错误状态。这样的通信的一个优点是低层合成及动画引擎210不需要涉及优先级或调度,但可保持与刷新速率的同步。相反,早已存在于当代的操作系统中的高层CPU进程调度将控制优先级。因此例如,如果应用程序进程试图相对于其优先级取得过多的它的高层预处理的共享,那么该应用程序将在其输出中受到不利的影响。然而,注意到当所述低层系统处于重负载时,它可以选择把一个进程/高层部件的变化和需求列为超过其它的优先。例如,可以给予前台应用程序优先级。高层合成器及动画绘制器
在一个实施例中,包括高层合成器及动画绘制器206的媒体集成层200适应于给定机器上的硬件的差异,因为不能实际上把每个用户应用程序编写成处理图形硬件的许多类型和变化。然而,应用程序还可有助于由媒体集成层200提供的改进的图形处理,也就是通过向高层合成器及动画绘制器206提供比当前传递给操作系统的图形API更多(且不同)的信息。例如,可通过媒体集成层API 202向察觉到媒体集成层200的应用程序提供不同的数据,包括动画意图等等。作为例子,应用程序能提供关于特定的图像应怎样随时间移动(如相对于固定背景)的指令,而不是通过连续地重新绘制稍微改变的图像来完成动画。然后如下面通常所述的那样,所述媒体集成层200以平滑绘制的方式处理动画。
一般来说,如图3和4中所表示的那样,应用程序202通过API 204构建场景图形数据结构。所述数据包括高层结构和原语数据,并被转换成用于智能地高速缓存视觉图像信息的高速缓存数据结构300。
在全部智能高速缓存数据结构300中的对象(或结构)中之一是容器,在图4中以容器402、404或408表示(另一方面称为2维视觉)。在一个实现中,容器(如404)提供同一性,即应用程序能保持对它的一句柄,并且包括程序上的参数,所述程序上的参数可用于钩连动画以及制模、选中测试和用户数据。然而,注意到这里表示的容器不是可暴露的仅有的容器类型。其它的例子可以包括为将行存储于段落中或为将许多子节点存储与网格中而优化的容器。虽然某些类型的容器可能不允许对子节点的随机访问,但是可以添加或除去子容器而不清除当前的子列表。根据需要可适配通过API暴露的结构。
该数据结构的其它(内部)节点包括变换406、字母节点、高速缓存节点以及原语节点410、412,它们用于存储不直接与API容器相关联的内部数据。一般把原语作为指令流存储,可以直接把所述指令流传递给图形设备。
如图5的树形段500中所表示的那样,诸如510之类的容器能如此保持其它容器512或绘图原语516,其中可以把在任何容器内存储的原语认为是图形指令流。容器还可存储其它容器,实际上创建图形,即容器可由不止一个容器访问,使得所述数据结构是容器的有向非循环图(DAG)和原语列表(其中没有一个容器能包含它的父容器之一)。同样如图5中所表示的那样,通过允许树以类似于图形的方式访问其它树,可在不同的位置并用不同的参数重新使用诸如所述树形段502中的容器518的任何容器。
如图4的绘图上下文416中一般所表示的那样,通过打开/关闭模式组装容器。尤其是所述高层代码202打开数据结构中的容器408,提供绘图上下文416以将绘图原语写入和/或将其它容器添加入所述数据结构中,并然后关闭所述容器408。在一备择实现中,当关闭容器时,把它的数据置于在稍后的某一时刻应用的变换队列418中。所述容器的打开和关闭是用于改变数据结构的主要机制之一。注意到可以使用其它应用模式,尤其是用于不同类型的容器。
在该备择实现中,由于将对数据结构的改变置于队列中,就启动了用于更新数据结构的类似于事务处理(或类似于批处理)的系统。结果,当打开并写入容器时,直到所述容器关闭屏幕上才呈现变化。所述屏幕的变化是微小的并且不存在部分绘制的屏幕的暂时的人工因素(也称为结构上的图像撕裂)。此外,可扩展这样的事务处理行为,使得一次施加多个容器的改变。这样,所述较高层代码202能够设置对场景的许多改变并可一次施加全部这些改变。
在一备择实现中,通过经显示管理器420向队列418揭示变化,异步地进行数据结构的改变,使得将在着色线程422上处理所述改变,并例如将其发送到低层合成器及动画绘制器210(其中图3的抽象设备302包括抽象,所述抽象将由高层合成器206发出的着色命令的转换封装成流向低层合成器210的着色命令)。所述类似于事务处理的模型还能够进行对数据结构的修改而不干扰从该数据结构中读取。虽然上述队列模型使来自高层引擎206的读传递能够不依赖于任何用户采取的动作而运行,但是用户应用程序需要高速缓存来保持API的一致样式,这可能导致低效率。作为例子,认为主用户线程上的用户应用程序在容器上设置性质(高层引擎206中的对象)。在队列模型中,该性质被置于要由高层引擎206数据结构应用的队列中。然而,如果用户应用程序试图立即从容器中读回该性质,则系统将需要根据当前什么在队列中来读回所述性质(这是低效率的),与着色线程同步并在队列中施加待决的变化(这是低效率的并将否定具有队列的好处),或者在容器中保持用户可变数据的副本(着色版本和待决版本)(这是低效率使用存储器的)。
由于通过应用程序的读回可能存在相当的量,备择实施例通过同步更新所述高层引擎206数据结构和所述主用户线程而消除了队列。虽然这使用户应用程序能够冻结着色,但是整个系统是更有效的。然而,为了缓和可能冻结所察觉的影响,所述动画和定时系统的各个部分可以独立地运行以将信息向下传播到低层引擎210,而委托所述低层引擎210进行不依赖于高层引擎206的更多的动画处理。然后,如果由于用户动作而冻结了所述高层引擎206,屏幕的输出仍将相对较平滑且一致的。
又一实施例是消除所述着色线程,并使所述主用户线程进行高层引擎所需的任何处理,以将着色指令传递给低层引擎210。在某些情况下,这是对线程的更有效的使用。
回到图4,容器408包括基本等同节点,该节点包含绘图原语,而所述绘图上下文416包括从容器获得的图形生成器(如求助程序对象),它可用于向容器添加原语、变换、剪辑或其它绘图操作。显示管理器420包括主对象,它表示所述高层合成器及动画绘制器206的实例,并且例如能够依附于hwnd(窗口句柄)或hvisual(视觉容器句柄)。所述显示管理器420具有指向场景的根容器402的指针,当容器无效或需要重画时将事件调度到高层代码,并提供对诸如选中测试以及坐标变换之类的服务的访问。
虽然所述较高层代码202能把某些对象的句柄等等保持在数据结构或容器中,但是容器中的大多数对象不具备来自应用程序的透视的同一性。尤其是对该结构的访问被限制于大多数使用模式是“只写”的。通过以这样的方式限制同一性,可以优化存储于该数据结构中的较多的信息,并且所述较高层代码202不必需存储对象信息或处理管理对象的生存期。
例如,具有如过后需要请求重画场景的应用程序,可以收回保持不需要的部分图形(如对应于已被剪辑或滚动出屏幕之外的视觉信息)的资源,。从而,一般地当容器打开时,它的内容就被清除以及忽略。如果那些内容不具有同一性,那么它们可以安全地消失,使得系统可收回用于它们的资源。如果较高层代码202或图形的某些其它部分保持在子容器上,则那些容器固定在周围并可被重新插入。然而,可以根据较高层代码202的需要而改变及适应该模式。
从而,总的来说,所述容器是具有同一性的对象,即使用数据结构的高层代码能保持该对象的句柄。具有同一性的对象反面是明码数据,并且当用户编码可使用把不具有同一性的数据作为对象对待的思维模型时,一旦将这些数据提交给系统,稍后就没有办法引用该对象。如此,可以用便于系统的方式转换和改变对象。
作为简化的例子,用于绘制文本行的API函数可包括文本行对象。该对象的用户将要绘制的实际文本,连同其它有关怎样着色该文本的不同游程(字体、大小、画笔等)的信息一起填装所述文本行对象。当用户程序代码想实际上将该文本行加到数据结构中时,所述程序代码可把绘制文本看作某一特定开启节点,并将所述文本行对象传递给绘制上下文中的绘制函数。所述系统实际上取得在该文本行对象中的数据,并将该数据复制于所述数据结构中。由于该数据不具有同一性,所述高层合成器及动画绘制器206能自由取得该行的内容,运行算法(如OpenType),以将文本分解成具有位置的符号,并存储确定位置的符号数据代替原始文本。在绘制了该行之后,系统将不具有对用于绘制行的文本行对象的引用,即系统所存储的数据不具有任何同一性。
另一方面,所述较高层编码202可请求在该文本行对象中保存同一性,要求在数据结构中存储对该对象的引用。如此,如果所述较高层代码202稍后改变了所述文本行对象,则系统将发现该变化并在经处理表示的输出中反映该变化。注意到在较实际的例子中,同一性将不暴露于文本行对象自身之上,而是应用程序将保持容器的句柄,并按需要用参数表示该容器而进行改变,如前述的名为“Generic Parameterization for a Scene Graph”美国专利申请中所述。然而,所述数据结构的一个主要方面是减少较高层代码202创建这种具有同一性的对象的需要,从而控制编码202在数据结构中引用的点的数量减少。这使数据结构更优化。
例如,由于暴露于所述数据结构之外的同一性的量的减少,就允许诸如原语的密集存储之类的优化。为此,把矢量图形数据存储于“原语列表”或原语容器中。这些容器是实施指定的,并且不以同一性暴露于所述高层代码202。当调用程序将数据写入容器时,该数据或者存储于链接着的分开的对象中,类似于容器(如与转换连接在一起),或者可流入封装的且扁平的数据阵列中。该阵列不仅可以压缩的方式存储矢量图形数据,还可以跟踪伴随这些原语的资源。由于单个原语不具有同一性,不需要分出原语或向用户提供一种方法来稍后改变那些原语,允许更有效地存储所述原语。
如另一种优化,当子图形不在变化时,就可能存储该树的内容的位图,并使所述位图依附于容器,从而减少了所需要的高层处理量。此外,当子图或原语列表的一部分在能把其传送到较低层代码用于着色之前而要求有效处理时,(如在切换到硬件设备之前的矢量图形的镶嵌),可以高速缓存经后处理的结果供稍后重使用。
而且,由于除了具体的读操作(下述)之外,所述结构无揭露,只要经着色的结果是相同的,那么所述数据结构可自由重新组织容器。因此,容器可在空间划分的树中存储子容器,来优化着色和其它读操作。此外,可以在相同的设备或多个设备上多次显示所述数据结构。为此,可根据设备是否是依赖的来锁上所述高速缓存。如果认为子树是静态的,常由于它周围的动画而重画并且是足够密集的而能够保证资源消耗,那么对该子树可自动地插入高速缓存节点。
对于着色,读取所述数据结构(或者在某一预定时间或者由不同的线程)并将某种形式的经处理的信息传递给较低层动画绘制器及合成器210。为此目的,在一备择实现中,着色对象和线程(每个进程)422遍历所述数据结构300来驱动着色进程。在另一备择中,在“协作多任务”类型的配置中,所述着色进程可在普通线程上与其余的用户代码共享时间,而不是仅在其自己的线程上运行。虽然较佳的是将所述数据结构300编译成供应给较低层部件的视觉信息,用于非常快速的合成及动画绘制,但是所述数据结构300可用于直接着色。还可以不同的方式编译所述数据结构300,如穿过网络发送到远程终端、打印机和/或串行化到盘片或某些其它更永久性的存储媒体,用于交换或高速缓存。
在一个备择实现中,在另一线程422上读取所述数据结构300用于着色。然而,应该注意到对另一线程的使用并不是要求,例如“着色线程”可选择地包括在与其它每个线程相同的线程上运行的协作共享机构。
在使用着色进程/线程的备择模型中,所述着色线程按需运行以提供预定的效果。每次所述线程运行时,它首先应用所述变换队列418中的任何待决变化。然后所述着色线程422游历所述数据结构300以收集诸如边界框之类的信息,并收集无效信息(下述)。最后,它游历那些自从上次以来已经改变的或由于某些其它原因需要着色的区域,并执行存储于所述数据结构中的着色指令。注意到在所述不使用变换队列的备择模型中,当正在作出变化时直接施加变化,因此这里不需要施加。
从而,从所述数据结构300的着色是可在分开的着色线程422上运行的多重通路处理,包括将所作出的排队的变化应用到数据结构的通路、进行预计算的通路以及着色通路,所述预计算包括迭代所述数据结构并计算对诸如边界框、活动参数值等着色所需的数据。所述着色通路使用抽象设备302进行着色,这最终将委托给低层合成器及动画绘制器210。在所述着色通路期间,可高速缓存经中间高速缓存的资源426,以便改进随后的帧上的着色性能。
所述数据结构的最后一次游历的可能结果包括,直接执行并在显示屏上显示数据,或在所述最后一次游历的结束处触发的反向缓冲器上执行所述数据。其它结果包括用扩展的定时和动画信息(如下述)将所述数据集合在一起并向下传递到以快得多的频率运行的着色线程/进程。所述游历还可导致把由于屏幕捕获或其它原因在位图上执行的数据送往打印机或穿过网络传送,并然后由于上述原因的任何一种而在远程机器上使用。这些结果的组合也是可能的。
如可理解的那样,在所述数据结构300中存储数据可能要求大量存储器。此外,因为由于剪辑、翻滚或其它原因造成的不可见,数据结构300中的许多数据可能是不需要的。为了降低资源需求,可以按要求构建所述数据结构300。为了允许这样,提供了一种用于回调所述较高层代码202以按需创建数据结构300的各部分的方法。这种方法已被称为“无效”,并且类似于用于常规图形系统中的WM_PAINT回调方法,但是应用于所述结构300和经高速缓存的内容而不是直接应用于屏幕上的位。然而,在一个备择队列模型中,读操作(类似于下述的选中测试和坐标变换)首先应用变化,使得所述呈现给用户的模型是同步的。
当由于低资源的原因系统丢弃内容时或当所述较高层代码直接请求容器作为无效时,在建立容器时就可以使它们无效。例如,所述较高层代码能建立容器并提供图形大小,所述图形大小定义该容器在哪里以及多大。在着色操作期间,如果该容器被标记为无效,但现在被确定为是所需要的,那么所述着色线程422将要求所述较高层代码202填充所述容器。所述着色线程422能等待所述较高层代码202完成所述请求,或者继续没有所需数据的所述着色。所述第1选择不是理想的,但在某些情况下是必要的。
当最终填充了数据时,所述着色线程422将再次运行以显示那些新变化。在一个当前的实现中,将填充容器的请求置于另一队列中,以重新回到运行所述较高层代码202的线程。然而,这可以以其它的方式进行,包括对在运行着色的同一线程上的较高层代码202的同步调用。然而,进行任何这样的调用同步将停止所述着色线程。
除了排队对数据结构300的更新之外,需要为服务提供从所述数据结构300中读回。这样的服务包括选中测试、点转换以及子图大小调整。
选中测试是一种处理,借此在数据结构的某个根的坐标空间中给出点,并且探测所述数据结构,使得返回由该点选中的容器或原语。在当前实现中,所述选中测试处理由每个容器上存储的3个标志的值控制(虽然额外的标志也是可行的)。第1标志包括一设置,该设置指示选中测试算法停止并返回迄今所收集的选中测试结果。第2标志包括一设置,如果被选中的点确实选中了容器的话,该设置就告知所述选中测试算法在结果列表中包含该容器。第3标志控制是否应再次选中测试该容器的孩子。
另一读服务是点转换,其中给出通过图连接的两个节点,存在一个服务程序,借此可把一个容器的坐标架中的点转换到另一容器的坐标架。有3种一般的子类型,包括从祖先转换到后代、从后代转换到祖先以及从同等级转换到同等级(从任意节点到任何其它任意节点)。从而所述读服务提供了一种用于坐标变换的查询数据结构方法,并平衡所述树结构以游历并计算所述变换。当进行多重变换时可锁定动画/变化,并且可提供通过公共的祖先进行变换。
另一读服务是子图大小调整。给定一节点,该服务返回该节点及其子图的图形大小。所述大小可以用下面的形式表示,保证足够大能包含子图的大小,某些可能大小不同,正好足够大到能够包含子图,或详细描述子图轮廓的更复杂的形状。
一种实现希望这些读操作与数据结构的变化同步。为此,如果在调用任何这些读操作之前应用了所述变换队列,就呈现给较高层代码更一致的样式。低层合成器及动画绘制器
低层动画绘制器及合成器引擎210的主要目的是提供媒体集成层200的低层着色堆栈的抽象,这考虑到(1)客户图形应用程序的高帧速率动画,(2)类似窗口管理支持的实现,以及(3)支持基于网络连接的远程图形服务。如图6和7所表示的那样,所述低层动画及合成引擎210充当服务器,尤其通过使用着色器集602所提供的服务,来协调所接收的来自多个客户程序的高帧速率动画请求(如用各自的高层合成器与多个应用程序对应)。所述着色器602产生作用于由图形合成引擎606实现的着色抽象(也称为视觉图像)的着色动作。
所述低层动画及合成引擎210还提供包括基础结构的顶层视觉管理支持,所述基础结构目的在于允许专门的客户程序(顶层视觉管理器604)处理客户应用程序所使用的视觉图像作为屏幕上的着色区域。对着色堆栈着色的每个客户应用程序2021-2023(图7中仅示出3个,但是可以是任何数量)拥有顶层视觉(分别是TLV1-TLV3),并且所述顶层视觉管理器604是具有管理屏幕上的顶层视觉图像的布局的权利的客户程序。一般来说,所述低层动画及合成引擎210通过将存在于桌面上的各种客户程序发出的命令流组合成由所述图形合成引擎606所消耗的图形命令,来构成桌面。所述低层动画及合成引擎210还帮助使用它的部件实现使远程机器6101-610n的编程用户接口与本地机器相同的着色构架。
图7示出了低层动画及合成引擎(服务器)210与其客户程序之间的交互。如上所述,所述顶层视觉管理器604也是一客户程序。同样如上所述,所述低层动画及合成引擎210的客户程序2021-2023使用高层合成器及动画绘制器引擎206的实例,来构建图形结构并将这些转换成低层动画及合成引擎210使用的图形命令流,以构成所看到的桌面。在一个实施例中,仅有一个低层动画及合成引擎210,处理或者在本地机器或者在远程机器上运行的客户程序(如高层合成器)发出的命令流。
返回图6,可以通过由所述低层动画及合成引擎(服务器)210维持的性质系统进行进程间的通信。由该性质系统存储与每个顶层视觉相关联的性质。客户程序可写或读取这些性质,并且在请求改变性质时可通知客户程序。
所述低层动画及合成引擎210提供客户-服务器通信、快速动画着色以及顶层视觉管理支持。在一个实现中,低层动画及合成引擎210与客户程序之间的通信通过单个双向字节流和/或共享的存储器发生。对于所述字节流,本地客户程序使用进程间通信,而远程客户程序开启网络字节流连接。所述字节流是控制客户服务器互连的通信协议的传输层。
所述通信协议包括3个主要消息,即请求、回答以及事件消息。还提供了差错消息。如下所述,客户至服务器通信主要包括着色指令,而服务器至客户通信主要是以响应和差错消息的形式的反馈。
由客户向服务器生成请求,并且所述请求可包括顶层视觉管理命令、着色指令命令以及定时间隔命令。由服务器可向客户发送回答来响应所述请求。然而,应该注意到不是用回答来回复所有的请求;仅响应于搜索信息的适当的请求而产生回答。例如,绘制指令不需要回答。然而,“获取窗口大小”请求需要并接收回答。
从服务器向客户发送事件,并且所述事件包含关于设备动作或关于前一请求的副作用的信息。例如,由于资源无效,服务器可将事件消息传播到客户,并且还通知客户目标帧速率。能够传递目标帧速率的能力允许可变的帧速率,这是所希望的,因为它确保了恒定的帧速率而不是高帧速率。
还可将差错发送到客户。差错类似于事件,但是它一般由客户以不同的方式处理,如补偿差错。
在客户程序能使用低层动画及合成引擎210所提供的服务之前,所述客户程序首先通过由连接管理器710(图7)所提供的入口点建立与所述引擎210的连接。所述连接管理器710分配封装客户服务器协议的双向字节流传输层的通信对象(如7121)。它还分配指令列表管理器(如7141),所述指令列表管理器对随指令流而来的着色指令保持跟踪,并使它们与正确的视觉图像相关联。
一旦建立了连接,客户程序202请求创建顶层视觉。响应于该请求,所述低层动画及合成引擎210通过使用图形合成引擎606所提供的服务来创建所述顶层视觉(如TLV1)。把由所述低层动画及合成引擎210向其客户程序所保持的视觉图像组织成树形结构718中。当客户程序完成顶层视觉时,它就请求它的消除。注意到根节点710是代表桌面背景的特殊的视觉图像,并且所述根视觉图像的子节点是顶层视觉图像。
如图4中所表示的那样,所述低层动画及合成引擎210的一个重要作用是管理对计算机桌面的着色,这由通过依靠两个其它部件的服务来实现,所述两个其它部件即图形合成引擎606和着色器集602。所述图形合成引擎606通过被称为视觉图像的着色抽象而提供低层合成服务。视觉图像是用于组成桌面的矩形的着色区域,并能够通过所述图形合成引擎606提供的一组API来进行着色。当到了组成桌面的时候时,着色传递管理器722从左向右遍历所述树并对于每个节点使用着色分量进行对视觉图像的着色。
除了顶层视觉的生存期管理之外,所述低层动画及合成引擎210还支持顶层视觉装饰,实质上是在所述顶层视觉图像周围添加修饰。装饰7301-7303是以着色指令列表的形式绘制所述顶层视觉管理器提供的着色修饰的视觉图像。这些视觉图像是顶层视觉图像的孩子,这些孩子属于所述顶层视觉图像。所述客户程序(如应用程序)能通过在所述顶层视觉图像上设置预定性质来控制顶层视觉管理器所提供的修饰。
所述低层动画及合成引擎210还支持使顶层视觉的服务最小化,这还可由所述顶层视觉管理器604按照着色指令列表来提供。支持顶层视觉图像定位、大小调整和Z轴排序,以及对于像视觉图像关闭和最小化等的视觉管理器动作指定三维效应。从而,虽然主要关于2维图形描述了实现,但是本系统可方便地用于存储其它类型的媒体,包括3维图形、视频和音频。
如上所述,所述顶层视觉管理器所需的着色指令列表由高层动画绘制器及合成器206产生。所述低层动画及合成引擎210定义一组具有默认行为的顶层视觉图像动作,如最小化或关闭。如果所述顶层视距管理器604希望自定制这样的行为,它就使用高层API来构建它所希望替换的动作的描述。然后,它向所述低层动画及合成引擎210发送指令流。所述低层动画及合成引擎210在其性质系统614中存储该描述,并当客户程序请求所指定的动作时使用该描述。
通过使用所述性质系统614进行顶层视觉修饰。在启动时,所述顶层视觉管理器发送高层引擎所产生的指令列表,描述顶层视觉管理器修饰。通过所述性质系统614,对这些修饰进行更新,即当客户程序希望更新修饰时,该客户程序将指定的性质设置为所希望的值。然后所述低层动画及合成引擎210把性质已经改变通知所述顶层视觉管理器604。作为响应,所述顶层视觉管理器604读取所述性质并更新所述低层动画及合成引擎210上的几何图形。
如前述名为“Generic Parameterization for a Scene Graph”的美国专利申请中进一步描述的那样,使所述指令列表参数化,这一般意味着所述顶层视觉管理器604不需要涉及简单的变化,如修正图形图像的颜色。在这样的情况下,客户程序改为向下发送新的参数(如新的颜色),并且用相同的指令列表但使用不同的参数对所述修饰重新着色。这还提供了仅存储每个修饰描述的一个副本的能力。
图8示出了实现所述客户-服务器通信信道的队列801-804的逻辑结构。在活动的着色指令中嵌入了定时间隔。在着色时间处,所述低层动画及合成引擎210把当前时间连同定时间隔一起传递给着色器。接着,如下所述,所述着色器使用所述定时间隔来内插用于着色的正确参数。响应于所接收的来自高层客户程序的指令命令,指令列表管理器714管理所述活动的着色指令。当接收到所述着色指令时,所述指令列表管理器714使它们排队。所述着色队列是Z轴排序的,并且所述着色传递管理器722在构图时间消耗它们。
除了使时间控制的着色指令排队之外,所述指令列表管理器714还支持其它操作,包括清空所述队列801-804、从所述队列中除去指令、向所述队列添入指令、用新的指令列表替换队列以及将固定的时间偏移应用于所述队列中。受定时控制的着色的一个特殊情况是当仅控制着色指令的可见性时。在这样的事件中,所述定时间隔可用于控制着色队列中的指令的生存期。
可能存在这样的情况,即客户程序需要嵌套的视觉图像来正确地绘制其内容,诸如当在场景中存在视频时。由于由独立的着色进程进行视频更新,所述低层引擎210依赖于所述图形合成引擎,构成所述视频以及覆盖它的几何图形。这是通过创建包含于客户应用程序的顶层视觉图像中的新的视觉图像而实现的,所述顶层视觉图像隐藏了在所述图形合成引擎的合成传递中更新的视频的异步特性。所述分享视觉图像需要的覆盖几何图形具有相同类型的α行为(每象素或透明的)。动画
一般来说,由所述高层合成器及动画绘制引擎206和所述低层合成器及动画绘制引擎210一起实现动画。如上所述,把所述媒体集成层分成用户接口或应用层下的多个图形处理层。所述高层引擎206遍历场景,用适合于稍后内插的间隔来更新动画参数,并且将这些简化的数据结构包装成被传递到所述低层引擎210的指令。这可以用同步和/或异步的方式进行。可把所述间隔数据看作包括定时端点(起始和结束定时数据),以及用于所述着色指令的参数化的值。注意到所述高层引擎204能进行一些或全部所请求的内插,例如,如果内插或其它运动功能对于所述低层引擎210来说太复杂以至于不能处理,或者所述低层引擎不能跟上置于其上的处理需求,那么较高层引擎能执行一些或全部计算并向较低层提供简化的数据、指令、镶嵌等等,以实现所想要的结果。在较低层进行内插的典型情况中,对于动画的每一帧,所述低层引擎210内插参数间隔以获得瞬时值,并将指令解码成由图形设备执行的着色命令。所述图形设备构成添加任何可能出现在场景中的视频帧最终的场景。还可以添加其它数据,如数字权利管理所保护的内容。
如下所述,通过指令流实现所述高层引擎206和所述低层引擎210之间的通信。所述高层引擎206以其较低的频率,或按请求,将着色指令写入到所述流中。所述低层引擎210从所述流中读取指令并绘制场景。注意到所述低层引擎210还可从其它源获得绘制场景所需的数据,如来自共享存储器的位图等。
从而,所述高层(如请求式时间片)引擎210尽可能少地更新动画参数并遍历场景数据结构而维持平滑的动画。所述高层引擎206遍历所述场景数据结构,在一时间周期内计算描述每个活动参数的间隔,并将这些间隔和简化的参数化的绘制指令传递到低层引擎210。所述参数数据包括起始时间、结束时间、内插器以及内插数据。作为例子,所述高层合成器及动画绘制引擎206能指示所述低层合成器及动画绘制引擎210关于图像应如何随时间流逝而改变,如起始坐标、结束坐标、在坐标间所述图像应移动的时间量(间隔)以及例如线性的运动函数,而不是擦除或重绘制图像使其看上去运动。所述低层合成器及动画绘制引擎210将内插以确定帧之间的新的位置,将它们转换成所述图形设备能理解的绘制指令,并将这些命令传递给所述图形设备。
所述高层引擎206的每次传递最好为所述低层引擎210提供足够的数据,以在若干帧上进行平滑动画。可使用最短间隔的时间长度来确定所述高层引擎206维持平滑动画所需的运行的最小频率。完全静止或仅包括可由单个间隔定义的简单动画的场景只要求,当由调用程序202作出对场景的改变时,所述高层引擎206运行。包含更复杂动画的场景要求所述高层要求206以相对较少的间隔运行,如大约每半秒一次,在该场景中可在短周期(但仍然比硬件刷新速率大得多)内预测并精确地内插参数。至少一个参数不能被预测的高度复杂的动画将要求所述高层引擎206较频繁地运行(直到系统将实质上退化成单层动画系统的极限)。
所述高层引擎206运行的频率不需要一致或固定。例如,可以安排所述高层引擎206以不大于所述场景中的动画参数所提供的最小间隔的一致间隔而运行。另一方面,在所述高层引擎206的每次运行上所计算的所述最小间隔可用于安排下一次运行,来确保将把新的数据及时地提供给所述低层引擎210。类似地,当对所述场景和/或其活动参数作出结构上的变化时,可运行所述高层引擎206的频率来确保精确地制作出新的场景。
所述低层(如快速时间片)引擎210是与所述高层引擎206分开的任务。所述低层引擎210接收来自所述高层引擎206的简化的参数化的绘制指令和描述场景的参数间隔。所述低层引擎维持并遍历这些数据结构,直到高层引擎206提供新的数据结构为止。所述低层引擎可服务多个高层引擎206,为每个高层引擎提供分开的数据结构。所述低层引擎210和高层引擎206之间的一对多的关系允许系统同时平滑地动画制作多个场景。
所述低层引擎210根据所述高层引擎提供的间隔,对每一帧内插瞬时动画参数,更新绘制指令并绘制场景。在系统上以高优先级运行所述低层引擎210任务,以确保已准备好帧按图形硬件屏幕刷新速率而显示。从而,一般将所述低层引擎210进行的内插限制到简单、快速的函数,如线性、分段线性、三次样条以及那些具有类似速率的函数。所述低层引擎210以规则的频率或帧速率运行,该速率是所述硬件刷新速率的整因子。将由所述图形硬件以一致的数量或刷新来显示所述低层引擎210所绘制的每个帧。高层、低层通信
转向说明所述高层合成器及动画绘制引擎206与所述低层合成器及动画绘制引擎210之间的相互作用,若干配置是可行的,包括进程中的,其中所述低层引擎210仅服务于一个高层引擎206,并且两者皆处于同一进程中。交叉进程配置也是可行的,其中所述低层引擎210仍然仅服务于一个高层引擎206,但是所述高层引擎206和所述低层引擎210处于独立的进程中。
桌面配置是所述交叉进程配置的扩展,其中所述低层引擎210对许多高层引擎的实例服务,并控制整个桌面的着色。当所述高层引擎206在服务器机器上,并且所述低层引擎210在客户机器上时,远程配置也是可行的。所述远程情况能或者在所述高层引擎206和所述低层引擎210之间具有一对一关系,或者所述低层引擎210可服务于许多本地和远程的高层引擎。可把所述远程配置看作非常类似于所述交叉进程和桌面配置,但是高层引擎206和低层引擎210在不同的机器上。
与本发明相一致,准备所述高层引擎206中的数据用于向所述低层引擎210传输,并且所述低层引擎210一接收所述数据就处理它们。下面一般描述了所述数据的格式,以及在所述高层引擎206中怎样产生数据以及所述低层引擎210怎样将该数据用于着色。
图9-12示出了高层引擎206、低层引擎210与形设备之间的总体相互作用和数据流,而图13、14和15提供了用于通信的各种数据结构的例子。一般来说,高层引擎着色遍历(如循环)902通过子步骤的多次迭代来遍历场景高速缓存树900并创建数据结构904(包括图11中的视觉图像更新块1114)。这包括创建用于该场景高速缓存的资源,以及创建用于在显示树中使用的说明性的动画。为要变化的值产生动画绘制器对象,从而在媒体集成层中使用动画绘制器而不是常数来绘制API。然后创建了所述高层引擎206的显示数据结构904,引用先前创建的资源和动画绘制器。所述显示数据还可引用其它子树。为了使之激活,把动画绘制器(如图11中的1114)连接到定时树/节点结构(如图11中的1102)。典型地是,应用程序将创建时间节点1102来控制开始、停止以及每个动画绘制器1104的进程。
一旦已创建了包括定时和动画的模型之后,所述高层引擎的遍历循环902将遍历所述显示树900来开始绘制。如上所述,所述高层引擎206遍历的频率取决于定时及动画的量和复杂程度。例如,对于静态场景,只有当应用程序作出变化时才需要对所述静态场景进行遍历。
在多个传递(pass)中发生所述高层遍历处理902。在预计算传递中,所述树900的第1次遍历进行绘制所需的计算。例如,对每个子树计算边界框,并且更新动画值。如上所述,动画绘制器1104可提供一间隔,而不是单个瞬时值。所述间隔包括起始和结束时间、要使用哪种类型的内插器以及用于内插的数据。然后把所述显示树使用的资源发送到所述低层引擎210用于实现。
第2次遍历包装要发送到低层引擎210用于着色的描述场景的信息。为此,如图13-15所示的数据结构和信息所表示的那样,以一个或多个指令块表示图中的每个子树。高层引擎206为每个顶层视觉图像(即窗口)将指令块(如图15的1500)累计到单个视觉图像更新块1114中。不添加自从上次遍历以来还未改变的指令块子树。只具有说明性动画变化的子树的指令块将仅包括内插信息的变量块。通过变化被改变位置的子树的指令块仅包括头部。
所述低层引擎210着色线程(或进程)在循环1208(图12)中运行,以高帧速率,理想地是显示器的刷新速率,来着色并组成视觉图像。所述循环1208进行若干步骤,包括应用从所述高层引擎206接收的任何视觉图像更新块(如11141-11143)。更新在该传递中绘制的资源和窗口的内插值。对于在所述指令块的变量列表中的每个变量,计算用于下一帧的瞬时值。然后,所述循环1208对于在它所使用的指令列表中的位置的偏移上进行迭代,在存储器中复制新的值。
虽然在初次使用时,可以绘制另外的资源,但是所绘制的是更新的屏幕外的资源。绘制每个顶层视觉图像的指令列表,并且把数据“blt-ed”到显示器、经剪辑或安排,以使在屏幕上更新每个顶层视觉图像。远程传输
如上所述,所述高层引擎206产生传送到所述低层引擎210的有关的数据集,包括动画间隔/变量资源12041-12043(图12),例如图像和文字符号,它们描述在短时间周期内变量如何连同所使用的信息一起用于着色变化,以及包括描述绘制顶层视觉图像(窗口)所要求的定位着色操作的指令列表。指令列表可包含对变量而不是对静态值的引用。
首先,所述高层引擎206创建资源,需要在使用前创建该资源,并由指令列表中不透明句柄引用。所述高层引擎206通过首先创建设备独立的资源表示来创建资源。在图像的情况下,所述表示是全帧位图或以诸如JPEG编码的编码图像。对于通信,所述高层引擎206随后将资源数据提交给把唯一句柄分配给所述数据的通信承接程序(stub)。所述句柄在所述高层引擎206进程中产生,并且仅在该进程中是唯一的。
如图16中所表示的那样,所述通信承接程序将所述资源数据包装成具有规定操作和句柄类型的头部的数据结构1600。所述承接程序立即将所述句柄返回到所述高层引擎206,用于在着色中使用。
指令列表、变量、时间值以及动画间隔一起作用。所述指令列表描述所述着色并可包括对变量而不是对静态值的引用。动画间隔描述怎样在短时间周期上改变变量的值。
所述高层引擎206收集指令列表和动画间隔,作为其着色传递的一部分。所述高层引擎206将所述着色信息包装成每个顶层视觉图像(窗口)一个或多个指令块。每个块代表特定窗口的图的子树。每个块包含影响所述指令列表的变量列表。所述高层引擎206所保持的指令列表包括对所使用的变量的引用。对每个变量收集这些变量引用并将它们转换成指令列表中的位置(偏移),必需在着色前以变量的瞬时值替换所述位置。如图16-22所表示的那样,对该块把这些偏移与动画间隔信息包装在一起。
图15示出了视觉图像更新数据结构。一般来说,如上所述把对于描述窗口的指令块的集合汇集成视觉图像更新块。然后以与上述资源类似的方式,将所述更新块包装成数据包。更新块可能是巨大的并且,如果对于传输更有效的话就在多个数据包中发送。
所述低层引擎210具有普通优先权的线程,它在所述传输流和进程数据包到达时收听它们。最好是在与着色线程分开的线程上进行所述操作,以确保每一次刷新所述低层引擎210都能着色。通信线程根据操作码(opcode)、高层引擎标识符(ID)、对象句柄来分析每个数据包。参考图23描述了对这些资源和视觉图像更新情况的处理。
尤其,当所述低层引擎210认识到所接收到的数据包是用于资源1204时(步骤2300),就处理所述资源数据包。然后,在步骤2302处,所述低层引擎210提取所述高层引擎206 ID和资源句柄,并在步骤2304处创建所需类型的资源。所述低层引擎210在步骤2306处填充所述资源的设备独立形式,并将所述资源置于所指定的高层引擎206的句柄表中(步骤2308)。
与所述资源数据包类似地处理视觉图象更新块的单个数据包,但要求更多的处理。在步骤2300处当所述低层引擎210认识到所述数据包是视觉图象更新块1114时,所述处理转移到步骤2312。在步骤2312处,所述低层引擎210从所述数据包中提取高层引擎ID和视觉句柄。然后,在步骤2314处所述低层引擎210在所指定的高层引擎206的句柄表中查找视觉图象。如果没有发现视觉图象,就在步骤2316处创建新的视觉对象,并将其添加到所述句柄表。然后如图24中所表示的那样,通过步骤2400和2416,所述低层引擎210通过所述数据包中的每个指令块进行循环处理。
为此,在步骤2400处,所述低层引擎210选择指令块,并在步骤2402处查找当前视觉图象中的块ID。如果块标识符不存在,就创建新的块,并且用来自所述数据包的数据初始化该块。如果相反,所述块标识符存在,那么所述低层引擎210更新所述变换和偏移(步骤2406)。如果所述块包含变量列表,那么通过步骤2408和2410替换现存的变量列表。如果所述块包含指令列表,则通过步骤2412和2414替换现存的指令列表。
用与所述单个数据包的情况相同的方式处理多个数据包的情况。唯一的区别就是所述低层引擎210首先从多个数据包中收集所述视觉图象更新块。
如所能显然理解到的那样,由于发送图形指令而不是个别的图形位,就显著地降低了在所述高层引擎和低层引擎之间通信所需要的数据量。结果,可以经过网络连接将来自高层处理系统的图形指令传送到远程终端,所述远程终端的每一个具有低层处理系统。即使所述连接的带宽不能载送常规图形数据,所产生的图形输出也能在若干终端上看上去基本上相同。结论
正如可从上述详细说明中所看出的那样,给出了多层图形处理系统和方法,它简化了相对较低频率的复杂处理,使能够在相对较高频率输出复杂图形。所述系统和方法通过利用多个处理层使改进的图形输出能够平衡较大量的图形子系统功率,所述改进的图形输出包括平滑动画、图形合成以及与视频和音频的组合。而且,所述多层简化了向导致复杂图形输出的终端的图形指令和数据的远程通信。
虽然本发明易于进行各种修正和备择构造,但是在附图中示出了某些所说明的实施例并且已在上面详细描述。然而,应该理解到不打算将本发明限制到所揭示的具体形式,正相反,本发明要涵盖所有属于本发明的要旨和范围内的修正、备择构造以及等价实现。