使用捕捉的图形硬件指令的图形渲染方法和系统的制作方法

文档序号:6404986阅读:255来源:国知局
专利名称:使用捕捉的图形硬件指令的图形渲染方法和系统的制作方法
技术领域
本发明涉及计算机图形系统,并特别涉及提供将渲染操作从主机处理器卸载到基于寄存器的图形子系统以增加图形渲染速度和效率的方法和系统,图形子系统能够在需要时只需要正常主机处理器操作而进行图形渲染。
一般来说,计算机图形图象是通过将在存储于称为帧缓冲区的存储器位置的象素定义(色度和颜色)传输至显示屏而产生。当前,多数显示系统是基于光栅的,这意味着存储在帧缓冲区中的一个值确定给定象素的电子束的色度和颜色,电子束以适合的频率扫描显示屏的荧光涂层内表面。
将一组程序码形式的图象定义传输至能够物理显示在CRT上的一组象素值,并且接着将象素值扫描到CRT上的过程经常被称为“渲染”。在渲染中,处理器必须从应用程序中取得图形图元的说明并将它们转换成象素定义,其中图形图元是更复杂的图象的基础。
请求进行图形操作的应用程序一般调用基本渲染函数以渲染图元,例如,线,圆和多边形。这些基本渲染函数是用低级代码写成的,并位于图形库中。已知的一组基本图形函数是应用程序员接口(API),以使程序员根据这些基本函数以例如C和Fortan的高级语言写应用程序,而不需要写低级代码。一些标准化和商业提供的API包括OpenGL,PHIGS(程序员分级图形标准),和GKS(图形内核系统)。
为了使图形被渲染,应用程序中的高级API说明必须被解释并降低成硬件级代码。之后,该硬件级代码必须被执行以进行填充或修改帧缓冲区所需的实际物理输入/输出操作。
即使是简单的图象,这些任务也消耗很大部分的处理器时间和系统存储器。但是,图形应用程序越来越复杂,要求复杂,真实的图象以彩色,带有照明,阴影和其他的方式被渲染。如果一定图象要求被反复渲染,例如,在视频游戏的情况下,对处理器时间和系统存储器的高要求能够拖慢图形渲染,使用户懊恼。
这样,要求有一种渲染方法能够将重复的任务从主机处理器卸载,使其可以进行其他需要的任务。特别是,主机处理器周期和存储器得以保留,并提高了渲染速度,如果要求在图形应用程序中从高级API说明中产生硬件可执行指令的主机处理器操作对要求反复渲染的图象只进行一次操作,并且硬件可执行指令可以在需要时被执行以渲染该图象。在现有技术中还没有这种方法。
本发明提供一种从主机处理器卸载渲染任务至图形子系统的方法和系统,其中图形子系统在需要时进行渲染任务。在根据本发明的方法和系统中,由图形应用程序调用的基本渲染函数产生的图形硬件的图形指令在存储器中被捕捉。一旦硬件指令被捕捉,它们可以根据需要在图形子系统中执行,只需要正常主机处理器操作下渲染图象。
根据本发明的软件响应任何图形应用程序中的指令,图形应用程序定义被捕捉作为硬件指令的基本渲染函数序列。应用程序中的指令一般由希望使用本发明提供的优点的程序员编写的,并且可以包括一系列API中的基本渲染函数的高级调用以渲染一个特定的图象,这些函数由开始程序和结束程序标识符界定。
根据最佳实施例,当应用程序执行时,开始程序标识符激活本发明的软件。该软件执行指令以产生相应于在开始程序和结束程序标识符之间界定的基本渲染函数的高级调用的硬件指令。然后,当该软件遇到结束程序标识符时,它向一个主机系统寄存累积存储的硬件指令作为一个可执行程序。
结果,每当应用程序要求图象被渲染,它发出该寄存的可执行程序的调用,并且在图形子系统内执行存储的硬件指令而渲染图象,而只要求正常的主机处理器操作。这样,主机处理器周期被保留而可用于其他任务,并且降低了系统存储器的要求,因为由应用程序指定的相应于基本渲染函数的硬件指令只被生成一次。


