具有边绘制单元的图形引擎以及合并有该图形引擎的电子装置及存储器的制作方法

文档序号:2527728阅读:217来源:国知局
专利名称:具有边绘制单元的图形引擎以及合并有该图形引擎的电子装置及存储器的制作方法
技术领域
本发明涉及一种图形引擎以及合并有该图形引擎的电子装置和存储器。
背景技术
本发明应用于电子装置的显示器,特别是便携式或控制台电子装置上的小面积显示器。存在很多这种装置,例如PDA、无绳电话、移动电话和桌面电话、汽车内信息控制板、手持电子游戏设备、多功能手表等。
在现有技术中,通常具有主CPU,该主CPU产生命令,并接收显示命令,对这些显示命令进行处理,并以描述各个显示像素属性的像素数据的形式将处理结果传送给显示模块。传送到显示模块的数据量与显示器分辨率和色浓度(colour depth)成正比。例如,具有四级灰度的96×96像素的小单色显示器需要向显示模块传送非常小的数据量。然而,这种屏幕不能满足用户对更吸引人和更能够提供信息的显示器的需求。
随着对彩色显示器和对需要较高屏幕分辨率的复杂图形的需求,由CPU处理并传送给显示模块的数据量变得很大。更加复杂的图形处理增加了CPU的负担并使装置的速度减慢,使得显示器的反应和刷新速率变得难以接受。对于游戏应用尤其存在问题。另一问题是图形处理的增加导致耗电量增加,这显著地缩短了电池供电装置的充电时间间隔。
以可接受的速度显示复杂图形的问题通常由附加卡(extra card)上的硬件图形引擎(也被称为图形加速器)来解决,该附加卡安装在处理器壳体中,或作为主板上的嵌入单元。图形引擎负责主CPU的至少一部分显示命令处理。图形引擎是专门为图形处理而开发,所以与处理相同图形任务的CPU相比较,图形引擎更加快速并使用更少的电力。随后将所得到的视频数据从处理器壳体发送给单独的"哑"显示模块。
在PC中使用的已知图形引擎专门为大面积显示器设计,因此是非常复杂的系统,需要所使用的大量门的单独硅电路小片。将这些引擎并入便携式装置是行不通的,因为便携式装置的显示器面积小,尺寸和重量有严格限制,而且电力资源有限。
此外,PC图形引擎被设计用来处理在大面积显示器中所使用的数据类型,例如复杂图像的多个位图。目前,传送给移动的小面积显示器的数据可以是矢量图形的形式。矢量图形语言的示例有MacroMediaFlashTM及SVGTM。矢量图形定义也用于许多游戏应用编程接口(API),例如Microsoft Directx和OpenGL。
在矢量图形中,图像被定义为多个复杂的多边形。这使得矢量图形适合于能够容易地通过数学函数来定义的图像,例如游戏场景、文本和GPS导航地图。对于这些图像,矢量图形比相应位图的效率高得多。也就是,定义与位图文件(以各个单个显示像素的方式)相同细节的矢量图形文件(以复杂多边形的方式)将包含较少的字节。将矢量图形文件转换成多边形内部的像素(或子像素)的坐标流,以形成位图,通常被称为″光栅化(rasterisation)″。位图文件是像素格式的最终图像数据,可以直接复制到显示器。
复杂多边形是自交叉(self-intersect)并且其中具有″孔″的多边形。复杂多边形的示例有字母和数字,例如″X″和″8″以及汉字字符。当然,矢量图形也适于定义诸如构成许多计算机游戏的基本图元的三角形的简单多边形。多边形由直线边或曲线边以及填充命令来定义。理论上,各个多边形的边数不受限制。然而,例如包含复杂场景的相片的矢量图形文件将包含比相应位图多几倍的字节。
已知适于与例如由小面积显示器采用的高级/矢量图形语言一起使用的图形处理算法。例如,在″Computer GraphicsPrinciples and Practice″Foley,Van Damn,Feiner,Hughes 1996 Edition,ISBN 0-201-84840-6中提供了一些算法。
图形引擎通常是软件图形算法,采用具有链表和排序操作的内部动态数据结构。给出一个多边形的多边形边数据的所有矢量图形命令在其开始再现(rendering)(从所接收的高级命令产生用于显示的图像)之前必须被读取到软件引擎中,并且存储在数据结构中。用于各个多边形的命令例如存储在各个多边形边的起始点和终止点的控制列表(master list)中。逐条扫描线地绘制(光栅化)多边形。对于显示器的各条扫描线,该软件首先检查整个列表(或至少检查可能与所选择的扫描线相关的部分列表)并选择哪个多边形边(“有效(active)边”)与扫描线交叉。然后识别各个所选择的边在何处与扫描线交叉,并且对它们进行排序(通常从左到右),从而从显示区域的左边开始,将交叉点标记为1、2、3...。对交叉点进行排序后,可以在它们之间填充多边形(例如,使用在奇交叉点开始填充而在下一(偶)交叉点停止的奇/偶规则)。
各个顶点需要存储x和y。通常为32位浮点值。对于″n″边多边形,所需的最大存储是″n″乘以顶点数(该定点数是未知的)。因此,可以处理的控制列表的大小受到软件可用的存储器容量的限制。已知的软件算法因此具有下述缺点需要大量的存储空间以在再现之前存储复杂多边形的所有命令。这使它们难以转换成硬件,并可能使制造商产生偏见而反对在移动装置中并入矢量图形处理。
硬件图形引擎更有可能使用三角形光栅化器(rasteriser)电路,该三角形光栅化器电路将各个多边形分为多个三角形(或者用的较少的梯形),分别处理各个三角形以产生该三角形的填充像素,然后重新组合经处理的三角形以生成整个多边形。虽然划分三角形可以由硬件或软件来执行,但是随后的再现几乎始终是在硬件中进行的。
该技术有时被称为三角形化(或三角形镶嵌法(triangle tessellation)),而且是目前大多数图形硬件使用的再现2D和3D对象的传统方法。
读入各个三角形的几何形状,对其进行光栅化而产生该三角形内的所有像素的像素坐标。通常逐条线地输出像素坐标,但也可以采用其它次序。
由于各个三角形的光栅化所需的几何形状信息是固定的(x和y表示的3个顶点),所以在硬件中实现时没有存储的问题。
事实上,这些顶点所需的存储空间可以为任意大小,例如,可以存在各个顶点的颜色和其它信息。然而,对于光栅化,这些信息不是必须的,所以光栅化所需的数据是固定的。
然而,对于更复杂的多边形,三角形化并不容易,尤其是对那些自交叉的多边形,因为必须在三角形化之前输入并存储整个复杂的多边形,以避免充填以后将成为“孔”的像素。很明显,即使在开始处理简单的凸多边形之前,也需要多个(如果不是所有)边来表明边的哪一侧要进行填充。一种实现该处理的方法是在开始三角形化之前等待″填充″命令,这在定义多边形的所有边之后进行。
希望克服现有技术的固有缺点,并减少便携式电子装置中用于显示目的的CPU负荷和/或数据流量。

