窗口管理中的深度缓存器剪取的制作方法

文档序号:2533657阅读:135来源:国知局
专利名称:窗口管理中的深度缓存器剪取的制作方法
技术领域
本发明涉及的是计算机显示的开窗口问题,特别是给出了硬件为基础的剪取系统用于协助以软件为基础的窗口管理。
在有关由数据处理器控制的交互显示终端的技术上,最近的发展已经能够使操作者在一个显示终端屏幕上同时显示几个文件或几个记录的内容。这些内容通常是以一组常常是互相重迭的窗口来显示的,其中每个窗口各显示一个具体的计算机文件的内容。美国专利4586035和4714918说明了在计算机系统里使用这样的重迭窗口的方法。
在象X窗口这样典型的开窗口系统中(如“X-WindowUserGuidandReference”fortheIBMRT-PC,1987中所述),一单个的实际屏幕以“空间多路传输”的形式来显示几个窗口。在比较新的这种计算机系统中,几个应用程序可以在计算机中同时运行。正在计算机中运行的每个应用程序在显示屏幕上一般都“占有”一个或几个窗口。通常,这些应用程序都是彼此独立的,因此,一个屏幕上的内容与其它屏幕上的内容是无关的。这些窗口可以具有不同的尺寸,也可以部分或全部重迭。
这些窗口通常由一个以软件为基础的显示管理系统来控制,这个显示管理系统把这些窗口看成一个堆栈,因此这些窗口相对于深度有一个总的顺序。例如,在一给定的时刻,一个窗口在顶部,一个在底部,而其它窗口在这两个窗口之间顺序排在某一位置上。因为一个窗口通常都不占据显示屏幕的整个显示面积,并且可以部分地或全部被其它窗口遮住,所以在有开窗口能力的多任务计算机系统中运行的应用程序,不允许为了产生与这些应用程序有关的显示而被直接写入到显示适配器中去。
通常,在这种计算机系统中的应用程序必须请求窗口管理器将数据传送到属于它的屏幕上去。通过“剪取”输出请求并摈弃来自应用程序但应位于一个程序在屏幕上形成的窗口或部分窗口之外的那部分图表或文字的输出,以软件为基础的窗口管理器保证一个应用程序的输出只会被写到那个程序所占有的窗口上。这种剪取通常是一个软件为基础的实用程序完成的,并且它可能是非常费时的。
最近,在交互计算机图表领域中已经有了长足的发展,大大加速了为了生成代表当今技术发展水平的复杂的计算机生成图形所需要的数据处理过程。例如,J.D.Foley和A.VanDan在FundamentalsofInterractiveComputerGraphics,AddisonWesley,1982中说明了这种技术。在三维交互计算机图表领域中普遍使用的技术之一是“Z缓存器”。尤其是,Z缓存器是一个简单的硬件器件,用来在光栅扫描显示器上显示计算机产生的图形时消去隐线和隐面。
过去,交互计算机图表系统一般使用专用计算机来产生通常由多个多边形组成的三维物体模型。每个多边形在三维空间中有它自己的位置和方向,以及它自己的颜色和强度信息。
由计算机系统显示三维物体需要计算出每一个象素的颜色/强度值。对于正在屏幕上显示的物体的一给定方向,显示屏幕上的一个象素可能来自该物体的一个以上的多边形。在这样的系统中显示的象素值来自从观察者到所讨论的这个象素的视线上最前面的那个多边形。
当在这种计算机图表系统中显示一个三维物体的图形时,将按某种顺序来处理组成这个物体的多边形。这个顺序可以是这些多边形被遇到时的自然顺序,这取决于定义这个物体的数据结构的构成方法,或者,它可以按某种使输出过程更容易的方法贮存起来。例如,多边形可以按深度(Z值)贮存起来,以便离观察者较远的那些多边形被首先遇到。这种分选通常是在计算机图表系统中完成的,这样就可通过按分选的顺序处理各多边形、并对于每个多边形在被那个多边形覆盖的象素中插入适当值的方法在屏幕上显示任何特定的场景。一个象素可以被写入若干次,这取决于在任一给定的三维物体中有多少个多边形与在屏幕上由这个象素所定义的点重迭。由于多边形是按深度分选的,写到任一象素上的最后一个值将是那个象素上最近的多边形的值。换句话说,离观察者最近的那些多边形将遮住后面较远的多边形。
已经发现,按深度分选多边形通常并不是所希望的,因为它需要很长的处理时间,还因为这种分选并不能防止错误操作。例如,在三维空间中措综复杂地彼此交叉或彼此重迭的多边形未必就能根据一个Z值来进行分选;因此,如果分选是要完全精确的,实际上就需要对每个象素都进行分选。如果这个物体被旋转,或相对于背景运动,或相对于屏幕中的其它物体运动,或者,如果观察者的视线变化了,那末就必须重新做这种分选。
已经发现,在这种三维计算机图表应用程序中,使用Z缓存器通过与颜色/强度值一起记住每个象素的深度信息(Z值),就可以避免任何一种分选工作。参见Foley和VanDan文章的第560~561页。因此,使用Z缓存器允许多边形组成一个以任意顺序处理的场景,这是因为深度信息是按各象素而不是按多边形进行跟踪。因此,重迭很大的多边形和交叉的多边形将不会对计算机图象有不利的影响。
本发明通过在通用的显示适配器中附加一个硬件为基础的窗口深度缓存器就可在具有共用显示平面的计算机系统中克服更新窗口时与耗时的软件剪取有关的那些缺点。本发明在保证属于其它正在该计算机系统中运行的应用程序的窗口上的题目完整性的同时,通过允许具体的应用程序直接与计算机系统的显示适配器进行通讯,还可以减小更新或重排窗口所需要的时间。
本发明提供了一种新的经过改善的在计算机系统中更新和重排窗口的方法和系统,该计算机具有一个刷新缓存器和一个具有屏幕显示的交互显示终端,在屏幕上形成一组至少是部分重迭的窗口,其中每个窗口正在显示的内容与屏幕其余部分上显示的内容是不同的。这种改善包括一个用于请求重排(从当前的排列变成新的排列)这组重迭窗口相对于基准位置的深度位置的输入器件,一个用来读出这组重迭窗口中各窗口的当前深度位置和给出当前与这组重迭窗口中每个窗口相关的内容分配深度值的窗口管理器。为了响应输入请求,这个窗口管理器还要定出这个新的窗口排列的新的深度位置,将新的深度值分配给与那个输入请求作用到的各窗口相关的内容,以及通知任何受到作用的应用程序重新传送将受到输入请求作用的正在屏幕上显示的那部分内容。最好,与每个窗口相关的内容被定义成一个具有特定象素地址的象素值阵列。
计算机系统包括一个深度缓存器,用来接收和贮存与每个正在屏幕上显示的重迭窗口相关的各内容的深度值。为了响应重新传送来自受到作用的应用程序的内容及相关的深度值用以响应输入请求,深度缓存器中的比较器将新传来的深度值与当前正在屏幕上显示的内容的深度值加以比较。如果这个新内容具有一个与这同一窗口或更靠近观察者的窗口相关的深度值,则该缓存器通知刷新缓存器贮存这个新内容以便刷新屏幕,并通知深度缓存器贮存这个新深度值。
本发明的实现可以有几个可供选择的硬件结构。在一种结构中,与这一窗口内的内容相关的深度值是将窗口深度位置与窗口内内容的深度值串联起来组成的。然后深度缓存器将这个新的串联起来的值与当前的串联值加以比较,确定出刷新缓存器和深度缓存器是否应该将新的内容和深度值分别贮存起来。
在另一个具体实现中,深度缓存器包括一个窗口深度表,它贮存与各窗口识别标志有关的当前深度位置。在这个具体实现中,根据输入请求,窗口管理器输出这个窗口深度表中列出的各窗口识别标志的新的象素深度值。然后比较器从窗口深度表中读出正在深度缓存器中的各象素密度的窗口识别标志的深度值和新的窗口识别标志的深度值,并将由窗口深度表得到的各深度值加以比较。
在本发明的另一个具体实现中,深度缓存器包括两个比较器,其中第一比较器将新的窗口识别标志与当前窗口识别标志加以比较,第二比较器将与各当前窗口识别标志相关的象素深度值与新的窗口识别标志相关的新象素深度值加以比较。如果第一比较器确定出当前窗口和新窗口识别标志是相等的,并且第二比较器确定出新象素值小于等于当前象素值,则一个与第一、第二比较器输出端相连的逻辑单元就通知刷新缓存器将新象素值贮存起来,并通知深度缓存器贮存起新的窗口识别标志。
在另一个具体实现中,深度缓存器包括两个缓存器阵列,其中第一缓存器阵列贮存正在各重迭窗口上显示的内容的当前窗口识别标志,第二缓存器阵列贮存正在各窗口上显示的内容的当前象素深度值。该深度缓存器还包括一个第一比较器,它与第一缓存器阵列相连,用于将新的窗口识别标志与当前窗口识别标志加以比较,如果当前的和新的窗口识别标志相同,则第一比较器输出一个允许信号。第二比较器与第二缓存器阵列相连,根据收到的来自第一比较器的允许信号,将当前象素深度值与新的象素深度值加以比较,如果新的象素深度值小于等于当前象素深度值,则第二比较器输出一个信号到第一和第二缓存器阵列,通知第一缓存器阵列贮存新的窗口识别标志,第二缓存器阵列贮存新的深度值。
在本发明可应用于一组重迭的各窗口中的二维图象的具体实现中,与屏幕上一窗口内的内容相关的深度值只包括一个窗口识别标志,其中深度缓存器只贮存当前窗口的识别标志。为了响应一个输入请求,窗口管理器向深度缓存器输出一个新的窗口识别标志,深度缓存器中的比较器将新传来的内容的窗口识别标志与当前显示的内容的窗口识别标志加以比较。如果新的窗口识别标志识别出这个窗口是同一个窗口或更接近观察者的窗口,则比较器向刷新缓存器和深度缓存器输出信号,指示刷新缓存器贮存这个新的内容,以使用这个新内容刷新屏幕显示,并指示深度缓存器将新的窗口识别标志贮存起来。