图1示出现有技术的图形渲染系统的一般视图;图2示出实现本发明的系统的基本软件和硬件部件;图3示出根据本发明的捕捉例程的流程;图4示出应用本发明的一个应用程序的例子。
图1示出现有技术的图形渲染系统的概念总图。在图1示出的系统中,主机操作系统5有图形设备驱动软件7,它响应图形应用程序8中的高级图形渲染指令,发出低级指令至图形子系统6中的图形加速器30。在图形设备驱动器7的控制下,加速器30将象素定义写入帧缓冲区35,帧缓冲区35被扫描至显示设备40以物理显示渲染图象。
相反,图2示出根据本发明的图形渲染方法和系统的基本软件和硬件部件。元件包括图形子系统10,图形子系统10包括一个随机存储器20,一个定制图形处理器,即显示列表处理器(DLP)25,一个加速器30,一个帧缓冲器25,和一个显示设备40,例如CRT。DLP25能够取回存储于存储器20中的硬件指令,并发出指令以控制加速器30。加速器30包括多个高速寄存器,它们能够根据DLP25发出的指令使象素定义写入帧缓冲器35。之后,象素定义从帧缓冲器35扫描至显示设备40以产生图象。
现参考图2和图3,用于实现本发明的特征的计算机可执行指令在图形设备驱动器15中实现。设备驱动器15包括捕捉例程50和一个API组17,即,一组用于渲染图元的基本渲染函数。API中的每个函数包括一系列硬件级的计算机可执行指令,首要寄存器写入指令,以指定,例如,给定图元的尺寸和颜色和它在帧缓冲器中的位置。
API17中的函数可以由高级程序中的指令激活,通过由它的唯一助记符号标识符指定的一个函数,例如,“Draw_Line”,“Draw_Circle”或“Fill_Circle”,并为其传递适合的参数,例如线的长度,圆的直径或填充颜色。
捕捉例程50包括计算机可执行指令以响应在主机系统5上执行的高级应用程序45内的指令,识别被事先存储在随机存储器02中的一系列API函数调用47作为硬件指令。高级程序内的这些指令一般由程序员编写至要求图象被渲染的应用程序中,以激活本发明提供的更先进的功能。
高级应用程序45内激活本发明的功能的指令包括“Begin_Program”46和“End_Program”48标识对,它们包含或界定一系列API函数调用47,它们由程序员编写,作为由助记符号标识符(与所需的参数一起)调用在设备驱动器15中提供的API组17内的特定渲染函数。程序员任意编写API序列,以产生所希望的图象。Beg in_Program/End_Program界定对标识被事先存储在存储器20中作为硬件指令的API序列。
当应用程序45中的Begin_Program指令46被执行时,发出一个函数调用至设备驱动器代码15中的捕捉例程50。图3示出捕捉例程的基本流程。示出的序列被应用程序45内的Begin_Program指令46初始化。首先,如方框55所示,捕获例程设置一个标志指示设备驱动器15存储由API函数调用47生成的硬件指令至存储器20,而不是通过将它们发送至加速器30而执行执行硬件指令。这样,如方框60所示,通过传递程序员指定的参数至API库中的API函数,并将API存储到存储器20中,在Begin_Program指令46以后的API函数调用47被估值以生成相应的硬件指令。API包括完全机器可执行寄存器指令以写入帧缓冲器35,进行由程序员在调用参数中指定的渲染函数。捕获例程50为每个API函数调用47进行方框60中指示的操作。在捕获例程中,设备驱动器计算和记录开始地址和存储器20中存储的指令的范围。然后,如方框65所示,当应用程序45发出一个End_Program指令48时,捕获例程复位由Begin_Program指令46设置的标志,并在主机系统5寄存累积存储的硬件可执行指令作为一个可执行程序。现在该程序可以使用唯一助记码标识符“id”而被激活,助记码标识符“id”是包含由设备驱动器计算出的数字并返回至应用程序45的变量。该“id”变量一般由程序员在Begin_Program指令46中给出一个有意义的名字。
设备驱动器为每个应用程序45中的Begin_Program/End_Program对进行上述的处理。可能有多个这样的对;但是,一旦界定API序列47被转换成硬件指令,存储在存储器20中并在主机系统5中寄存作为可执行程序,它可以根据需要由图形子系统10执行,而不需要一般的主机处理器,即,设备驱动器,操作。如图3所示,应用程序45可以在显示器以希望的频率渲染一个图形,这通过简单地在Execute_Program49中指定它的分配的助记码,“id”来完成。Execute_Program指令49使得DLP25读出相应于存储在存储器20中的硬件指令,并发出指令至加速器30。加速器执行寄存的指令以填充帧缓冲器35。之后,象素定义从帧缓冲器35扫描至显示设备40以产生所希望的图象。
所需的唯一一个设备驱动器操作是在帧缓冲器35中定位图象在Locate_Scene指令中指定位置,之后初始化Execute_Program指令49中指定的存储的硬件指令以物理上渲染图象。已不再需要进行API函数序列所需的设备驱动器操作,它们每次在应用程序需要时执行,从而为其他操作释放了主机处理器周期和执行操作所需的存储器。
以下示出本发明的应用程序的一个例子,其中程序员希望为视频游戏生成一个汽车的图象。该汽车图象需要重复生成。
一般地,程序员在一个有主机处理器,存储器,读/写磁盘存储器,和例如键盘和鼠标的I/O设备的计算机系统上工作,该计算机系统允许用户与操作系统和应用程序进行交互,应用程序包括用于编写和编辑软件的文本编辑器。程序员将使用文本编辑器编写或编辑包含由本发明的设备驱动器软件识别的指令的源代码。为实现本发明,该计算机系统一般进一步要求图形子系统包含如图2所示的部件。
在视频游戏的源代码中,程序员一般编写程序指令定义Begin_Program/End_Program对以界定API函数序列,渲染汽车图象部件。例如,界定API函数序列以渲染汽车轮胎部件的伪码可以如下<pre listing-type="program-listing"><![CDATA[htire=Begin_Program();//定义一个被存储程序以渲染//一个原始的轮胎;Draw_Circle(100); //画轮胎的轮廓;Fill_Circle(Black);//用黑色填充圆;Draw_Circle(10); //直接在轮胎的中间画一个小的圆;Fill_Circle(Silver); //给它一个铬色中心;End_Program(); //保存硬件指令以渲染轮胎;]]></pre>在这个例子中,根据本发明的方法,第一个指令“htire=Begin_Program()”标识API函数序列的开始以转换成硬件指令并存储在存储器中。助记码“htire”是由程序员随意指定的并表示一个被产生的包含有设备驱动器15计算的并用于识别和跟踪被存储的程序的数字的变量。
下面的指令,“Draw_Circle(100)”(请注意100在此是一个函数参数而不是附图标号),“Fill_Circle(Black)”和“Fill_Circle(Silver)”表示调用渲染图元的API17中的函数。在此,API函数将渲染黑色圆圈,该圆圈中心有一个较小的银色圆圈,表示一个轮胎。
最后一行,“End_Program()”,标识被存储的API序列的结尾。
视频游戏源代码被相似地编辑以界定API序列,渲染汽车的车身,车窗,保险杠等等。
一般地,为了最好地实现本发明的优点,程序员确定将所有API序列如上所述预先存储作为硬件指令,作为应用程序执行的开始或初始化阶段。被存储后用于执行硬件指令的源代码一旦存储完这些硬件指令将位于这个初始化阶段之后。在这个汽车的例子中,被存储的硬件指令伪码可以是如下<pre listing-type="program-listing"><![CDATA[Locate_Scene(front); //定位前轮胎画在何处;Execute_program(htire); //在汽车的前面渲染整个轮胎;Locate_Scene(rear); //定位后轮胎画在何处;Execute_program(htire); //在汽车的后面渲染整个轮胎;Locate_Scene(top); 定位汽车的车身画在何处;Execute_program(hbody); //画车身(“hbody”是预先存 //储的程序,与“htire”相似]]></pre>在如上编辑以识别并执行预存储API序列后,视频游戏源代码被存储在存储设备中以在以后执行。
图4示出上述示例程序的执行(未示出车身的渲染)。该程序作为主机系统5中的图形应用程序45执行。指令“htire=Begin_Program”46的执行产生捕获例程50的一个函数调用,并初始化图3示出的基本过程。正在讨论的特定的例子的流程在图4中示出。
首先,捕获例程50设置标志以指示相应于API函数调用47的硬件指令是被存储于存储器20中而不是被执行。这样,如方框60a所示,API调用“Draw_Circle(100)”47a使得捕获例程执行指令以生成和存储相应的硬件指令。为此,捕获例程传递程序员指定的定义所希望的圆半径参数“100”,给基本渲染函数“Draw_Circle()”18,包含寄存的I/O指令的,并存储寄存的指令至存储器20。
之后,如方框60b所示,响应下一个指令,“Fill_Circle(Black)”47b,捕获例程生成一个硬件指令,通过传递颜色参数“Black”至基本渲染函数“Fill_Circle()”,用黑色填充圆,并存储寄存的指令至存储器20。
方框60c和60d与API指令47c和47d的响应相似。
之后,应用程序发出End_Program指令48,并且捕获例程如方框65所示响应。由Begin_Program指令设置的标志被复位,并且在上述过程中存储于存储器20中的累积硬件指令在主机系统5中寄存为可执行程序“htire”。
应用程序45继续执行。渲染轮胎图象所需的所有硬件级指令作为可执行程序存储于存储器20中。结果,这样,每当应用程序希望在显示设备40上渲染轮胎时,它简单地按希望的频率发出“Execute_Program(htire)”指令49,而图形子系统渲染轮胎而不需要除了如Locate_Scene指令70a和70b指定定位图形以外的其它设备驱动器操作,并且之后初始化Execute_Program指令49指定的存储的硬件指令以物理渲染图象。响应Execute_Program指令49,DLP25读取存储在存储器20中相应于的“htire”的硬件指令,并发出指令至加速器30。加速器执行寄存的指令以填充帧缓冲器35。之后,象素定义从帧缓冲器35扫描至显示设备40上以生成轮胎图象。
在以上的汽车渲染例子中,Locate_Scene(front)70a和Locate_Scene(rear)70b伪码指令表示指定帧缓冲器位置操作,而使用被捕获硬件指令渲染轮胎。一个复杂的情况是汽车由在Locate_Scene指令中指定的位置上的轮胎,车身等组装部件组成。
通过嵌套Execute_Program指令来渲染汽车也是可能的。例如,调用“hcar”的主程序由激活"btire","hbody"d等等的Execute_Program指令组成。这些Execute_Program指令被Locate_Scene_Object指令处理,它指定相对于主场景,一个对象在主场景的哪个位置进行渲染。之后,当"hcar"被捕获时,整个汽车由单一一个Execute_Program(hcar)指令渲染。
如汽车渲染例子所示,根据上述的本发明的方法和系统,本发明提供的一个优点是能够利用被捕捉的简单的可重定位的子场景作为硬件指令而有效地合成一个复杂的场景。帧缓冲器中的主场景位置被指定,然后使用被捕捉的硬件指令迅速地渲染复杂场景而将子场景放入主场景中。
这个特征的细节可以由捕捉Locate_Scene操作本身并重定位子场景作为硬件指令而获得。示意性例子在以下伪码中示出<pre listing-type="program-listing"><![CDATA[//创建在右下角包含对角线的可重定位子场景hprog=Begin_Program() //初始化捕捉例程以创建调用//"hprog"的存储的程序Locate_Scene_Object(20,20)//生成和存储硬件指令以定位//相对于指定的主场景坐标的//对象在坐标(20,20)Draw_in_Object(0,0,10,10) //生成和存储硬件指令以渲染 //10象素的对角线End_Program(hprog) //结束捕捉例程并在主机系统上 //寄存"hprog"作为一个可执行程序]]></pre>当如图2和3所示对应用程序45编码和在主机系统5上执行时,上述伪码将创建一个在存储器20中存储的包含硬件指令的程序,当由DLP25执行时,它将在有相对于主场景的指定坐标的迪卡尔(x,y)坐标(20,20)的帧缓冲器位置渲染一个10象素对角线。
以下伪码示出使用被捕捉程序"hprog"以有效地在主场景中重定位和渲染子场景的例子<pre listing-type="program-listing"><![CDATA[Locate_Scene(primary_scene,0,0) //定位一个子场景在主场 //景内的坐标(0,0)处Execute_Program(hprog) //在相对于(0,0)的(20,20)处使 //用捕获的硬件指令渲染子//场景(10象素对角线)Locate_Scene(primary_scene,55,59)//定位子场景在主场 //景内的(59,59)处Execute_Program(hprog) //使用捕获的硬件指令在相对于 //(59,59)的(20,20)处渲染子场景]]></pre>当在应用程序45中执行时,以上的伪码例子将使得DLP25执行捕获的硬件指令“hprog”,在标识为“主场景”的主场景内在坐标(20,20)和坐标(75,79)处渲染包含10象素的对角线的子场景。
以上描述的本发明的概念有较宽的应用范围,且可用于从不同类型的由应用程序员指定的高级计算机程序指令序列中生成存储的可重用的硬件级指令。存储的硬件指令可以在子系统上执行,该子系统有主机操作系统要求的最小的操作,以减低对主机处理器周期和存储器的需求。
如上所述,本发明可以更好地在图形子系统的图象设备驱动器中作为计算机可执行指令实现。为此,设备驱动器代码可以驻留在任何计算机可用介质的适合的位置上,例如,在计算机的存储器中,作为主机操作系统的完全链接子程序。当未被实际完成时,该代码位于可携带计算机可用介质上,例如,磁带,软盘,硬盘,CD-ROM等等。
以上描述列举和说明了本发明。此外,以上公开只是示出和说明了本发明的最佳实施例,可以理解,本发明能够在不同的其它组合,修改和环境中使用,并可以结合以上的描述和/或本领域的现有技术,在本发明概念的范围内作出改变和修改。这里的实施例还用于解释实现本发明的最佳方式并使本领域的技术人员能够以这些或其它实施例和特定应用程序或使用本发明所需的不同的修改而利用本发明。这样,以上描述不是为了将本发明限制在在此公开的范围。而且,以下的权利要求书可以包括不同的实施例。
权利要求
1.一种图形渲染的方法,包括以下步骤捕获在存储器中捕获由图形应用程序调用的基本渲染函数而生成的硬件指令作为可执行程序;和执行在需要的时候在图形子系统上捕获的硬件指令以渲染图象。
2.如权利要求1的方法,其中所述捕获步骤包括以下步骤响应通过生成相应于所述渲染函数的硬件指令,响应界定基本渲染函数序列的图形应用程序内的指令;存储在所述存储器中存储所述硬件指令;和定义定义所述存储的硬件指令作为主机操作系统可执行程序。
3.如权利要求1的方法,其中所述硬件指令通过传递用户定义的参数至包含在这种函数的集合中的基本渲染函数而生成。
4.如权利要求1的方法,其中所述执行步骤包括以下步骤利用图形处理器从存储器中发出捕获的硬件指令;和利用图形加速器接收所述捕获的指令并写入从捕获的指令导出的象素信息至帧缓冲器,以渲染图象。
5.一种进行图形渲染的计算机系统,包括一个主机操作系统;和一个图形子系统,包括进行渲染操作的硬件;其中所述主机操作系统包括软件,该软件包括计算机可执行指令,它响应图形应用程序发出的指令,捕捉由基本渲染函数生成的图形子系统的硬件指令在存储器中作为一个可执行程序,基本渲染函数是由图形应用程序调用的。
6.如权利要求5的计算机系统,其中所述软件捕获所述硬件指令是通过通过生成相应于所述渲染函数的硬件指令,响应界定基本渲染函数序列的所述图形应用程序中的指令;存储所述硬件指令至存储器;和定义所述存储的硬件指令作为一个主机操作系统的可执行程序。
7.如权利要求5的计算机系统,其中所述硬件指令是通过传递用户定义的参数至从这种函数的集合中获得的基本渲染函数。
8.如权利要求5的计算机系统,其中进行图形渲染的所述硬件包括一个图形处理器,从存储器发出捕获的硬件指令;和一个图形加速器,接收所述捕获的指令并写入从所述捕获的指令导出的象素信息至帧缓冲器,以渲染图象。
9.一种实现计算机可执行程序代码以实现进行图形渲染的方法的计算机可用媒介,所述代码包括响应图形应用程序中的指令,以捕捉由图形应用程序调用的基本渲染函数生成的硬件指令在存储器中作为一个可执行程序。
10.如权利要求9的计算机可用媒介,其中所述代码包括指令用于通过生成相应于所述渲染函数的硬件指令,响应界定基本渲染函数序列的所述图形应用程序中的指令;存储所述硬件指令至存储器;和定义所述存储的硬件指令作为一个主机操作系统的可执行程序。
11.如权利要求9的计算机可用媒介,其中所述硬件指令是通过传递用户定义的参数至包含在这种函数的集合中的基本渲染函数。
12.如权利要求9的计算机可用媒介,其中所述代码包括指令用于控制一个图形处理器,从存储器发出捕获的硬件指令至一个图形加速器。
13.一种执行高级计算机程序指令序列的方法,使用可重用硬件级指令,这些指令在需要时在主机操作系统的子系统上执行,包括以下步骤捕获在存储器中捕获由图形应用程序调用的基本渲染函数而生成的硬件指令作为可执行程序;和执行在需要的时候在图形子系统上执行捕获的硬件指令。
14.如权利要求13的方法,其中捕获步骤包括以下步骤响应通过生成相应于所述渲染函数的硬件指令,响应界定基本渲染函数序列的图形应用程序内的指令;存储在所述存储器中存储所述硬件指令;和定义定义所述存储的硬件指令作为主机操作系统可执行程序。
15.如权利要求13的方法,其中所述硬件指令通过传递用户定义的参数至从这种函数的集合中获得的硬件级函数而生成。
16.一种执行图形渲染的方法,包括以下步骤在图形应用程序中定义一个基本渲染函数序列,作为存储器中被捕获的硬件指令序列;执行包含定义的序列的图形应用程序,以产生被捕获硬件指令;和执行捕获的硬件指令以渲染图象。
17.如权利要求16的方法,其中所示定义步骤包括界定标识符之间的基本渲染函数序列以激活捕捉过程。
18.如权利要求17的方法,其中所述图形应用程序的执行步骤是在有一个图形子系统的主机操作系统上进行的,并包括含有指令的软件用于通过生成相应于所述渲染函数的图形硬件的硬件指令,响应界定基本渲染函数序列的所述图形应用程序中的所述标识符;存储所述硬件指令至存储器;和定义所述存储的硬件指令作为一个主机操作系统的可执行程序。
19.一种进行图形渲染的方法包括以下步骤在存储器中捕获由图形应用程序调用的基本渲染函数序列生成的硬件指令作为一个可执行程序,所述序列定义一个子场景;为被渲染的所述子场景指定在主场景中的位置;和执行所述捕获的指令在被指定的位置渲染所述子场景。
20.一种计算机可用媒介,实现进行图形渲染方法的计算机可执行程序,包括以下步骤在存储器中捕获由图形应用程序调用的基本渲染函数序列生成的硬件指令作为一个可执行程序,所述序列定义一个子场景;为被渲染的所述子场景指定在主场景中的位置;和执行所述捕获的指令在被指定的位置渲染所述子场景。
全文摘要
一种计算机实现的方法和系统,用于根据需要在图形子系统上执行图形渲染。当应用程序在主机操作系统上执行时,开始程序标识符激活主机操作系统中图形设备驱动器中的一个函数。该函数捕捉存储器中应用程序内的渲染函数的调用作为图形子系统的硬件指令。当函数遇到结束程序标识符,它在主机系统上登记被捕获硬件指令作为一个执行程序。应用程序可以根据需要通过已登记的可执行程序渲染图象。
文档编号G06T15/00GK1270366SQ0010492
公开日2000年10月18日 申请日期2000年3月30日 优先权日1999年3月31日
发明者R·J·德维斯, P·M·尚利 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1