发明内容
在独立权利要求中限定了本发明,现对其进行说明。在从属权利要求中限定了优选特征。
根据本发明的一个实施例,提供了一种图形引擎,用于根据所接收的定义多边形的高级图形命令再现显示像素的图像数据,该图形引擎包括边绘制单元,用于读入与单个多边形边相对应的语言的命令语句,并基于该命令语句将该命令转换成该边的空间表达。
因此,优选实施例的图形引擎包括控制电路/逻辑,用于一次读入一条高级图形(例如,向量图形)命令,并将该命令转换成空间表达(即,绘制该边)。如果该图形引擎并行工作,或者可以设置多个边绘制单元,则该图形引擎可以同时读入并转换多条线。
在此所述的命令或命令语句不一定仅表示单个命令行,而是包括定义多边形的一部分(例如,边或颜色)所需的所有命令行。
该图形引擎的逻辑结构具有多个具体的优点。一个优点在于,在将多边形边读入引擎后,不需要存储空间来保存它。可以节约相当大的存储空间和电力,使图形引擎不但特别适合用于便携式电子装置,而且也适用于不需便携的大的电子装置。
另外,在读取命令时向空间信息的简单转换使得图形引擎的逻辑结构能够比现有技术中的小,从而可显著地减少硬件版本中的门和软件版本中所需的处理以及再现所需的存储空间。
图形引擎可以在处理下一命令之前丢弃原始命令,当然,如果边绘制单元并行工作,则下一命令无需是命令串中的后续命令,而可以是下一可用命令。
优选地,边绘制单元读入一命令语句(与有效边或可直接显示的边相对应),并立即将任何有效边转换成空间表达。
这使得可以尽可能快地删除命令或命令语句。优选地,仅在将不应处理的(例如,观察区域之外的线)或不能处理的(例如,曲线)(无效)线转换成可以由图形引擎再现的有效格式时才需要中间处理。
优选地,除了多边形边与先前或同时被读入并转换的边重叠的情况之外,空间表达仅基于该命令语句。很明显,使边重叠生产了不同的结果,这避免任何可能出现的不正确的显示数据。
在优选实施例中,边的空间表达为子像素格式,使得随后可以重新组合为显示像素。这与比屏幕分辨率更高的常用于命令语言中的寻址相对应。
子像素(显示器的各个对应像素具有一个以上的子像素)的提供也使得在并入显示器尺寸之前以扩展空间的形式对数据的操纵和防混叠处理(anti-aliasing)更加便利。每个对应的显示像素的子像素的数量决定了有效的防混叠处理程度。
优选地,空间表达限定了最终显示像素的位置。因此,在已绘制了边的情况下,通常,与多个边内的子像素相对应的像素与所填充的多边形的最终显示像素相对应。这在减少处理方面有明显的优点。
优选地,图形引擎还包括边缓冲器,用于存储空间表达。
因此,在优选实施例中,图形引擎包括边绘制逻辑/电路,该边绘制逻辑/电路与(有限分辨率的)边缓冲器相连,以存储读入引擎内的任何多边形(的边)的空间信息。边缓冲器结构不仅使得可以在各条边的原始数据被读入该缓冲器后,容易地丢弃该原始数据,这与现有的软件引擎相反,而且还具有下述优点其对要绘制的多边形的复杂度没有进行限制。在使用现有技术的高级命令的链表存储的情况下,可能受到这种限制。
边缓冲器的分辨率可以比显示存储器的前置缓冲器的分辨率高。例如,如前所述,可以将边缓冲器设置用来存储子像素,多个子像素与单个显示像素相对应。
边缓冲器可以是栅格的形式,并且各个栅格方块或子像素优选地在设置和未设置状态之间切换,以存储空间信息。仅使用未设置和设置状态意味着边缓冲器需要每子像素一比特的存储空间。
优选地,边缓冲器将多边形边存储为被设置的边界子像素,并且这些边界子像素在边缓冲器中的位置与该边在最终图像中的位置相关。
优选地,根据前述权利要求中的任何一个的图形引擎的特征在于,单个多边形边的输入和转换使得可以再现多边形而不需进行三角形化,并且使得可以在获得多边形的所有边数据之前开始再现该多边形。
该图形引擎可以包括填充器电路/逻辑,用于填充其边已存储在边缓冲器中的多边形。该双通道方法(two-pass method)的优点在于,在产生所填充的多边形的颜色之前,可以再次使用每子像素1比特的(边缓冲器)格式。所得到的设置子像素不需要重新存储在边缓冲器中,而可以在处理的下一步骤中直接使用。
图形引擎优选地包括后置缓冲器,以在将图像传送到显示驱动存储器的前置缓冲器之前,存储部分或者全部图像。使用后置缓冲器避免了直接再现到前置缓冲器,并防止显示图像中的闪烁。
后置缓冲器优选地具有与显示存储器的前置缓冲器相同的分辨率。也就是,将后置缓冲器中的各个像素映射到前置缓冲器的对应像素。后置缓冲器优选地具有与前置缓冲器相同的每像素比特数,以显示像素的颜色和色浓度(RGBA值)。
存在设置用来将由填充器电路产生的各个填充多边形组合到后置缓冲器中的组合逻辑/电路。该组合可以顺序进行或者并行进行。通过这种方式,在传送到前置缓冲器用于显示之前,在后置缓冲器中,逐个多边形地构建图像。
优选地,根据正在进行处理的多边形中的像素的颜色、由该多边形覆盖的像素的百分比以及后置缓冲器中的对应像素已有的颜色,来确定存储在后置缓冲器中的各个像素的颜色。该颜色混合步骤适合于防混叠处理。
在一个优选实施例中,边缓冲器以栅格的形式存储子像素,该栅格的方块数为各个显示像素的子像素数。例如,边缓冲器中的4×4子像素的栅格可以与一个显示像素相对应。根据待绘制的边来设置或不设置各个子像素。
在一另选实施例中,在边缓冲器中,每隔一个子像素地使用子像素,以使每显示像素设置的子像素的方格数减半(″棋盘格″模式)。在该实施例中,如果边绘制电路需要设置未利用的子像素,则相邻(被利用的)子像素在其位置处被设置。该另选实施例具有下述优点,对于各个显示像素,边缓冲器中需要较少的位,但是在某种程度上降低了防混叠的质量。
可以根据边的端点计算各个多边形边的斜率,然后沿着该线设置栅格的各个子像素。优选地,使用下面的规则设置子像素对于各个多边形边,子像素栅格的每条水平线只设置一个子像素;从上到下(沿y方向)设置子像素;对该线的最后子像素不进行设置;使设置在线下方的任何子像素反向。
在该实施例中,填充器电路可以包括用作为横穿子像素栅格的虚拟笔(子像素状态设置填充器)的逻辑/代码,所述笔初始为关,并在每次遇到以设置的子像素时,在关和开之间进行切换。所得到的数据优选地提供给用于组合与各个像素相对应的多个子像素的混合(amalgamation)电路。
虚拟笔优选地设置边界子像素内的所有子像素,并且包括右侧边界的边界像素,并清除左侧边界的边界像素,或者相反。这避免了在数学上不重叠的多边形的交叠子像素。虚拟笔可以覆盖一条线的子像素(以并行地对它们进行处理),并同时填充多个子像素。
优选地,对虚拟笔的横穿进行限制,以使得不需要考虑多边形边外部的子像素。例如,可以提供包围该多边形的限制框。
优选地,在组合到后置缓冲器之前,将与单个显示像素相对应的子像素(来自填充器电路)混合成单个像素。混合使得后置缓冲器的分辨率比边缓冲器(每像素而不是每子像素地保存数据)的分辨率低,因而减少了存储空间需求。当然,如上所述,边缓冲器中为各个位置保存的数据是最小的(每子像素一比特),而后置缓冲器保存各个像素的颜色值(例如,16比特)。
可以提供组合电路/逻辑用于到后置缓冲器的组合,由所填充的多边形覆盖的各个所混合的像素的子像素数量确定了将所混合的像素组合到后置缓冲器中的混合系数。
在完全再现由后置缓冲器为其保存信息的部分显示器上的图像之后,将后置缓冲器复制到显示存储器的前置缓冲器。事实上,后置缓冲器的大小可以与前置缓冲器的大小相同,并保存整个显示器的信息。另选地,后置缓冲器可以比前置缓冲器小,并且只存储部分显示器的信息,通过一系列的外部通道从后置缓冲器构建前置缓冲器中的图像。
在后一另选方案中,如果仅将与要保存在后置缓冲器中的部分图像相关的命令通过各个外部通道(到处理器)发送到图形引擎,则缩短了该处理。
该图形引擎可以具有多种附加特征以提高其性能。
该图形引擎可以进一步包括曲线镶嵌器(tessellator),以将任何曲线多边形边分成多个直线段,并在边缓冲器中存储所得到的多个线段。
可以调整图形引擎,以使后置缓冲器保存一个或更多个图形(预定的图元),将这些图元传送到前置缓冲器的由高级语言确定的一个或更多个位置。该图形可以是静止图像或运动图像(子图形),甚至是文本字母。
该图形引擎可以具有标线(hairline)模式,其中通过在一位图中设置多个子像素而且将该位图存储在边缓冲器中的多个位置以形成一条线,来将多条标线存储在边缓冲器中。这种标线限定了一个像素浓度的多条线,并且常用于绘制多边形轮廓。
优选地,边绘制单元可以并行地工作,以同时将多个命令语句转换为空间表达。
作为另一改进,该图形引擎可以包括裁剪(clipper)单元,该裁剪单元在读取并转换所得到的在屏幕可视区域中的经处理的多边形边之前,对在所期望的屏幕可视区域外部的多边形边的任何部分进行处理。这使得能够删除任何无效线而不生成空间表达。
优选地,除了限定多边形填充的起始位置所需的边之外,裁剪单元删除所期望的屏幕可视区域外部的所有边,在这种情况下,该边被转换成与相关可视区域边界相重合。
作为对设计的进一步改进,该边绘制单元可以包括阻断和/或限制单元,用于通过将空间表达分组为多个数据块和/或创建与所再现的多边形相对应的限制框,随后不读取框外部的数据,来减少存储空间的使用。
该图形引擎可以以硬件的形式实现,并且在这种情况下,优选地在规模上少于100K门,更优选地少于50K门。
该图形引擎不必以硬件的形式实现,而是可以另选地为软件图形引擎。在这种情况下,可以将所需的代码逻辑保存在CPU中,如果需要,可以存储在以上详细描述的优选特征中的任何一个的充足的代码/存储空间中。对于以上提及的电路,本领域技术人员应该理解,可以在软件实施例的代码部分中获得相同的功能。例如,该图形引擎可以以软件的方式实现,该软件将在具有显示器的电子装置的处理器模块中运行。
该图形引擎可以是程序,优选地保存在处理单元中,或可以是载体上的记录,或采用信号的形式。
根据本发明的另一实施例,提供了一种电子装置,其包括如前所述的图形引擎;显示模块;处理器模块;和存储器模块,其中将高级图形命令传送给图形引擎以再现用于显示像素的图像数据。
因此,本发明的实施例使得便携式电子装置可以配备能够根据矢量图形命令显示图像,而同时保持快速的显示器刷新和响应时间以及较长的电池寿命的显示器。
该电子装置可以是便携式的和/或具有小面积显示器。存在如在此所述的减少了电力和存储空间需求的简单图形引擎的重要应用领域。
在此所述的小面积显示器包括具有旨在便携式电子装置中使用的大小的显示器,并排除了例如用于PC的显示器。
在此所述的便携式装置包括可以由用户携带的足够小和轻的手持、佩戴、袋装以及控制板装置等。
该图形引擎可以是嵌入存储器模块中的或者另选地集成在显示模块中的硬件图形引擎。
该图形引擎可以是以一体或共享存储器体系结构的方式与总线连接的、或者保持在处理器模块中、或者在包括处理器模块的基带或伴随IC中的硬件图形引擎。
根据本发明的另一实施例,提供了一种存储器IC(集成电路),其包含嵌入式硬件图形引擎,其中该图形引擎使用标准存储器IC物理接口,并且利用先前未分配的命令空间进行图形处理。优选地,该图形引擎如前所述。
存储器IC(或芯片)往往具有未分配的命令和接点(pad),因为它们根据通用标准设计,而不是针对特定的应用。由于其创造性构造,而使得在其硬件版本中,图形引擎的门数较少,这第一次使得图形引擎能够集成在标准存储芯片的空闲存储空间中,并且无需改变物理接口(接点)。