图1是一个表示适用于本发明实践的通用计算机系统的总的概图。
图2是一个表示适用于本发明实践的计算机系统中的交互显示部分的概图。
图3说明了与使用本发明在一交互显示监视器上形成一组至少是部分重迭的窗口有关的逻辑单元的组合。
图4A说明了一组在屏幕显示上至少部分重迭的窗口的初始位置。
图4B说明了图4A中的这组至少部分重迭的窗口当顶窗口被移到底部时的重新排序的情况。
图5是一个表示可以用在本发明实践的显示适配器概图。
图6是一个表示可以用在本发明的一个具体实现中的Z缓存器的概图。
图7A说明了在屏幕上至少部分重迭的窗口的堆栈的相对位置,以及代表正在屏幕上显示的内容的深度的象素值的格式化栅网;
图7B说明了图7A中窗口重新排序的屏幕显示,以及代表正在屏幕上显示的内容深度的变化的象素值的格式化栅网,这些变化在本发明的第一个具体实现中是由窗口管理器产生的。
图8是表示可用于实践本发明的Z缓存器系统的第二个具体实现的概图。
图9A说明了一组在显示监示器屏幕上至少部分重迭的窗口的相对位置,以及代表正在显示的内容的识别标志的象素的栅网;
图9B说明了图9A中的重新排序了的窗口的屏幕显示,以及代表了正在屏幕上显示的内容的窗口识别标志的象素的格式化栅网,该窗口识别标志在本发明的第二个具体实现中是由窗口管理器来改变的。
图10是表示可用于实践本发明的Z缓存器系统的第三个具体实现的概图。
图11A说明了一组在显示监视器的显示屏幕上至少部分重迭的窗口,以及代表了正在屏幕上显示的内容的窗口识别标志的象素的格式化栅网;
图11B说明了被重新排序了的图11A中窗口的屏幕显示,以及代表了正在屏幕显示的内容的窗口识别标志的变化的象素的格式化栅网,这些变化在本发明第三个具体实现中是由窗口管理器来改变的。
图12是表示适用于实践本发明的Z缓存器系统的第四个具体实现的概图。
为了更详细地理解本发明,参照图1说明适于完成本发明技术的先前技术计算机系统的主要部件。通用计算机系统中的CPU2由贮存全部应用程序的系统存储器4支持。在近期的先前技术计算机系统中,CPU2可以同时运行两个以上的应用程序。与存储器4一起,CPU2控制显示单元6。计算机系统通常都具有辅助磁盘存储器8。向系统的输入可通过键盘10完成,键盘可用来输入指定的命令,也可以用来将显示单元6的显示屏幕上的光标运动到菜单区内的一个命令上。此外,也可以从另一个输入单元12(如鼠标器)接收输入命令。这个计算机系统中的各部分通过系统总线14互连。
一个可以用来实现本发明装置及方法的计算机系统包括一个具有由2MB以上内存和2.2以后版本又AIX操作系统支持的基于简化指令组结构(RISA)的CPU的IBM RT。对于某些具体实现,可以使用IBM PS/2,它具有一个由OS/2③操作系统和1MB以上内存支持的通用Intel 80286或80386微处理器。
图2和图3更详细地示出了这种计算机系统中的系统逻辑和装置。图2中,由通用的输入适配器12提供输入,适配器12通过输入驱动器14连到计算机系统,适配器12具有将输入操作与实现本发明的具体数据处理系统相对接所要求的通用装置和逻辑。驱动器14的作用是把从输入适配器收到的信号转变成本发明可以运行的数据。
本发明所要求的程序和逻辑操作通常是由应用程序监督器16监督,下面将分别加以说明。送到显示单元6的变化由显示管理器18控制,它通过显示适配器22与显示监视器20进行通讯。显示适配器22使来自显示管理器的命令适于转换成显示监视器20更易于使用的信号。
实现本发明的软件贮存在存储器4中,并在应用程序监督器16的指挥下运行,通常,这个指挥也贮存在处于CPU2控制下的存储器4中。现参照图3对这个软件详加说明。
在近期的计算机系统中,标有应用程序“A”18至应用程序“n”20的各应用程序可以并行运行。这些不同的应用程序的各个输出可以在交互屏幕显示监示器上标有28、30、32和34的不同窗口“A、B、C、D、…、n”上分别显示出来(见图4)。计算机系统的用户通过输入适配器12和与各应用程序A和“n”的应用程序用户接口22和24相对应的输入驱动器14,与各应用程序对话。这些接口通常还包含一个通用的回声管理器,它通过总线20把使某一窗口立即产生显示变化的输入命令直接传输到显示管理器18。应用程序监督器单元16对这些不同的独立的窗口操作进行协调和多路传输,并通过应用程序接口26对显示管理器18实行控制。显示管理器18通常包括一个窗口管理器,它按照经总线20从输入驱动器14得到的输入来控制各重迭窗口之间的相互位置。
在这种具有由显示监视器20和显示适配器22组成的交互显示器6的计算机系统中,这组在监视器屏幕上形成的重迭窗口A、B、C和D(如图4所示),其中每个窗口显示的是源于不同应用程序如A、B、C和D的内容,同时在CPU2中运行。实际上,每个应用程序在屏幕上都“占有”一个窗口。通常,这些应用程序都是彼此独立的,所以每个窗口的内容均与其它各应用程序所占有的窗口的内容无关。如图4所示,这些窗口可以具有不同的尺寸,并可以重迭。
为了改变这些窗口的相互位置,用户通过输入单元12输入一个请求。例如,如果用户想要把顶部的窗口A推到底部,则窗口B就变成了新的顶部窗口。现在就可看到窗口B的全部,也可以看到窗口C原来被窗口A遮住的部分。当一个窗口全部或部分变成可见(即“露出”)时,窗口管理器就通知占有该窗口的应用程序必须重新生成部分或全部被移到其窗口上的内容。重写新露出的窗口的这一部分是每个应用程序的责任。另一方案是,各应用程序可以干脆重写它的整个窗口。
在本例中(图4),窗口B30的应用程序至少必须重写其窗口B的左上部分,窗口C的应用程序必须在其窗口左上部的一小部分上做同样的工作。因为每个窗口并没有占据整个显示屏幕,所以可能是部分地或全部地被其它窗口遮住。
不允许为了生成与各应用程序有关的显示而将各应用程序直接写入显示适配器22中,而是各应用程序A、B、C和D必须请求窗口管理器将数据传输到显示适配器22中,以便为那个特定的应用程序刷新这一部分显示屏幕。因此,以软件为基础的窗口管理通过“剪取”被其它窗口部分或全部遮住的那个特定的应用程序的输出,保证一给定应用程序的输出仅被写入该应用程序所占据的窗口。过去,这种剪取是由软件完成的,那是相当费时的。
各应用程序A、B、C和D输出的内容经总线14传送到显示适配器中的专用处理器36,它控制显示适配器22的操作。专用处理器22与贮存它所要运行的数据的专用存储器38相连。该处理器把来自CPU2的内容转换到具有特定象素地址的二维象素值阵列中,这些地址与显示屏幕上的特定点相关,其中,所传送的各应用程序的内容被其它应用程序部分的或重迭的窗口遮住的那些部分已经被剪取过了。然后,专用处理器将这些剪取过的数据以转变过的形式经总线40传输到帧缓存器或刷新缓存器42中。帧缓存器或刷新缓存器42一般是一个RAM阵列,它将象素值以数字形式存储在有关位置上,它们将以这些位置显示在显示监视器20的实际屏幕上。这些象素值然后由显示控制器44转换成用来将显示的内容投射到显示监视器20上的信号。一般,这个显示必须每1/30秒或1/60秒被重新传来的帧缓存器42中的象素值刷新。
在本发明的计算机系统中,给显示适配器22加上了一个新型的Z缓存器子系统,这样就显著地减小了在将计算机应用程序传给显示适配器22时窗口管理器所需进行的软件剪取工作量。实际上,以软件为基础的窗口管理器将各窗口都做为一个三维空间中的多边形来处理。对于本发明所要求的特定的生成窗口的目的,各多边形都是与背景平面平行的,并与使用者的视线垂直的;因此,各多边形均使用了一个信号深度值。因此,不会有两个多边形或“窗口”具有相同的深度,所以当计算象素值时,决不会产生“哪个多边形是在前面”这样的模糊问题。但应注意,这个发明也适用于这样的开窗口系统在这个系统中,正在各窗口上显示的内容是由位于三维空间中的内容组成的。
下面将比较详细地给出协助窗口管理器工作的五种不同的Z缓存器系统46的具体实现。在每个具体实现中,显示管理器18的窗口管理器确定窗口A、B、C和D的新顺序(从顶到底),对将要贮存在显示适配器22中Z缓存器系统中的窗口深度项目进行一些调整,然后通知正在CPU2中运行的受到作用的应用程序必须全部或部分地重画它的窗口。然后,在CPU2中运行的各应用程序通过显示适配器22传送这些内容,以便重画与该应用程序有关的窗口Z缓存器系统46提供那种在先前技术计算机系统中窗口管理器所提供的剪取。
在每个具体实现中,Z缓存器系统46实行一种“Z缓存器代数运算”。在Z缓存器系统46中所实行的代数运算可以如下述(A)将全部象素值/强度值C(x,y)初始化为“背景值”。
(B)将全部Z缓存器值Z(x,y)初始化为最大可能呈现(最远)的Z值。
(C)对显示屏幕上的每个多边形(窗口)和对多边形中的每个象素P(x,y)*计算Cp,象素的颜色/强度值;
*计算Zp,象素的Z值;
*如果Zp小于等于Z(x,y),则
·贮存新的颜色/强度值C(x,y)←Cp·贮存新的Z值Z(x,y)←Zp。
在第一个具体实现中(图6),Z缓存器系统46由比较器50和Z缓存器阵列51组成,阵列51含有屏幕上内容的当前Z缓存器深度值。各Z缓存器值与象素颜色/强度值有特定的关系,而象素颜色/强度值根据它在帧缓存器42构成的二维阵列中的相对位置具有特定的象素地址。现存的被贮存起来的深度值包括在屏幕上形成的相对于“背景”基准位置(它通常是离视者最远的位置)的窗口的深度和象素所在窗口内的具体的象素的深度。
为了贮存在Z缓存器阵列51中,窗口深度与窗口内的象素深度连接在一起而构成深度值。例如,在寄存器48中为了贮存一个现存的来自Z缓存器阵列51的象素值以便在比较器50中使用,窗口深度占据高位52,而窗口内的象素贮存在低位53,这样,在一给定的窗口内的全部象素就被认为是处在与堆栈内较低的窗口有关的全部象素的前面。但应注意,对于大多数应用程序而言,窗口内独立的象素深度是一个常数。
为了对来自输入器件12的重新在显示屏幕上排列窗口的请求做出响应,窗口管理器将确定这组窗口A、B、C和D的新的相对的深度位置,给帧缓存器42内的每个象素分配缓存器深度值,以及通知其显示受到作用的各个应用程序或者重新传送与其显示相关的全部内容,或者至少重新传送其中受到所提出的屏幕重新排列所作用到的那一部分内容。
然后窗口管理器将重新生成的内容传送到显示适配器22,以便转换成能够贮存在缓存寄存器56中的象素值,同时,把它的相应的象素地址传送到寄存器58,把它的相应的Z缓存器深度值传送到寄存器54。对于每个象素地址,通用的比较器60将来自窗口寄存器54的新的Z缓存器深度值与从Z缓存器阵列中所在的位置传到寄存器48的现存的Z缓存器深度值进行比较。
如果新的Z缓存器深度值大于现存的Z缓存器深度值,则比较器60指示帧缓存器42不理睬来自窗口管理器的“写入”命令。当新的Z缓存器深度值小于等于现存的Z缓存器深度值,则比较器60输出一个信号到帧缓存器42,通知它将这个新的象素值贮存在给定的象素地址上,并输出一个信号到Z缓存器阵列,通知它贮存这个新的Z缓存器深度值。这个过程一直持续到与帧缓存器42中各个受到作用的象素地址相关的每个现存的Z缓存器深度值都与那个地址上的新的Z缓存器深度值都进行了比较为止。
因此,第一个具体实现的Z缓存器系统46达到了使Z缓存器系统46为窗口管理器进行“剪取”的目标。只要来自窗口管理器的“写入”请求含有适于与具体的应用程序相关的窗口的Z缓存器深度值,Z缓存器系统46就保证只有那些对于窗口是实际可见的象素被更新。然而在这个具体实现中,窗口管理器改变窗口相对的堆栈次秩有些耗费时间。图7A示出了在本发明的显示监视器20的屏幕上堆栈的窗口A、B、C和D的相对位置,以及格式化的代表正显示在屏幕上的内容的各象素的9×8栅网,其中与各象素位置相关的数字与具体象素所在的相关窗口的深度相对应,如0、1、2、3和4。图7B示出了同样窗口的屏幕显示,只是窗口B已被推到了底部,这要求在为了新的窗口排列而取消这些窗口之前必须更新与全部这些象素有关的深度值和全部的窗口。代表新的窗口位置的相应的格式化象素9×8栅网示于图7B中的屏幕下方。在将窗口A移到窗口堆栈底部时所必须更新的象素在图7B的格式化栅网中黑体字标出。
在第二个具体实现中(图8),Z缓存器阵列66也含有在屏幕上的内容的当前Z缓存器深度值,但是现存的被贮存的深度值是用一个与第一个具体实现不同的方式规定的。在第二个具体实现中,现存的被贮存的深度值包括一个识别具体窗口A、B、C和D的窗口识别整数和一个在屏幕上形成的窗口内的象素深度值。然后用窗口识别整数作为窗口深度表68的索引来得到窗口的深度,窗口深度表包含每个窗口相对于基准位置的深度。更可取的是,窗口深度表是一个通用的RAM阵列。
现在详细讨论第二个具体实现。为了响应来自输入器件12的重排屏幕显示上的窗口的请求,窗口管理器确定这组窗口A、B、C和D的新的相对深度位置,给每个窗口分配新的窗口深度值,以及将新的窗口深度值传给窗口深度表68。窗口管理器还通知其显示受到影响的各应用程序重新传送或是与其显示相关的全部内容,或者至少是受到所提出的屏幕重排影响的那部分内容。
所传送的内容按规定路线被传送到显示适配器22,以便由处理器36转变成象素值阵列,在处理器36中,用与第一个具体实现相同的方式,每个象素可以依次存入寄存器56中,并且其相应的象素地址依次存入寄存器58中。然而该窗口管理器传送到寄存器70的深度值是与第一个具体实现中传送到寄存器54的深度值不同的,在这里,是一个窗口识别整数(而不是真实的深度值)被存入寄存器70的高位72;与具体窗口相关的象素深度被存入低位74。
以相应的方式,寄存器76从具体象素位置的Z缓存器阵列66接收现存的深度值,其中这个深度值包括寄存器76高位中的窗口识别整数和寄存器76低位中窗口内的象素深度。
在第二个具体实现中,在Z缓存器值被分别存入寄存器78、80之前,包含在寄存器74和76中的Z缓存器深度值先要经过修改,用适当的深度值代替来自窗口深度表68的各窗口识别标志,然后,通用比较器82将寄存器78中的新的Z缓存器深度值与寄存器80中的现存的Z缓存器深度值加以比较。如果寄存器78中的新值大于寄存器80中的现存值,则比较器82指示帧缓存器42不理睬来自窗口管理器的写入命令,并且不更新这一象素地址的象素值。如果寄存器78中的新值小于等于寄存器80中的现存值,则比较器82通知帧缓存器42接收这一象素地址上的新象素值,并通知Z缓存器66更新这一象素地址上的Z缓存器值。
应该注意,不一定非要改变Z缓存器66中全部象素位置上的全部深度值。例如,对于一个8位的窗口识别标志,最多只要改变256个窗口深度表项目。然而,如果这些窗口在一个1024×1024象素显示器上复盖了大部分屏幕显示面积,那在第一个具体实现中就必须改变约1百万个Z缓存器项目。然而为了获得这方面的益处,所以要求有这个附加的窗口缓存器表68。
为了使表68在更新帧缓存器和Z缓存器时不产生延迟,表68必须非常迅速地读出寄存器70和76中的窗口识别整数,并非常迅速地将相应的真实的深度值传给寄存器78和80。事实上,这个处理过程必须以与画象素相同的速度进行。如果在图表流程图中的另一阶段上实现表68,则将稍许增大一些显示一个操作步骤中的第一个象素所需要的等待时间,但並不降低画象素的速度。
图9A和图9B示出了当窗口A从顶部推到底部时,象素深度值的窗口识别部分是怎样变化的。应该注意,虽然某些值已经改变了,但它们并没有用黑体字标出,因为它们并没有被窗口管理器改变,这与第一个具体实现中的情况相同。在这个例子中,窗口管理器只改变了窗口深度表中的几个项目(在这里是4)。然后,在应用程序B和C按照窗口深度表68中的新深度值重画窗口时,Z缓存器中的窗口识别整数被自动地改变。
在第三个具体实现中,Z缓存器阵列88也包含一个由窗口识别整数和各象素的窗口内象表深度组成的深度值。但代替窗口深度表的,第三个具体实现是采用了直接将送到寄存器90的新窗口识别整数与从Z缓存器阵列88传送到寄存器92的现存窗口深度值直接加以比较的方法。寄存器90和92的窗口识别整数以与其它具体实现相同的方式贮存在高位上,象素深度值贮存在低位上。下面更详细地讨论第三个具体实现。来自寄存器92的现存窗口识别整数和来自寄存器90的窗口识别整数被通用比较器94读出。如果比较器94确定出两个窗口识别标志是相等的,则输出一个允许信号到AND门96。此外,寄存器92中的象素深度值与来自通用比较器98中寄存器90的新象素深度值进行比较。如果新象素深度值小于等于旧的象素深度值,则比较器98输出一个允许信号到AND门96。如果AND门96没有收到来自比较器94和比较器98的允许信号,则AND门指示帧缓存器42和Z缓存器88不理睬来自窗口管理器的写入命令。如果AND门96收到了来自比较器94和比较器98的允许信号,则通知Z缓存器贮存新Z缓存器值100,并通知帧缓存器42贮存这个象素位置的新象素值102。
第三个具体实现的Z缓存器提供了一个超过第二个具体实现中Z缓存器的优点,即不需要一个单独的高速窗口深度表。应该注意,比较器94和比较器98所进行的比较过程可以并行进行。这种方法的缺点是,在重排窗口时,窗口管理器必须通过在Z缓存器88中贮存新的窗口识别整数明确地改变各象素的所有权。
图11A和11B示出了当窗口A从堆栈的顶部推到底部时,Z缓存器值是怎样变化的。由窗口管理器修改过的Z缓存器值用黑体字标出。然而应注意到,必须用Z缓存器系统修改过的Z值要比第一个具体实现少得多,在第一个具体实现中,全部象素和全部窗口都要求更新而不管窗口实际上受到影响与否。在第三个具体实现中,仅仅受到影响的窗口的重迭区域中的象素被更新。
在第四个具体实现中,窗口管理以与第三个具体实现相同的方式把信息传输到显示适配器,但在显示适配器22中组织信息的方法是不同的。下面较详细地讨论第四个具体实现。显示适配器22包含贮存窗口内象素值深度信息的Z缓存器阵列104和一个单独的贮存与各象素位置相关的窗口识别整数的W缓存器阵列106。在这个具体实现中,窗口管理器输出新窗口识别标志到显示适配器中的寄存器108。窗口内相关的象素深度值被窗口管理器装入寄存器10。对于这个序列中的任一象素位置,来自W缓存器106的现存窗口识别整数被贮存在寄存器112中,来自Z缓存器104的相应的象素深度值被贮存在寄存器114中。然后,通用比较器116将来自寄存器108的新窗口识别整数与来自寄存器112的现存窗口识别整数加以比较。如果两个窗口识别标志不相等,比较器116输出一个信号到Z缓存器和帧缓存器,指示它们不理睬来自窗口管理器的写入命令。然而,如果来自寄存器108和寄存器112的窗口识别整数是相等的,则比较器116产生一个允许信号传送到通用比较器118。比较器118也将贮存在寄存器114中的现存象素深度值与贮存在寄存器110中的新象素深度值加以比较。如果新象素深度值大于现存的象素深度值,则比较118输出一个命令到Z缓存器和帧缓冲器,不理睬来自窗口管理器的写入命令。如果新象素深度值小于等于旧的象素深度值,并且比较器118已经收到了来自比较器116的允许信号,则比较器118输出一个允许信号,命令Z缓存器贮存新象素深度值,并命令帧缓存器42贮存新象素值。
第四个具体实现优于第三个具体实现的地方在于,对于每组图表操作,只需一次即可将窗口显示标志传输到显示适配器22。此外,窗口管理器对显示适配器22上的新窗口识别标志寄存器108的写入访问可以被限制在监督器状态程序内,以便使寄存器不会被应用程序码搅乱。一旦适当的象素的所有权被窗口管理器设置好,并且适当的窗口识别标志已被装入寄存器108,则可以使应用程序直接访问显示适配器22,因为知道它不会搅乱它所占有的窗口以外的屏幕区,这就显著地节省了辅助操作。虽然图12有两个顺序比较过程,但应注意到这两个比较是不能并行进行的。还应注意到,经窗口管理器修改过的Z值被限制在如图11B中第三个具体实现所示的象素上。
第五个具体实现可适于在一组重迭的各窗口上显示两维的内容,与屏幕上一个窗口内的内容相关的深度值只包括一个窗口识别标志。因此深度缓存器阵列只贮存现存的窗口识别标志,而不贮存由窗口深度和窗口内象素深度组成的组合深度值。在这个具体实现中,可以使用在第一个具体实现中所叙述的窗口管理器和Z缓存器系统,只需按下述进行一些改进。Z缓存器阵列51和寄存器48只贮存作为Z缓存器深度值的窗口识别整数,而窗口管理器22只输出一个新窗口识别整数到寄存器54。在其它所有方面,在第一个具体实现中说明的比较器的工作过程,都与上述的方式基本相同。虽然第五个具体实现可能不适于在一个窗口内显示复杂的内容,但它对很多类型的窗口应用程序来说却是一个简单易行的办法。
由于按照优选的具体实现详细示出并说明了本发明,精于这门技术的人们即会明白,在不脱离本发明的精神和目标的前提下,可以在形式和细节上做出多种多样的其它变化。
权利要求
1.一个具有刷新缓存器和带屏幕显示的交互显示终端的计算机系统,在屏幕上形成一组至少是部分重迭的窗口,各窗口正在显示的内容与屏幕上其余部分所显示的内容不同,该计算机系统的特征是请求从当前排列到新的排列重排这组窗口相对于基准位置的深度的装置;确定与各窗口相关的内容深度的管理器,其中,为了响应输入请求,上述管理器确定这组窗口在新的排列中的各窗口内受到影响的内容的新的深度;以及贮存与当前正在屏幕上显示的各窗口相关的内容的深度值的缓存器,其中,为了响应输入请求,上述缓存器包含将新传输的内容的深度值与正在显示的内容的深度值进行比较的装置,并且,如果新内容具有与这同一个窗口或与一个更靠近观察者的窗口相关的深度值,则该比较器命令刷新缓存器贮存新传输的内容,以便刷新屏幕。
2.权利要求1中的计算机系统,其中上述比较器通知深度缓存器贮存在刷新缓存器中贮存的新传送的内容的深度值。
3.权利要求2中的计算机系统,其中如果这新内容具有与离观察者较远的一个窗口相关的深度值,则上述比较器禁止刷新缓存器贮存新传送的内容,并且,用刷新缓存器中的当前内容刷新屏幕。
4.权利要求2中的计算机系统,其中与各窗口相关的内容作为一个具有特定地址的象素值阵列贮存在刷新缓存器中;以及上述管理器给与正在屏幕上的各窗口相关的各象素阵列中的各象素值分配深度值,给与受到输入请求影响的各窗口相关的象素值部分分配新的深度值,并且传送这些深度值。
5.权利要求4中的计算机系统,其中的深度值包括的是一个窗口深度位置和各窗口内的内容的深度值的串联组合。
6.权利要求1中的计算机系统,其中与屏幕上形成的窗口相关的内容的深度值包括一个窗口识别标志和一个代表窗口内内容深度的象素深度值;上述缓存器贮存这组重迭窗口的当前窗口识别标志;上述比较器包含一个贮存与各窗口识别标志相关的当前深度位置的窗口深度表;为了响应来自上述输入装置的请求,上述管理器输出新窗口识别标志和象素深度值到上述比较器,并输出一个窗口深度表中所列的各窗口识别标志的新深度位置;以及比较器从上述窗口深度表中读出正在缓存器中的每个新窗口识别标志的深度值和新窗口识别标志的深度值,并将从上述窗口深度表获得的这些窗口各自的深度值加以比较。
7.权利要求6中的计算机系统,其中各深度值包括一个窗口识别标志和窗口内象素深度值的串联组合;以及上述比较器将正在上述缓存器中的串联组合值与新串联组合值加比较。
8.权利要求1中的计算机系统,其中窗口内内容的深度值包括一个窗口识别标志和一个代表窗口内内容深度的象素深度值;上述缓存器贮存这组重迭窗口的当前窗口识别标志和相关的象素深度值;为了响应来自上述输入装置的请求,上述管理器输出这组重迭窗口的新窗口识别标志和相关的象素深度值到上述比较器;上述比较器包括将新窗口识别标志与其中的当前窗口识别标志进行比较的第一比较器,如果当前窗口识别标志和新窗口识别标志是相等的,则第一比较器输出一个第一允许信号;第二比较器用来将与各当前窗口识别标志相关的当前象素深度值与其中新窗口识别标志相关的新象素深度值加以比较,如果新象素值小于等于当前象素深度值,则第二比较器输出一个第二允许信号;以及与上述第一、第二比较器的输出端相连的逻辑装置,用来输出一个刷新信号到上述刷新缓存器和上述缓存器,以响应收到的来自上述比较器的第一、第二允许信号。其中,为了响应这个刷新信号,刷新缓存器接收新象素值,缓存器接收新窗口识别标志。
9.权利要求1中的计算机系统,其中与各窗口内容相关的深度值包括一个窗口识别标志和一个代表窗口内内容深度的象素深度值;上述缓存器包括第一缓存器,用来贮存显示在各重迭窗口上的内容的当前窗口识别标志;和第二缓存器,用来贮存显示在各重迭窗口上的内容的当前象素深度值;为了响应上述输入装置的请求,上述管理器输出新窗口识别标志和象素深度值到上述比较器,并输出各窗口识别标志的新深度位置到窗口识别标志表;上述比较器包括与第一缓存器相连的第一比较器,用来将新窗口识别标志与其中的当前窗口识别标志相比较,如果当前的与新的窗口识别标志相同,则第一比较器输出一个允许信号到第二比较器;以及与上述第二缓存器相连的第二比较器,用来根据从上述第一比较器收到的允许信号将当前象素值与新象素值加以比较,其中,如果新象素值小于等于当前象素深度值,则上述第二比较器输出刷新信号到第一和第二缓存器,于是上述第一缓存器贮存新窗口识别标志,上述第二缓存器贮存新深度值。
10.权利要求1中的计算机系统,其中(a)与屏幕上窗口内内容相关的深度值包含一个窗口识别标志;(b)上述缓存器贮存在各重迭窗口上显示的内容的当前窗口识别标志;(c)为了响应输入装置的请求,上述管理器输出一个新的窗口识别标志。(d)上述比较器将新传送的内容的窗口识别标志与当前显示的内容的窗口识别标志加以比较,如果新窗口识别标志识别出是同一窗口或是更靠近观察者的窗口,则比较器输出允许信号到刷新缓存器和缓存器;以及(e)为了响应允许信号,刷新缓存器贮存新内容,以便用新内容刷新屏幕显示,并且,缓存器贮存新窗口识别标志。
11.一个能够运行一组具有一个带刷新缓存器的显示适配器和一个带屏幕显示的交互显示终端的应用程序的计算机系统,在这个屏幕显示上形成一组至少是部分重迭的窗口,每个窗口正在显示的内容均与该屏幕上其余部分上显示的内容是不同的,其特征是请求将这组窗口相对于基准位置的深度位置由当前的排列重新排列成新的排列的装置;管理器用来读出这组各窗口的深度位置,并给与各窗口相关的内容分配深度值,其中,为了响应输入请求,上述管理器确定这组窗口的新深度位置,给与各受到影响的窗口相关的内容分配新深度值,并输出这些深度值,以及缓存器用来贮存与屏幕上当前正在显示的各窗口相关的内容的深度值,其中上述缓存器包含为了响应输入请求而将新传送的内容的深度值与当前显示内容的深度值加以比较的方法,如果新内容具有与这同一窗口或更靠近观察者的窗口相关的深度值,则比较器指示刷新缓存器贮存新传送的内容,以便刷新屏幕。
12.权利要求11中的计算机系统,其中上述缓冲器是一个位于显示适配器中的RAM阵列;以及上述管理器指示各应用程序将与受到窗口重排影响的这些应用程序相关的内容直接传送到显示适配器。
全文摘要
在一个具有显示适配器、刷新缓存器和带屏幕显示(在屏幕显示上形成一组至少是部分重叠的窗口)的交互显示终端的计算机系统中,给显示适配器附加一个深度缓存器,以便为CPU中的以软件为基础的窗口管理器提供一个剪取辅助设备。为了控制每个窗口的当前深度位置而对窗口管理器编程。为了响应重排窗口的输入请求,窗口管理器给与各受到影响的窗口相关的内容分配一个新的深度值,并请求各应用程序至少重新传送受到影响的内容。
文档编号G09G5/14GK1044718SQ9010048
公开日1990年8月15日 申请日期1990年1月21日 优先权日1989年2月6日
发明者拉里·凯西·露克斯, 里查德·奥曼德·西普森 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1