现将完全以示例的方式,参照附图描述本发明的优选特征。在附图中图1是表示优选图形引擎的功能块的方框图;图2是表示优选图形引擎的操作的流程图;
图3是表示待绘制的多边形的边和生成该多边形的绘制图命令的边缓冲器示意图;图4是表示为各个边命令设置的子像素的边缓冲器示意图;图5是表示被填充的多边形的边缓冲器示意图;图6a是图5所示的被填充多边形的混合像素的示意图;图6b是减少了存储空间需求的边缓冲器配置的示意图;图7a和图7b分别表示二次和三次贝塞尔曲线;图8表示根据本发明实施例的曲线镶嵌处理;图9给出了线性和径向梯度的四个示例;图10表示标准梯度正方形;图11表示在边缓冲器中的待绘制标线;图12表示用于在边缓冲器中绘制标线的原始圆形及其偏移位置;图13表示在已绘制标线时边缓冲器中的最终内容;图14表示显示边缓冲器、后置缓冲器和前置缓冲器的内容的次序,其中在各个通道中,后置缓冲器保存显示图像的1/3;图15表示将后置缓冲器中的一个子图形复制到前置缓冲器中的两个位置;图16表示一示例,其中再现了数以百计的小的2D子图形,以模拟小粒子的溅射;图17表示图形引擎的通用硬件实现;图18表示图形引擎的具体硬件实现的一些模块;图19表示图18的实现中的裁剪单元的功能;图20表示图18的实现中的刷子单元的功能;图21是根据本发明实施例的图形引擎的示意图,其集成在LCD或相应类型的显示器的源IC中;图22是根据本发明实施例的图形引擎的示意图,其集成在显示模块中,并为LCD或相应类型的显示器的两个源IC服务;图23是合并有图形引擎及其与CPU、显示区域和选通驱动IC的连接的源驱动IC的示意图;
图24是使用公共总线上的一体存储器的图形引擎的示意图;图25是使用公共总线上的共享存储器的图形引擎的示意图;图26是使用机顶盒应用中的一体存储器的图形引擎的示意图;图27是包含在游戏控制板体系结构中的图形引擎的示意图;图28是具有集成缓冲器的图形引擎的示意图;图29是嵌入在存储器中的图形引擎的示意图。
具体实施例方式
功能概述图1中的功能框示出了示例性图形引擎1的主要逻辑门块。首先,将矢量图形命令通过输入/输出部分10传送给曲线镶嵌器11,该曲线镶嵌器11将任意曲线边分成多个直线段。该信息传送到边和标线绘制逻辑模块12,该边和标线绘制逻辑模块12在边缓冲器13中存储结果,在本示例中,边缓冲器13为每显示像素16比特。将边缓冲器信息传送给扫描线填充器部分14,以根据矢量图形语言的填充命令的要求来填充多边形。将所填充多边形的信息传送给后置缓冲器15(在本示例中,也是每显示像素16比特),后置缓冲器15进而将图像中继给图像传送模块16,以传送给前置缓冲器。
图2中所示的流程图概括了所填充多边形的整个再现过程。多边形边定义数据一次一条边地(以一条直线或曲线的形式)进入引擎。命令语言通常从后向前地定义图像,从而在前景中的多边形之前定义图像的背景中的多边形(读取也是如此)。如果是曲线,则在将该边存储在边缓冲器中之前对其进行镶嵌化。在存储该边之后,丢弃绘制该边的命令。
在矢量图形中,在填充多边形之前,通过诸如″move″、″line″和″curve″命令的命令来定义多边形的所有边。因而在读取填充命令之前,重复本发明实施例的镶嵌化和线绘制循环(在所谓的第一通道中)。随后处理进行到以边缓冲器格式填充多边形颜色。这被称为第二通道。下一步骤是使用已在后置缓冲器中的相同位置中存在的颜色来合成多边形颜色。将所填充的多边形一次一个像素地添加到后置缓冲器。只有后置缓冲器的相关像素(被多边形覆盖的那些)与边缓冲器组合。
如上所述,在将一个多边形存除在后置缓冲器中之后,过程随后返回以读取下一多边形。进而将下一多边形(其在前一多边形的前面)组合到后置缓冲器中。在绘制了所有的多边形之后,将图像从后置缓冲器传送到前置缓冲器,前置缓冲器可以例如在LCD显示器的源驱动IC中。
边缓冲器为了说明的目的,减小了图3中所示的边缓冲器尺寸,并用于30个像素(6×5)的显示器。它具有与显示器的各个像素相对应的4×4子像素(16比特)的子像素栅格。每一子像素只需要一个比特,其采用未设置(缺省的)或已设置的值。
虚线20表示根据以下命令绘制的多边形的多个边●move To(12,0)●Line To(20,19)●Line To(0,7)●Line To(12,0)●move To(11,4)●Line To(13,12)●Line To(6,8)●Line To(11,4)●Fill(black)命令语言涉及子像素坐标,这对于角的精确定位是通用的。除填充命令之外的所有命令都作为第一通道的一部分进行处理。填充命令开始第二通道以对多边形进行填充,并将其组合到后置缓冲器。
图4表示为各个线命令设置的子像素。为了说明的目的,只沿虚线示出了所设置的子像素21。由于减少了其大小,所以它们不能精确地表示将使用以下所示的命令或规则和代码进行了设置的子像素。
以在命令语言中进行定义的顺序将多条边绘制到边缓冲器中。对于各条线,根据端点计算斜率,然后沿着该线设置子像素。可以每一时钟周期设置一子像素。
将以下规则用于设定子像素对于各条多边形边,子像素栅格的每条水平线上只设置一个子像素;从上到下(沿y方向)设置子像素;使设置在线下方的任何子像素反向;不设置线的最后子像素(即使这意味着没有设置子像素)。
反向规则用于处理复杂多边形(例如,符号″X″)中的自交叉。不使用反向规则,确切的交叉点将仅仅是一个所设置的子像素,这将会干扰稍后描述的填充算法。很明显,对反向规则的需求使避免边的端点重叠变得很重要。由于反向,使得任何这种点都会消失。
为了避免相同多边形上的连续线的这种重叠端点,不设置最低的子像素。
例如,使用命令列表Moveto(0,0)Lineto(0,100)Lineto(0,200)从0,00到0,99有效地绘制第一边,并从0,100开始到0,199有效地绘制第二条线。结果是一条实线。因为从上到下绘制该线,所以最后的子像素也是最低的子像素(除非该线完全水平,在这种情况下,由于只为各个y值设置了一个子像素,所以没有设置子像素)。
下面的代码段实现用于根据上述规则设定边界子像素的算法并假定分辨率为176×220像素(如在此以示例的方式提供的多个其它代码段所执行的)。在″for(iy=y0+1;iy<y1;iy++)″循环之前的代码每条边运行一次,并且″for(iy=y0+1;iy<y1;iy++)”循环中的代码每个时钟周期运行一次。
<pre listing-type="program-listing"><![CDATA[ void edgedraw(int x0,int y0,int x1,int y1) {float tmpx,tmpy;float step,dx,dy; int iy,ix; int bit,idx;∥Remove non visible lines if((y0==y1))return; ∥Horizontal line if((y0<0)&amp;&amp;(y1<0))return; ∥OUT top if((x0>(176*4))&amp;&amp;(x1>(176*4)))return; ∥OUT right if((y0>(220*4))&amp;&amp;(y1>(220*4)))return; ∥OUT bottom∥Always draw from top to bottom(Y Sort) if(y1<y0) { tmpx=x0;x0=x1;x1=tmpx; tmpy=y0;y0=y1;y1=tmpy; }∥Init linedx=x1-x0;dy=y1-y0;if(dy==0) dy=1;step=dx/dy; ∥Calculate slope of the lineix=x0;iy=y0;∥Bit order in sbuf(16 sub-pixels per pixel)∥0123∥4567∥89ab∥cdef∥Index=YYYYYYYXXXXXXXyyxx∥four lsb of index used to index bits within the unsigned shortif(ix<0)ix=0;if(ix>(176*4)) ix=176*4; if(iy>0) {idx=((ix>>2)&amp;511)|((iy>>2)<<9);∥Integer partbit=(ix&amp;3)|(iy&amp;3)<<2;sbuf[idx&amp;262143]^=(1<<bit); } for(iy=y0+1;iy<y1;iy++) { if(iy<0)continue;if(iy>220*4)continue;ix=x0+step*(iy-y0);if(ix<0)ix=0;if(ix>(176*4))ix=176*4;idx=((ix>>2)&amp;511)|((iy>>2)<<9); ∥Integer partbit=(ix&amp;3)|(iy&amp;3)<<2;sbuf[idx&amp;262143]^=(1<<bit); }}]]></pre>尽管描述了边的顺序绘制,但是本领域的技术人员可以很容易地理解,可以实现一些并行处理。例如,可以将同一多边形的两个或更多个边同时绘制到边缓冲器中。在这种情况下,必须提供逻辑电路以确保可以适当地处理这些线之间的任何重叠。同样地,可以并行地再现两个或更多个多边形,如果所获得的经增大的处理速度的超负荷,则需要更复杂的逻辑/电路。可以对再现处理的任何部分实施并行处理。
图5表示在子像素定义中所填充的多边形。暗的子像素是已设置的。应该注意,充填处理由填充器电路执行,并且无需在边缓冲器中重新存储该结果。该图仅仅表示发送到该处理的下一步骤的所设置的子像素。这里,多边形由覆盖单个子像素并横穿子像素栅格的虚拟标记或笔来填充,该笔最初关闭,而在每次遇到所设置的子像素时,在关和开之间进行切换。该笔还可以覆盖多于一个的子像素,这些子像素优选地在子像素的线上(例如,在下面的特定硬件实现中的四个子像素)。在这种情况下,它也可以被称为刷子。在该示例中,该笔一次一个子像素地从左移动到右。如果该笔向上并且设置了子像素,则像素保持为被设置,然后该笔设置后面的像素,直到其到达另一被设置的像素为止。该清除该第二设置像素,该笔保持向上而且继续向右。
该方法包括在多边形左边的边界子像素但不考虑右边的边界子像素。原因是如果两个相邻的多边形共享相同的边,则必须存在关于分配有任何给定子像素的那个多边形的一致性,以避免在数学上不重叠的多边形的子像素重叠。
再已填充边缓冲器中的多边形之后,可以混合属于各个像素的子像素并组合到后置缓冲器中。各个4×4小栅格的覆盖率给出了色度。例如,从像素的最高行的左边开始的第三个像素具有12/16个被设置的像素,其覆盖率是75%。
组合到后置缓冲器中图6a表示将要组合到后置缓冲器中的各个像素及其根据图5所示的对每个像素设置的子像素而计算的4比特(0...F hex)混合系数。每个时钟周期可以将一个像素组合到后置缓冲器中。只有覆盖率值大于0的像素才被进行组合。
后置缓冲器无需为与边缓冲器相同的图像部分(多个显示像素)保存数据。或者保存整个显示器或其一部分的数据。然而,为使处理更加容易,一个的大小应该是另一个的多倍。在一个优选实施例中,边缓冲器和后置缓冲器都保存整个显示器的数据。
在该例子中,后置缓冲器中的多边形的分辨率是在边缓冲器中其大小的四分之一(当然,这取决于每像素的子像素的数量,这可以根据防混叠的需要和其它因素进行选择)。两通道方法和在后置缓冲器中存储多边形之前进行混合的优点是显著地减少了所需的总的存储空间。边缓冲器需要每子像素1比特用于设置值和未设置值。然而,后置缓冲器需要较多的每像素比特(这里为16)来表示待显示的阴影(shade),如果后置缓冲器用来设定边界子像素而且填充所得到的多边形,则所需存储空间的量将大于边缓冲器和后置缓冲器的组合的八倍,也就是说需要16比特的缓冲而不是2比特的缓冲。
在组合中,每个像素子像素数的系数、颜色值所需的比特、以及边缓冲器和后置缓冲器保存的显示的比例意味着边缓冲器的存储空间需求通常小于或等于后置缓冲器的存储空间需求,而前置缓冲器的存储空间需求大于或等于后置缓冲器的存储空间需求。
边缓冲存储空间需求压缩到8比特上述边缓冲器具有被构造为4×4比特的16比特值。通过将每像素的边缓冲器数据降低到8比特,一种另选(″棋盘格″)结构减少了50%的存储空间需求。
如图6b所示,通过从单个显示像素的4×4结构中去除奇数XY位置来实现这种结构。
如果将要绘制到边缓冲器的子像素具有属于没有存储比特的位置的坐标,则将其向右移动一步。例如,将上面所示的部分栅格中的右上子像素向右移动到下一显示像素的部分栅格。在一个具体示例中,在上面所示的代码中增加以下的代码行if((LSB(X)xor LSB(Y))==1)X=X+1;∥LSB()返回最下方比特的坐标这在4×4结构内只留下了八个可以接收子像素的位置。这些位置压缩为8比特数据,并如前面一样存储到边缓冲器中。
每像素8比特的边缓冲器是每像素16比特的缓冲器的另选方案。虽然防混叠质量降低,但影响很小,所以所需存储空间减少50%的优点胜过该缺点。
曲线的再生图7a和图7b分别表示二次和三次贝塞尔曲线。通常两者都相对对称控制点对称。通过将曲线分成多个短的线段(镶嵌化)来实现绘制这种曲线的多边形。将曲线数据作为矢量图形命令传送给图形引擎。在图形引擎中而不是在CPU中进行的镶嵌化减少了每个多边形发送给显示模块的数据量。如图7a所示的二次贝塞尔曲线具有三个控制点。可以将其定义为Moveto(x1,y1),CurveQto(x2,y2,x3,y3)。
三次贝塞尔曲线始终通过端点,并且与后两个控制点和前两个控制点之间的直线相切。可以将三次曲线定义为Moveto(x1,y1),CurveCto(x2,y2,x3,y3,x4,y4)。
下面的代码示出了两个函数。在镶嵌化处理期间,每一个函数被调用N次,其中N是所产生的直线段的数量。函数Bezier3用于二次曲线,函数Bezier4用于三次曲线。输入值p1-p4是控制点,而mu是在镶嵌化处理期间从0增加到1的值。mu的值为0时,返回p1,mu的值为1时,返回最后的控制点。
<pre listing-type="program-listing"><![CDATA[XY Bezier3(XY p1,XY p2,XY p3,double mu){ double mum1,mum12,mu2; XY p; mu2=mu*mu; mum1=1-mu; mum12=mum1*mum1; p.x=p1.x*mum12+2*p2.x*mum1*mu+p3.x*mu2; p.y=p1.y*mum12+2*p2.y*mum1*mu+p3.y*mu2; return(p);}XY Bezier4(XY p1,XY p2,XY p3,XY p4,double mu){ double mum1,mum13,mu3; XY p;mum1=1-mu; mum13=mum1*mum1*mum1; mu3=mu*mu*mu; p.x=mum13*p1.x+3*mu*mum1*mum1*p2.x+ 3*mu*mu*mum1*p3.x+mu3*p4.x; p.y=mum13*p1.y+3*mu*mum1*mum1*p2.y+ 3*mu*mu*mum1*p3.y+mu3*p4.y; return(p);}]]></pre>以下代码是如何对由三个控制点(sx,sy),(x0,y0)和(x1,y1)限定的二次贝塞尔曲线进行镶嵌化的示例。镶嵌化计数器x从1开始,这是因为如果它为0,则函数将返回第一控制点,导致直线的长度为零。
<pre listing-type="program-listing"><![CDATA[XY p1,p2,p3;p1.x=sx;P1.Y=sy;p2.x=x0;p2.y=y0;p3.x=x1;p3.y=y1;#define split 8for(x=1;x<=split;x++){ P=Bezier3(p1,p2,p3,x/split);∥Calculate next point on curve path LineTo(p.x,p.y);∥Send LineTo command to Edge Draw unit}]]></pre>
图8表示在上述代码段中定义的曲线镶嵌化处理并返回N个直线段。对各个直线段重复中间的循环。
填充类型以高级语言定义的多边形的颜色可以是原色(solid)(即,整个多边形的一个恒定RGBA(红、绿、蓝、阿尔法(alpha))值),或者可以具有径向或线性梯度。
梯度可以具有多达八个的控制点。在控制点之间对颜色进行插值以形成颜色渐变(ramp)。各个控制点由一比率和一RGBA颜色限定。该比率确定控制点在梯度中的位置,RGBA值确定其颜色。
无论哪种填充类型,当将所填充的多边形组合到后置缓冲器时,在混合处理期间计算各个像素的颜色。径向和线性梯度类型仅需要更复杂的处理,以沿着颜色渐变合并各个单独像素的位置。
图9给出了线性和径向梯度的四个示例。所有这些都可以由本发明的图形引擎自由使用。
图10表示一标准的梯度正方形。在被称为梯度正方形的标准空间中定义所有的梯度。梯度正方形的中心为(0,0),并从(-16384,-16384)延伸到(16384,16384)。
在图10中,将线性梯度映射到圆心为(2048,2048),直径为4096个单位的圆上。
该映射所需的2×3矩阵为

即,将梯度换算为其原始大小的八分之一(32768/4096=8),而且平移到(2048,2048)。
图11表示将要绘制到边缓冲器中的标线23。标线是具有一个像素的宽度的直线。图形引擎以特殊的模式支持标线的再现。当标线模式有效时,边绘制单元不采用为正常边绘制制定的四个特殊规则。另外,对边缓冲器的内容的处理也不同。将标线绘制到边缓冲器中,同时在空闲时(on the fly)进行填充操作。也就是,没有独立的填充操作。因此,在对当前绘制的图元(例如,多边形轮廓)绘制了所有的标线后,边缓冲器中的各个像素包含为扫描线填充器准备的填充子像素,以计算用于覆盖率信息的已设置子像素并对像素进行正常的颜色操作(混合到后置缓冲器中)。这里所使用的直线步进算法是对子像素级别进行分级(stepping)的标准的公知的Bresenham直线算法。
对于各个步骤,将实心圆的4×4像素图像24绘制(利用OR操作)到边缓冲器中。即图11中所示的较暗形状。由于该4×4子像素的形状的偏移并不始终与边缓冲器中的4×4子像素精确地对准,所以边缓冲器需要使用多达四个读-修正-写循环,以将数据沿X和Y方向位移到正确位置。
实现Bresenham算法的逻辑非常简单,并且可以作为边绘制单元中的独立模块来提供。在正常的多边形再现操作中其是空闲的。
图12表示原始的圆形及其偏移位置。左侧图像表示用于将直线“绘制”到边缓冲器中的4×4子像素形状。右侧是向右三步并且向下两步偏移的位图的示例。将整个形状绘制到存储器中需要4次存储器存取。
可以将相同的原理用于绘制大于一个像素的宽度的线,但由于形状与较早绘制的形状的重叠区域将变大,所以效率将显著降低。
图13表示边缓冲器的最终内容,具有如上面所述同时绘制和填充的子像素标线25。下一步骤是混合及组合到后置缓冲器中。
以下是可以在互联网上获得的使用Pascal语言实现的Bresenham直线算法的一个通用示例。在各个时钟周期运行以注释″{Draw the Pixels(绘制像素)}″开始的代码,并且每子像素线运行一次其余的代码。
<pre listing-type="program-listing"><![CDATA[procedure Line(x1,y1,x2,Y2integer;colorbyte); var i,deltax,deltay,numpixels, d,dinc1,dinc2, x,xinc1,xinc2, y,yinc1,yinc2integer; begin {Calculate deltax and deltay for initialisation}deltax=abs(x2-x1); deltay=abs(y2-y1); {Initialize all vars based on which is the independent variable} if deltax>=deltay then begin {x is independent variable} numpixels=deltax+1; d=(2*deltay)-deltax; dinc1=deltay Shl 1; dinc2=(deltay-deltax)shl 1; xinc1=1; xinc2=1; yinc1=0; yinc2=1; endelse begin {y is independent variable} numpixels=deltay+1; d=(2*deltax)-deltay; dinc1=deltax Shl 1; dinc2=(deltax-deltay)shl 1; xinc1=0; xinc2=1; yinc1=1; yinc2=1;end;{Make sure x and y move in the right directions}ifx1>x2 then begin xinc1=-xinc1; xinc2=-xinc2; end; ify1>y2 then begin yinc1=-yinc1; yinc2=-yinc2; end;{Start drawing at} x=x1; y=y1;{draw the pixels} for i=1 to numpixels do beginPutPixel(x,y,color);if d<0 then begind=d+dinc1; x=x+xinc1; y=y+yinc1; end else begind=d+dinc2; x=x+xinc2; y=y+yinc2;end; end;end;]]></pre>后置缓冲器大小在传送到显示模块之前将所有多边形存储在后置缓冲器中,后置缓冲器理想地具有与前置缓冲器相同的大小(以及显示模块分辨率,也就是在任何时候,后置缓冲器的一个像素始终与显示器的一个像素相对应)。但是,在某些构造中,由于大小/成本的原因,不可能具有实际大小的后置缓冲器。
可以在硬件实现之前选择后置缓冲器的大小,其大小始终与前置缓冲器的相同或小于前置缓冲器的大小。如果比前置缓冲器小,则其通常与整个显示器宽度相对应,而只与显示器高度的一部分相对应,如图14所示。在这种情况下,边缓冲器13的大小不需要与前置缓冲器相同。在任何情况下,每个后置缓冲器的像素具有边缓冲器的一个子像素栅格是必需的。
如果如图4所示,后置缓冲器15比前置缓冲器17小,则在多个外部通道中完成再现操作。这意味着例如在主机CPU上运行的软件必须向图形引擎重新传送至少部分数据,这增加了为相同的结果图像传送的数据总量。
图14的示例表示沿垂直方向为前置缓冲器17的1/3的后置缓冲器15。在该示例中,只再现了一个三角形。该三角形在三个通道中再现,在三个步骤中填充前置缓冲器。在将后置缓冲器复制到前置缓冲器之前,完全再现后置缓冲器中的该部分图像的每个细节是重要的。所以,不论最终图像的复杂度(多边形的数量)如何,在该示例的结构中,始终从后置缓冲器向前置缓冲器传送最多三个图像。
无需向图形引擎发送三次主机应用中的包含所有moveto、lineto、curveto命令的完整数据库。只有在图像的当前区域中的命令,或穿过当前区域的顶边或底边的命令是需要的。因此,在图14的示例中,无需发送为顶部区域限定三角形的左下边的lineto命令,因为其不接触第一(顶部)区域。在第二区域中,因为所有的线都接触该区域,所以必须发送所有三个lineto命令。而在第三区域中,不需传送三角形左上边的线。
很明显,虽然不选择要发送的代码,最终结果也将是正确的,但是选择减少了CPU和图形引擎之间的带宽需求。例如,对于在屏幕上再现大量文本的应用,对要再现的各个文本串的限制框的快速检查将导致许多再现命令被快速拒绝。
子图形既然已经示出了较小大小的后置缓冲器的概念及其向前置缓冲器的传送,因而很容易理解如何可以将相似的过程用于再现2D或3D图形或子图形。子图形通常是运动图像,例如游戏中的角色或图标。子图形是被传送到前置缓冲器的限定位置的完整实体。因此,在后置缓冲器比前置缓冲器小的情况下,可以将各个通道中的后置缓冲器内容看作为一个2D子图形。
可以使用多边形再现子图形的内容,或者简单地从CPU传送一位图来再现子图形的内容。
通过设置宽度、高度和XY偏移来表示将后置缓冲器的哪一部分传送到前置缓冲器中的哪个XY位置,可以将2D子图形传送到前置缓冲器。
图14的示例实际上对前置缓冲器再现三个子图形,其中子图形的大小为整个后置缓冲器,并且从上到下移动目的的偏移以覆盖整个前置缓冲器。另外,在图像传送之间再现子图形(后置缓冲器)的内容。
图15表示被复制到前置缓冲器中的两个位置的后置缓冲器中的一个子图形。由于可以设置子图形的宽度、高度和XY偏移,所以可以在后置缓冲器中存储多个不同的子图形,并以任何次序将它们绘制在前置缓冲器中的任何位置,而且可以进行多次而无需将子图形位图从主机上载到图形引擎。这种操作的一个实际示例是在后置缓冲器中存储字体集的各个字符的小位图。然后可以通过从CPU发出图像传送命令将位图文本/字体绘制到前置缓冲器中,其中为各个字母定义源(后置缓冲器)的XY偏移。
图16表示其中再现数以百计的小的2D子图形以模拟小粒子的溅射的示例。
低功率模式除了使时钟无效以外,存在其它的LCD节电模式,该LCD节电模式使得图形装置能够如在此所述那样运行,而通过将颜色分辨率减少为每像素3比特,来降低LCD显示器的功耗。对于各个像素,使红、绿和蓝分量有效或无效。这样使电力的效率更高(对于LCD显示器)。然而,如果将颜色简单地限制为″0″或″1″,则显示质量非常差。为了改善这种情况,可以使用抖动处理。
抖动处理的原则是公知的,并且在许多图形装置中使用。往往在获得的颜色精度(例如,每种颜色m比特)比可以显示的颜色精度(例如,每种颜色n比特)高的情况下使用抖动处理。通过将一些随机数引入颜色值中来进行抖动处理。
使用随机数生成器来产生(m-n)比特的无符号随机数。然后将其添加到原始m比特颜色值中,并将高n比特输入显示器。
在一个简单的实施例中,随机数是根据像素地址的所选比特产生的伪随机数。
图形引擎的硬件实现如图17所示,已实现一种通用的硬件实现。该图表示该实现的内部单元的更详细的方框图。
边绘制电路由图17中所示的边绘制单元以及边缓冲器存储控制器形成。
填充器电路被表示为扫描线填充器,在掩码生成器单元中具有虚拟笔和混合逻辑(用于将子像素混合成对应的像素)。后置缓冲器存储控制器将所混合的像素组合到后置缓冲器中。
“裁剪器”机制用于去除该硬件实现中的不可见的线。其目的在于对多边形边进行裁剪,以使它们的端点始终在屏幕区域内,同时保持线的斜率和位置。这基本上是性能优化模块,并且其功能可以由edgedraw函数中的以下四个“if”语句来实现if(iy<0)continue;if(iy>220*4)continue;if(ix<0)ix=0;if(ix>(176*4))ix=176*4;如果两个端点都位于显示器屏幕区域的同一侧的外部,则不对该边进行处理;否则,对于屏幕区域外部的任何端点,裁剪器计算该边在何处进入屏幕,并仅处理从交叉点开始的边的″可见″部分。
在硬件中,如上所述裁剪端点比丢弃单个子像素更有意义,因为如果该边非常长并且在屏幕外部非常远的地方,则硬件将花费大量的时钟周期而没有产生可用的子像素。这些时钟周期用在裁剪上比较好。
填充横贯单元从边缓冲器读取数据,并将所输入的数据发送给掩码生成器。填充横贯不需要穿过整个子像素栅格。例如它可以仅处理属于包围整个多边形的矩形(限制框)的所有像素。这可以保证掩码生成器接收到多边形的所有子像素。在某些情况下,该限制框与最佳横贯模式相差很远。理想地,填充横贯单元将忽略多边形外部的子像素。存在多种方式用于提高填充横贯单元的智能性,以避免从边缓冲器读取空子像素。这种优化的一个示例是为每条扫描线(或子像素的水平线)存储被发送到边缓冲器的最左侧和最右侧的子像素,然后只在这些左右端之间横贯。
掩码生成器单元仅包含用于输入边缓冲器子像素的填充操作的″虚拟笔″以及计算所得到的覆盖率的逻辑。随后将该数据发送到后置缓冲器存储控制器,以组合到后置缓冲器(颜色混合)中。
下表表示图形引擎内部的各种单元的大致门数,以及与较早描述相关的适当注释。

具体硅实现在图18中示出了更具体的硬件实现,该硬件实现被设计用来优化硅的使用并减小对存储空间的需求。在该示例中,通过只使用缓冲器中的另选(″棋盘格″)位置,可以使整个处理的内存需求减小50%,如上所述并在图6b中示出的。另选地,整个处理可以使用所有的子像素位置。
在图18中的各个方框表示一个硅模块,边缓冲器左边的方框用在第一通道(镶嵌化和线绘制)中,边缓冲器右边的方框用在第二通道(填充多边形颜色)中。下面分别描述各个模块的输入、输出和功能。不具体描述镶嵌功能。
子像素设置器总体上如上所述,该模块设置定义多边形边的子像素。
输入高级图形命令,例如move to和line to命令。
输出多边形边上的子像素的坐标。
功能边绘制单元首先检查各条线,以查看是否需要根据屏幕大小进行裁剪。如果需要裁剪,则将其传送给裁剪单元,并且边绘制单元等待返回所裁剪的线。
随后对各条直线或直线段进行光栅化。根据上述光栅化规则,光栅化生成各个水平子像素扫描线的子像素。
裁剪单元该模块裁剪或者″转换″不能或不在最终显示图像中显示的线。
输入需要进行裁剪的线(例如,屏幕区域外部或期望观看区域外部的线)。
输出经裁剪的线。
功能裁剪单元对期望观看区域(通常为屏幕区域)外部的输入线段进行裁剪。如图19所示,如果线与屏幕的B、C或D侧相交,则该线在屏幕区域外部的部分被去除。相反,如果线穿过A侧,则通过将该点的x坐标设置为0,将屏幕区域外部的部分投影到A侧上。由于必须有使从左到右的填充开始的触发器,所以这确保了可以获得伪边,在第二通道中从该伪边开始进行填充。无论何时执行了裁剪操作,都计算具有新端点的新线段,并将其发送回子像素设置器。在子像素设置器中不存储原始线段。这确保了不会人为地产生裁剪操作的任何错误。
阻断及限制单元该单元以两种模式工作,以使处理最优。第一模式将子像素设置到块中,以使数据处理/存储器访问更加容易。在通过这种方式对整个多边形进行了处理后,第二模式指示将考虑哪些块,以及哪些块将因为它们不包含数据(在限制框之外)而要被忽略。
输入来自子像素设置器的将设置在边缓冲器中的子像素的坐标。
输出模式04×1像素块,其包含要设置在边缓冲器中的子像素。各个像素包含8个子像素(在棋盘格版本中),所以总数为32比特。还输出4×1块的x和y坐标以及用于限制的最小值和最大值。
模式1限制多边形的区域。逐行发送该区域,同时输出所设置的子像素的坐标。
功能阻断和限制单元有两种模式。首先以模式0处理各个多边形。随后该单元切换到模式1以完成该操作。
模式0该单元包含子像素高速缓存。该高速缓存包含4个像素宽1个像素高的区域的子像素以及地址。该高速缓存初始包含零。如果输入的子像素在高速缓存内,则切换高速缓存中的子像素值。如果该子像素在高速缓存外部,则将地址改变为新位置,将高速缓存内容和地址输出到边缓冲器,将高速缓存重置为全零,并且将新高速缓存中与输入的子像素相对应的位置设置为1。
高速缓存与边缓冲器中的块位置相对应。多边形周边可以在块的外部并重新输入块内,在这种情况下,向边缓冲器输出块内容两次,一次用于一条边,一次用于另一条边。
由于输入了子像素,所以计算限定限制区域的低分辨率限制框。例如,将其存储为最小和最大的y值,以及最小和最大x值的表。各个最小值、最大值对与多个像素行相对应。该表可以是固定大小,所以对于较高屏幕分辨率,各个表项与多个像素行相对应。如果多边形向上延伸直至/超过屏幕边缘,则限制框可以穿过该多边形。
模式1模式1获得从限制框的开始到结束的整条线。最后一次刷新高速缓存,并且随后从左到右逐条线地对限制区域进行光栅化。这里,阻断和限制单元输出该区域内的各个4×1像素块的(x,y)地址,并获得该块中将要输出的相关边数据。
MMUMMU(存储器管理单元)是有效的存储器接口。
输入来自阻断和限制单元的高速缓存的子像素边数据(模式0)。
多个4×1块的地址(模式1)来自边缓冲器的要发送到填充覆盖单元(稍后描述)的存储器读取数据。
输出整个多边形的子像素边数据存储器地址和边缓冲器的写入数据功能MMU与边缓冲器存储器相连。与阻断和限制单元的模式0和模式1相对应,存在两种类型的存储器访问。在操作的第一模式(高速缓存操作)中,使用读-修正-写操作,将边子像素数据与边缓冲器的内容进行异或(例如,如果两条线通过相同的块时,这是必需的)。在第二模式中,读取限制框中的边缓冲器的内容并将其输出到填充覆盖单元。
填充覆盖该单元填充多边形,该多边形的边已存储在边缓冲器中。该单元一次两个像素地产生颜色值。
输入来自阻断和限制单元的行信号的终止通过MMU来自阻断和限制单元的坐标成块的边缓冲器数据输出覆盖率值坐标功能该单元将边缓冲器的内容转换为各个像素的覆盖率值。通过填充存储在边缓冲器中的多边形(虽然不恢复所填充的多边形),并随后如图20所示计算各个像素的被填充子像素的数量来进行该转换。
使用″刷子″用来执行该填充操作。这包括4个比特,每个比特用于像素行中的一个子行。逐行进行该填充。对每一行,将刷子初始化为全零。随后逐个子像素地移动该行。在各个位置,如果设置了边缓冲器中的任何一个子像素,则切换该刷子中的对应比特。通过这种方式,将屏幕中的各个子像素限定为″1″或″0″。
该方法可以使用一查找表对各个4×4子像素区域并行工作,该查找表保存刷子比特和子像素区域的值。
在一个实施例中,在各个周期中处理两个完整像素。只需要覆盖率值,因此,稍后计算颜色,并且子像素块中所设置的子像素的位置不再重要,并被有效地丢弃。覆盖率值是为各个像素设置的子像素的数量,范围为0到8。
对于各个像素行,如果在行结束时刷子为全零,则在无需在该行设置另外的像素。如果刷子不是全零,则这表示下述情况多边形的右侧在屏幕外部,并且必须设置当前位置和屏幕右侧之间的所有像素(这里,如前所述,限制框将穿过该多边形)。填充覆盖单元随后进入下述模式其使用当前刷子值继续填充操作直到屏幕的右侧。
始终从上向下地绘制被裁剪到屏幕区域中的线的组合、线,并且不绘制最后的像素意味着不设置子像素的底行。为了防止该操作导致人为缺陷,在填充操作期间,将倒数第二个子像素行有效地复制到底行中。
混合输入来自填充覆盖单元的像素坐标和覆盖率值。
颜色值;其在命令流中单独设置。
输出已在后置缓冲器中的所填充的多边形和其它任何对象。
对于3D场景,通常将多边形从前到后预先排序。这可以通过例如使用画家算法(painter algorithm)转换为z缓冲器中的Z值来进行。反序使得能够具有合适的防混叠功能。每像素覆盖率值已存储在后置(或帧)缓冲器中。在绘制任何多边形之前,将帧缓冲器中的覆盖率值重新设定为零。每次绘制像素,rgb颜色值都乘以覆盖率/8(对于棋盘格结构)并加入到帧缓冲器中的颜色值中。将该覆盖率值加入到帧缓冲器中的覆盖率值中。通过8比特的整数来表示rgb值,所以覆盖率值的1/8与rgb值相乘可能导致舍入误差。为了减少由此引起的人为缺陷的数量,而使用下列算法1.如果帧缓冲器中现有的覆盖率值是8,则像素已被完全覆盖,忽略新的像素。
2.如果总的覆盖率值小于8,则表示像素没有被完全覆盖,颜色=(帧缓冲器中的颜色+1/8x输入颜色)3.如果总覆盖率值是8,则表示像素目前已被完全覆盖,颜色=帧缓冲器中的颜色+最大颜色值-((1-1/8x覆盖率)x输入颜色)4.如果总覆盖率值大于8,则减小新像素的覆盖率值,以使总覆盖率正好为8,并应用前面的情况。
对所有的中间值进行舍入,并表示为8比特的整数。
在这种模式中,不支持非线性眼响应(non-linear eye response)或每多边形阿尔法(透明)的伽马校正(gamma correction)。作为对透明多边形的补充,覆盖率值可以用来选择多个伽马值之一。随后可以将覆盖率和伽马值相乘,以给出5比特的伽马校正阿尔法值。将该阿尔法值与第二每多边形阿尔法值相乘。
光栅化光栅化是将几何表达转换成多边形中的像素(或子像素)的坐标流的处理。
在上述的特定硅中,以3个阶段进行光栅化1.在子像素设置单元、阻断和限制单元模式0和MMU中,将几何形状转换成每子像素表达并存储在边缓冲器中。
2.在阻断和限制模式1中,使用限制区域来进行像素坐标生成的第一阶段。其输出限制区域中所有4×1像素块的地址。注意,这可以包含完全在多边形外部的像素或者甚至4×1像素块。
3.在填充覆盖单元中,将这些4×1像素块和边缓冲器的内容用于产生多边形中的所有子像素的坐标。
图形引擎在具有显示器的电子装置中的位置可以将图形引擎连接到显示模块(具体地为硬件显示驱动器,位于公共总线上由CPU(IC)控制,或者甚至嵌入在存储单元或装置内的其它位置内)。下面的优选实施例不是限制性的,而是示出了具有图形引擎的各种应用。
将图形引擎集成到显示模块中图21的示意图表示显示模块5,其包括根据本发明实施例的图形引擎1,图形引擎1集成在LCD或相应类型显示器8的源IC3中。所示的CPU2远离显示模块5。将该引擎直接集成到源驱动IC中具有特殊的优点。特别地,在同一硅结构内的互连,使该连接比分别封装具有更高的电力效率。此外,不需要特别的I/O缓冲器和控制电路。也不需要分别制造和测试,并且使重量和大小增加最小。
该图表示典型的结构,在该结构中,LCD显示器的源IC也用作为门IC4的控制IC。
图22是包括根据本发明实施例的图形引擎1的显示模块5的示意图,图形引擎1集成在显示模块中,并为LCD或相应类型显示器的两个源IC3服务。可以在图形引擎IC上设置图形引擎,该图形引擎IC将安装在与显示控制IC相邻的显示模块的背面。占用装置壳体内的最小的额外空间,并成为显示模块封装的一部分。
在该示例中,源IC3再次用作为门IC4的控制器。将CPU命令输入图形引擎并在该引擎中分成用于各个源IC的信号。
图23是具有嵌入源驱动IC的显示模块5的示意图,源驱动IC合并有图形引擎及其与CPU、显示区域和选通驱动IC的连接。图中更详细地表示了这些部分之间的通信。源IC(即驱动IC和控制IC)具有用于控制选通驱动器、LCD驱动电路、接口电路和图形加速器的控制电路。接口电路和源驱动(旁路了图形引擎)之间的直接连接使得显示器能够在没有图形引擎的情况下工作。
在与本申请同日提交的国际申请中描述了显示驱动IC、TFT型结构、寻址和定时图、以及源驱动电路中的组件方框的进一步的细节。该申请要求GB 0210764.7的优先权,名称为″Display driver IC,display module andelectrical device incorporating a graphics engine″,在此通过引用将其并入。
当然,本发明不限于单个显示器的类型。对于本领于的技术人员可以知道许多适合的显示器类型。这些都能够进行X-Y(列/行)寻址并仅仅在驱动实现和术语方面与所述文献中的特定LCD实现不同。本发明可以应用于所有的LCD显示器类型,例如STN、非晶TFT、LTPS(低温多晶硅)和LCoS显示器。它还可以用于基于LED的显示器,例如OLED(有机LED)显示器。
例如,本发明的一个特殊应用是由用户佩戴或手持的远程显示器的形式的移动设备的配件。显示器可以通过蓝牙(Bluetooth)或类似的无线协议与该设备连接。
在许多情况下,移动设备本身很小,以致于增加高分辨率的屏幕是不可行的(或不是期望的)。在这种情况下,可以在用户耳机或用户眼镜上的单独的接近眼睛(NTE)的或者其它显示器是特别有优势的。
该显示器可以是LCoS类型,其适于在NTE应用中的可佩戴式显示器。NTE应用使用具有放大器的单个LCoS显示器,使放大器靠近眼睛,以产生放大的虚拟图像。具有这种显示器的具有网络功能的无线装置可以使用户能够将网页作为大的虚拟图像进行观看。
显示器变型及流量的示例显示器描述显示器的分辨率(X*Y)像素为该显示器上的像素数量(=X*Y)16个颜色比特是刷新/绘制整个屏幕的实际数据量(假定用16比特来描述各个像素的属性)帧速率@25MB/S描述显示器每秒刷新的次数,假定数据传输速率为25Mbit/秒Mb/s@15fps表示为保证整个屏幕每秒15次更新所需的数据传输速率。

不同接口的功耗的示例CMADSi/f @25Mb/s0.5mW →20uW/MbCMOSi/f @25MB/S1mW →40uW/Mb下文是说明CPU和显示器之间的总线上的流量降低的4个总线流量示例(注意这些示例只说明总线流量而不说明CPU负荷)。
示例1全屏汉字文本(静态)代表了一种复杂的情况,对于176×240的显示器大小产生42240个像素或84480个字节(16比特/像素=2字节/像素)。假设一个汉字字符为最小16×16像素,这实现了每屏165个汉字字符。一个汉字字符平均由大约223个字节描述,产生总计36855字节的数据量。
字节 84480像素 4224016<--一个汉字的X*YY-像 24015素X-像 17611素5 165<---#全屏汉字显示223<--字节/汉字(SVG)流量 流量位图 SVG84480 36855
在该具体示例中,使用SVG加速器需要传输36K字节,而对于位图刷新(=不使用加速器绘制或刷新整个屏幕),则需要传输84K字节的数据(减少了56%)。
由于SVG的基本属性(可缩放),所以假定字符的数量相同,则不论屏幕分辨率如何,36K字节保持不变。而在位映射系统中不是这种情况,其中流量与像素的数量(x*y)成正比地增长。
示例2动画(@15fps)工作屏幕(165个汉字字符)(显示器176×240)84480 36855fps151267200 552825比特uW 4050.722.1 uW 对于总线40表示40μw/mbit的数据。
CPU到GE的流量为552kbits/s(22uW),而GE到显示器的流量为1267kbits/s(50uW)示例3全屏填充三角形全屏-比特映射(=没有加速器)84480字节数据(屏幕176×240,16比特颜色),-对于SVG加速器只有16字节(减少99.98%)。
示例4动画(@15fps)旋转填充三角形(显示器176×240)8448016fps15 1267200 240比特uW 40 50.7 0.01 uW对于总线40表示40μw/mbit的数据。
CPU到GE的流量为240kbits/s(0.01uW),GE到显示器的流量为1267kbits/s(50uW)最后的示例表示图形引擎在游戏(例如,基于动画Flash(TM Macromedia)的游戏)中使用的适用性。
在具有一体或共享存储器的公共总线上的图形引擎图24表示使用总线连接各个模块的设计,这在片上系统(system-on-a-chip)的设计中是常见的。然而,可以通过独立芯片(IC)之间的外部总线来使用相同的总体结构。在该示例中,存在单个的一体存储器系统。边缓冲器、前置缓冲器和后置缓冲器都使用该存储器的一部分。
各个组件通常具有分配给其专用的存储区域。另外,存储区域可以由多个设备访问,以使得数据能够从一个设备传送到另一个设备。
因为共享存储器,所以在各个时钟周期期间只有一个设备可以访问存储器。因此使用某种形式的判定。当单元需要访问存储器时,向判定器发送请求。如果在该周期中,没有其它的单元正在请求存储器,则立即允许该请求,否则根据某种判定算法,立即或在后续周期中允许该请求。
往往将一体存储器模型改进为包括一个或更多个具有更多专门用途的额外存储器。在大多数情况下,该存储器仍是“一体”的,因为任何模块可以访问该存储器的任何部分,但模块访问本地存储器的速度更快。在下面的示例中,将存储器分为两个部分,一个用于所有与屏幕相关的功能(图形、视频),一个用于其它功能。
虽然在图中示出,但是显然可以将图形引擎组合到CPU模块/IC中以加快向图形引擎的传送命令。
直接存储器存取在图形操作型系统中,通常由CPU来产生要显示的信息。对于CPU来说,可以将图形命令直接传送给图形引擎,但是如果图形设备不能足够快地处理这些命令,则存在使CPU产生延迟的风险。通常的解决方案是将命令写入由图形单元和CPU共享的存储区域中。随后使用直接存储器存取单元(DMA)来读取这些命令并将它们发送给图形单元。该DMA可以是任何设备可用的中央DMA,或者可以与图形单元组合。
当将所有的数据发送到图形引擎时,DMA可以可选地中断CPU以请求更多的数据。在双缓冲器方案中,具有两个相同的存储区域也是常见的。图形引擎处理来自第一存储区域的数据,而CPU向第二存储区域写入命令。图形引擎随后从第二存储区域进行读取,而CPU向第一存储区域写入新命令,等等。
图形引擎在机顶盒应用或游戏控制台中的使用对于机顶盒应用,连接到存储器总线的模块通常包括CPU;mpeg解码器;传输流多路分解器;智能卡接口;控制板接口;PAL/NTSC编码器。也可以具有其它接口,例如磁盘驱动器、DVD播放机、USB/Firewire。如图26所示,图形引擎可以以与其它设备连接相类似的方式连接到存储器总线。
图27表示连接到游戏控制台的存储器总线的模块。这些模块通常包括CPU、游戏操纵杆/游戏键盘接口、音频、LCD显示器和图形引擎。
嵌入在存储器中的图形引擎描述将图形引擎集成到显示IC中的初始应用部分具有取决于用户应用和情况的一些优点和缺点。
如随后所述,也可以在其它领域中实施图形引擎,例如基带(为移动电话或其它便携式设备中的模块,用于控制CPU和所需的大部分或所有数字和模拟处理,可以包含一个或更多个IC)或应用处理器,或者单独的伴随IC(除了基带之外,用于控制附加值功能,例如mpeg、MP3和照片处理)等。由于这些IC通常使用更先进的处理,所以与基带处理进行组合的主要优点是降低成本。成本的进一步降低来自于UMA(一体存储器体系结构)的使用,因为这种存储器已在很大程度上可用。所以不需要另外的封装、组装等。
然而,在基带的情况下,存在的困难是存储器带宽的限制。在显示IC应用中,这不是问题,因为图形引擎可已使用显示IC中的嵌入存储器,该存储器与UMA相分离。为了解决存储器带宽的问题,存在多种可能性,例如使用较高带宽的存储器(DDR=双倍数据速率)或集中分配所述基带中的所使用的存储器。这意味着在UMA中,一些存储器在基带之外,并嵌入了一些集中使用的存储器。其优点在于所需带宽较低,但必须承受对于基带(嵌入式存储器)的高IC成本。
使用外部UMA的另一个问题是UMA的随机访问。在随机访问存储器的情况下,等待时间使整个处理变慢,因此效率很低。为解决该问题,可以将一些本地缓冲器(存储器)加入到基带中,以进行高速缓存,并使用突发模式传送到外部存储器或从外部存储器传送。随着基带模块/IC的硅尺寸的增加,也会有一些负面的影响。
图29表示其中将图形引擎嵌入在存储器中的实施例。在这种情况下,在已存在于电子显示装置中的移动存储器(芯片)中保持图形引擎。这种构造具有许多优点,具体地,由于使用三个缓冲器(边缓冲器、前置缓冲器、后置缓冲器)和双通道方法,使得图形引擎必须频繁地读/写存储器。术语移动表示存储器特别适合于移动设备,该存储器通常为DRAM,其具有对于移动使用的耗能低和其它特征。然而,该示例也可以使用其它存储器,例如在PC行业中普遍使用的存储器。
将图形引擎嵌入存储器中的一些优点如下这种设置减少了来自该体系结构的CPU侧(基带侧)的存储器带宽的需求。GE本地访问移动存储器IC内的存储器。由于它的体系结构,移动存储器IC可以具有一些″空闲″硅区域,由此使得能够低成本地集成GE,否则这些硅区域不被使用。由于移动存储器IC接收命令,所以不需要或需要很少的附加焊盘。因此,可以使用一个(或更多个)命令来命令/控制GE。这与显示IC/传统的情况相似。在基带上的附加I/O以及整个移动IC上的附加部件上上没有附加封装(因为这是存储器的集成部分),因此,对现有(预加速)系统几乎不进行任何物理改变。
嵌入包含任何附加存储器的GE要求该GE具有z缓冲器或任何高级采样缓冲器(在传统的防混叠的情况下)。该体系结构可以完美地与DSP进行组合,以容纳MPEG流,并将其与图形接口(图形周围的窗口中的视频)进行组合。
上述实施例具有下述共同特征没有将图形引擎容纳在单独的IC中,而是集成在已有的、需要所考虑的电子装置的功能所需的IC或模块中。因此,图形引擎可以完全保持在IC或芯片组(CPU、DSP、存储器,片上系统、基带或伴随IC)中,或甚至分开在两个或更多个的已有IC中。
硬件形式的图形引擎有利于减少门数量,并且可以利用任何空闲的硅区域,甚至任何空闲的连接焊盘。这使得图形引擎能够嵌入在存储器(或其它)IC中,而不需要改变存储器IC的物理接口。例如,在将图形引擎嵌入集中使用内存的芯片中(在一个或多个CPU IC中)的情况下,对于存储器IC,可以避免对物理IC接口的任何改变和作为一个整体的母板的布局及设计。图形引擎也可以利用IC中未分配的命令存储空间来执行图形操作。
权利要求
1.一种图形引擎,用于根据所接收的定义多边形的高级图形命令再现显示像素的图像数据,该图形引擎包括边绘制单元,用于读入与单个多边形边相对应的语言的命令语句,以及基于该命令语句将该命令转换成边的空间表达。
2.根据权利要求1所述的图形引擎,其中所述边绘制单元读入一有效命令语句,并立即将其转换成空间表达。
3.根据权利要求1或2所述的图形引擎,其中除了所述多边形边与以前或同时读取并转换的边重叠的情况之外,所述空间表达仅基于所述命令语句。
4.根据前述任一权利要求所述的图形引擎,其中所述边的空间表达为子像素的格式。
5.根据前述任一权利要求所述的图形引擎,其中所述空间表达限定了最终显示像素的位置。
6.根据前述任一权利要求所述的图形引擎,进一步包括边缓冲器,用于所述空间表达。
7.根据权利要求6所述的图形引擎,其中所述边缓冲器为栅格的形式,而且各个单个栅格方块可以在设置值和未设置值之间切换。
8.根据前述任一权利要求所述的图形引擎,其中所述边绘制单元包括控制电路或逻辑,用于在对原始命令进行转换后将其丢弃。
9.根据权利要求6或其任一从属权利要求所述的图形引擎,其中所述图形引擎包括控制电路或逻辑,用于将读入所述引擎的多边形的边依次存储到所述边缓冲器中。
10.根据权利要求6或其任一从属权利要求所述的图形引擎,其中所述边缓冲器将各个多边形边存储为已设置的边界子像素,并且这些边界子像素在所述边缓冲器中的位置与该边在最终图像中的位置相对应。
11.根据前述任一权利要求所述的图形引擎,其中单个多边形边的输入和转换使得能够再现多边形,而不需进行三角形化。
12.根据前述任一权利要求所述的图形引擎,其中各个多边形边的输入和转换使得在获得多边形的所有边数据之前能够开始再现所述多边形。
13.根据前述任一权利要求所述的图形引擎,其中所述图形引擎进一步包括填充器电路或逻辑,用于填充多边形,该多边形的边已由所述边绘制单元进行了存储。
14.根据前述任一权利要求所述的图形引擎,其中所述图形引擎包括后置缓冲器,用于在将所填充的图像传送到显示存储器的前置缓冲器之前,存储该图像的一部分或全部。
15.根据权利要求14所述的图形引擎,其中将所述后置缓冲器中的各个像素映射到所述前置缓冲器的一像素,并且所述后置缓冲器优选地具有与前置缓冲器相同的每像素比特数,以表示各个显示像素的颜色,即RGBA值。
16.根据权利要求14或15所述的图形引擎,其中所述图形引擎包括组合逻辑或电路,用于将来自所述填充器电路或逻辑的各个所填充的多边形组合到所述后置缓冲器中。
17.根据权利要求14到16中的任何一项所述的图形引擎,其中根据所处理的多边形中的像素的颜色、被所述多边形覆盖的像素的百分比、以及所述后置缓冲器中的对应像素中已有的颜色来确定存储在所述后置缓冲器中的各个像素的颜色。
18.根据权利要求6到17中的任何一项所述的图形引擎,其中所述边缓冲器包括栅格形式的子像素,所述栅格具有与各个显示像素相对应的子像素方块数。
19.根据权利要求18所述的图形引擎,其中在所述边缓冲器中每隔一个子像素地利用子像素,以使为各个显示像素提供的子像素方格数减半。
20.根据权利要求7或其任一从属权利要求所述的图形引擎,其中根据边端点计算各条多边形边的斜率,然后沿着所述线设置所述栅格的子像素。
21.根据权利要求7或其任一从属权利要求所述的图形引擎,其中将以下规则用于设置子像素对于各条多边形边,所述子像素栅格的每条水平线仅切换一个子像素;从上到下(沿Y方向)切换子像素;不切换所述线的最后子像素。
22.根据权利要求13或其任一从属权利要求所述的图形引擎,其中所述填充器电路包括用作为横穿子像素栅格的虚拟笔的逻辑,所述笔最初关闭,并在每次遇到已设置的子像素时,在关状态和开状态之间切换。
23.根据权利要求22所述的图形引擎,其中所述虚拟笔设置所述边界子像素内部的所有子像素,并包括右侧边界的边界像素,而清除左侧边界的边界像素,或者相反。
24.根据权利要求22或23所述的图形引擎,其中所述虚拟笔覆盖子像素的一条线以同时填充多个子像素。
25.根据权利要求13、14中的任何一个或其任一从属权利要求所述的图形引擎,其中与显示像素相对应的填充的子像素在组合到所述后置缓冲器之前被混和为单个像素。
26.根据权利要求25所述的图形引擎,其中由所填充的多边形覆盖的各个混合像素的子像素数确定了将混合像素组合到所述后置缓冲器中的混合系数。
27.根据权利要求14或其任一从属权利要求所述的图形引擎,其中在完全再现由所述后置缓冲器为其保存信息的部分显示器上的图像后,将所述后置缓冲器复制到显示存储器的所述前置缓冲器。
28.根据权利要求14或其任一从属权利要求所述的图形引擎,其中所述后置缓冲器的大小与所述前置缓冲器的大小相同,并保存整个显示器的信息。
29.根据权利要求14或其任一从属权利要求所述的图形引擎,其中所述后置缓冲器小于所述前置缓冲器,并且只存储部分显示器的信息,通过一系列外部通道从所述后置缓冲器构建所述前置缓冲器中的图像。
30.根据权利要求29所述的图形引擎,其中仅将与要保存在所述后置缓冲器中的部份图像相关的命令通过各个外部通道发送给所述图形引擎。
31.根据前述任一权利要求所述的图形引擎,其中所述图形引擎还包括曲线镶嵌器,用于在读取并转换所获得的多边形边之前,将任何曲线多边形边分成多个直线段。
32.根据权利要求14或其任一从属权利要求所述的图形引擎,其中调整所述图形引擎,以使所述后置缓冲器可以保存一个或更多个预定的图元,将所述图元传送到所述前置缓冲器中由高级语言确定的一个或更多个位置。
33.根据权利要求6或其任一从属权利要求所述的图形引擎,其中所述图形引擎可以以标线模式工作,在标线模式中,通过在一位图中设置子像素并在所述边缓冲器中的多个位置中存储该位图以形成一直线,来将标线存储在所述边缓冲器中。
34.根据前述任一权利要求所述的图形引擎,其中所述边绘制单元可以并行工作,以同时将多个命令语句转换为空间表达。
35.根据前述任一权利要求所述的图形引擎,包括裁剪单元,用于在读入并转换所获得的在屏幕观看区域内的经裁剪的多边形边之前,对在所期望的屏幕观看区域外部的多边形边的任何部份进行处理。
36.根据权利要求35所述的图形引擎,其中所述裁剪单元删除所期望的屏幕观看区域外部的除了定义多边形填充的起始位置所需的边以外的所有边,在这种情况下,将所述边转换为与相关观看区域的边界一致。
37.根据前述权利要求中的任何一项所述的图形引擎,其中所述边绘制单元包括阻断和/或限制单元,用于通过将所述空间表达分成多个数据块和/或生成与所再现的多边形相对应的限制框,并且不读取该限制框外部的数据,来减少存储空间的使用。
38.根据前述权利要求中的任何一项所述的图形引擎,其中所述图形引擎以硬件实现,并且优选地在规模上少于100K门,更优选地少于50K门。
39.根据前述权利要求中任何一项所述的图形引擎,其中所述图形引擎由软件实现,所述软件将在具有显示器的电子装置的处理器模块中运行。
40.一种电子装置,其包括前述权利要求中的任何一项所述的图形引擎、显示模块、处理器模块、和存储器模块,其中将高级图形命令传送给所述图形引擎以再现显示像素的图像数据。
41.根据权利要求40所述的电子装置,其中所述图形引擎是嵌入在所述存储器模块中的硬件图形引擎。
42.根据权利要求40所述的电子装置,其中所述图形引擎是集成在所述显示模块中的硬件图形引擎。
43.根据权利要求40所述的电子装置,其中所述图形引擎是与总线连接的硬件图形引擎,优选地以一体或共享存储器体系结构的形式。
44.根据权利要求40所述的电子装置,其中所述图形引擎保持在所述处理器模块中,或者在包括处理器模块的基带IC或伴随IC中。
45.一种存储器集成电路,其包含嵌入式图形引擎,其中所述图形引擎使用标准的存储器IC物理接口,并且使用先前未分配的命令空间进行图形处理。
46.根据权利要求45所述的存储器集成电路,其中所述图形引擎为根据前述图形引擎权利要求中的任何一项所述的图形引擎。
47.根据前述电子装置权利要求中的任何一项所述的电子装置,其中所述装置是便携式的。
48.根据前述电子装置权利要求中的任何一项所述的电子装置,其中所述装置具有小面积显示器。
全文摘要
本发明提供了一种图形引擎,用于根据所接收的定义多边形的高级图形命令来再现显示像素的图像数据,该图形引擎包括边绘制单元,用于读入与单个多边形边相对应的语言的命令语句,并基于该命令语句将该命令转换为空间表达。还提供了合并有该图形引擎的电子装置以及具有嵌入式图形引擎的存储器集成电路。
文档编号G09G5/00GK1653487SQ03810585
公开日2005年8月10日 申请日期2003年5月9日 优先权日2002年5月10日
发明者梅托德·科舍利亚, 米卡·图奥米 申请人:比特波伊斯有限责任公司, 日本电气电子株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1