CN101978393A - 用于图形渲染的多阶段细分 - Google Patents
用于图形渲染的多阶段细分 Download PDFInfo
- Publication number
- CN101978393A CN101978393A CN200980109895XA CN200980109895A CN101978393A CN 101978393 A CN101978393 A CN 101978393A CN 200980109895X A CN200980109895X A CN 200980109895XA CN 200980109895 A CN200980109895 A CN 200980109895A CN 101978393 A CN101978393 A CN 101978393A
- Authority
- CN
- China
- Prior art keywords
- curve
- line segment
- segmentation
- vertex
- computing unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/20—Drawing from basic elements, e.g. lines or circles
- G06T11/203—Drawing of straight lines or curves
Abstract
本发明描述一种用于在图形渲染期间细分曲线的多阶段细分技术。明确地说,第一细分阶段将所述曲线细分为第一组线段,所述线段各表示所述曲线的一部分。第二细分阶段将所述曲线的由所述第一组的所述线段中的每一者表示的所述部分进一步细分为若干额外线段,所述额外线段更精细地表示所述曲线的形状。以此方式,所述曲线的在所述第一细分阶段后由仅一个线段表示的每一部分在所述第二细分阶段后由一个以上线段表示。在一些例子中,可执行两个以上细分阶段以细分所述曲线。
Description
技术领域
本发明涉及计算装置,且明确地说,涉及由计算装置进行的图形渲染。
背景技术
计算装置越来越多地需要高级二维(2D)和三维(3D)图形应用程序。举例来说,计算装置越来越多地提供游戏、角色动画、图形菜单系统和其它需要高级图形渲染的应用程序。此高级图形渲染(尤其是对于3D图形)涉及大量数据处理。高级图形渲染的质量可能受到处理资源量、可用处理资源的能力、可用功率量等的限制。
举例来说,需要以高渲染速率(例如,按帧/秒测量)进行的高级图形渲染的应用程序可能会对可用的计算资源造成相当大的负担。对可用计算资源的造成的负担可能会因对计算资源造成的重负荷而导致其它应用程序中的性能降低、低质量的图形渲染或以上两种情况。在移动计算装置(例如个人数字助理(PDA)、无线通信装置、全球定位装置等)的环境下,图形渲染所需要的计算密集的数据处理可能消耗移动计算装置的大量可用功率。
多媒体处理器可包括耦合到图形处理单元(GPU)的通用中央处理单元(CPU)。GPU专用于执行图形渲染操作以将经计算机化的图形显示于显示器上。GPU构建有高度并行的结构,对于一系列复杂图形相关算法来说,所述结构提供比常规的通用CPU更高效的处理。当在CPU上执行的图形相关算法需要图形处理时,CPU细分所述图形,并将细分结果提供给GPU以供渲染到显示器。GPU的高度并行性质允许GPU比用CPU将图像直接绘制到显示器更快地在显示器上创建复杂的三维图像。GPU可用于各种各样的应用,且在图形密集应用(例如视频游戏应用)、复杂图形用户接口应用、用于工程设计或艺术应用的计算机辅助设计程序、或任何其它类型的使用2D或3D图形的软件应用程序中非常常见。
发明内容
本发明描述一种用于在图形渲染期间细分曲线的多阶段细分技术。在至少两个细分阶段中细分所述曲线。第一细分阶段将曲线细分为第一组线段,所述线段各表示所述曲线的一部分。第二细分阶段进一步将所述曲线的由第一组线段中的每一者表示的部分细分为额外线段,所述额外线段更精细地表示所述曲线的形状。以此方式,曲线的在第一细分阶段后由仅一个线段表示的每一部分在第二细分阶段后由一个以上线段表示。在一个实例中,第一细分阶段可(例如)由中央处理单元(CPU)执行,且第二细分阶段可由细分组件执行,所述细分组件例如为图形处理单元(GPU)或专用细分硬件。在一些例子中,多阶段细分技术可涉及两个以上细分阶段。
在一个方面中,一种方法包含:用第一计算单元来细分曲线,以将所述曲线划分为若干第一线段;以及用第二计算单元将所述曲线的由所述第一线段中的一者表示的部分细分为若干第二线段。
在另一方面中,一种装置包含:第一计算单元,其细分曲线,以将所述曲线划分为若干第一线段;以及第二计算单元,其将所述曲线的由所述第一线段中的一者表示的部分细分为若干第二线段。
在另一方面中,一种装置包含:第一装置,其用于细分曲线,以将所述曲线划分为若干第一线段;以及第二装置,其将所述曲线的由所述第一线段中的一者表示的部分细分为若干第二线段。
本发明中所描述的技术可以硬件、软件、固件或其任一组合来实施。如果以软件实施,那么所述软件可在处理器中执行,所述处理器可指代一个或一个以上处理器(例如微处理器)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或数字信号处理器(DSP)或其它等效的集成或离散逻辑电路。包含用以执行所述技术的指令的软件最初可存储在计算机可读媒体内,并由处理器加载和执行。因此,本发明还涵盖计算机可读媒体,其包含用以致使处理器执行本发明中所描述的多种技术中的任一技术的指令。在一些情况下,所述计算机可读媒体可形成计算机程序产品的一部分,所述计算机程序产品可被销售给制造商且/或用于装置中。所述计算机程序产品可包括计算机可读媒体,且在一些情况下,还可包括包装材料。
附图和以下描述中陈述一个或一个以上方面的细节。将从描述内容和图式且从所附权利要求书中明白所述技术的其它特征、目标和优点。
附图说明
图1是说明执行多阶段细分的实例计算装置的框图。
图2是说明一起操作以执行多阶段细分的CPU和GPU的框图。
图3A到图3D是说明曲线的实例两阶段细分的图。
图4A到图4D是说明曲线的另一实例多阶段细分的图。
图5是说明根据本发明中所描述的多阶段细分技术来细分曲线的计算装置的实例操作的流程图。
图6是说明执行细分的顶点着色器的实例操作的流程图。
图7是说明执行多阶段细分的另一实例计算装置的框图。
图8是说明根据本发明中所描述的技术执行细分的实例细分硬件电路的示意图。
图9是说明经配置以作为两个并行的三阶段乘法与累加(MAC)阵列而操作的细分硬件电路的示意图,所述两个阵列各计算一个三次多项式。
图10是说明经配置以作为三个并行的两阶段MAC阵列而操作的细分硬件电路的示意图,所述三个阵列各计算一个二次多项式。
图11是说明根据本发明中所描述的技术来执行细分的计算装置的实例操作的流程图。
具体实施方式
本发明描述用于在图形渲染期间细分曲线的技术。明确地说,本发明描述一种多阶段细分技术,其在两个或两个以上细分阶段期间,将曲线细分为多个线段。第一细分阶段将曲线细分为第一组线段,所述线段各表示曲线的一部分。在一些情况下,第一细分阶段可将曲线细分为足以粗略地表示曲线的形状的线段。在一个实例中,第一细分阶段可由计算装置的第一计算单元执行,所述第一计算单元例如是计算装置的中央处理单元(CPU)或图形处理单元(GPU)。
第二细分阶段进一步将曲线细分为若干额外线段。明确地说,第二细分阶段将曲线的由第一组的线段中的每一者表示的部分细分为若干额外线段,所述额外线段更精细地表示曲线的形状。换句话说,曲线的在第一细分阶段后由仅一个线段表示的每一部分在第二细分阶段后由一个以上线段表示。第二细分阶段可由计算装置的第二计算单元执行。在一些方面中,第二计算单元可为GPU,其专用于执行图形操作,包括第二细分阶段。在一些例子中,GPU可具有高度并行的结构,所述结构可用于并行地细分曲线的多个部分。在另一方面中,第二计算单元可为执行第二细分阶段的专用细分硬件电路。如下文将描述,多阶段细分可包括两个以上细分阶段。
图1是说明根据本发明中所描述的技术来执行多阶段细分的实例计算装置2的框图。计算装置2可包含个人计算机、桌上型计算机、膝上型计算机、计算机工作站、视频游戏平台或控制台、蜂窝式或卫星电话、陆线电话、因特网电话、手持式装置(例如便携式视频游戏装置或个人数字助理(PDA))、个人音乐播放器、视频播放器、电视机、服务器、中间网络装置、大型计算机或另一类型的输出图形信息的装置。
如图1的实例中所说明,计算装置2包括用户输入接口4、CPU 6、装置存储器8、GPU 10、GPU存储器12、显示器接口14和显示器16。用户输入接口4、CPU 6、装置存储器8、GPU 10和显示器接口14可使用总线18进行通信。总线18可为多种总线结构中的任一者,例如第三代总线(例如,超传输总线(HyperTransport bus)或无限频带总线(InfiniBand bus))、第二代总线(例如,高级图形端口总线、外围组件互连(PCI)快捷总线或高级可扩展接口(AXI)总线)或另一类型的总线或装置互连。
CPU 6可包含通用或专用处理器,其控制计算装置2的操作。用户可将输入提供给计算装置2,以致使CPU 6执行一个或一个以上软件应用程序。在CPU 6上执行的软件应用程序可包括文字处理应用程序、电子表格应用程序、媒体播放器应用程序、视频游戏应用程序、图形用户接口应用程序或另一最终用户程序。用户可经由一个或一个以上输入装置(未图示)将输入提供给计算装置2,所述输入装置例如是键盘、鼠标、麦克风、触摸板或另一经由用户输入接口4耦合到计算装置2的输入装置。
装置存储器8可存储装置配置信息,所述信息可在启动或复位时用于配置计算装置2。装置存储器还可存储数据和/或程序模块,所述数据和/或程序模块可由CPU 6立即存取和/或目前正被CPU 6操作。装置存储器8可额外存储来自计算装置2的其它组件的信息,例如由GPU 10输出的信息。装置存储器8可为一个或一个以上易失性或非易失性存储器或存储装置,例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、只读存储器(ROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学存储媒体。
GPU 10可专用于执行图形操作以在显示器16上渲染经计算机化的图形。因此,当在CPU 6上执行的软件应用程序之一需要图形处理时,CPU 6将图形信息提供给GPU 10以供渲染到显示器16。在一些例子中,GPU 10可构建有并行结构,所述并行结构与CPU6相比提供对复杂的图形相关操作的更高效处理。GPU 10的并行性质可允许GPU 10比用CPU 6将图像直接制图到显示器16更快地在显示器16上创建复杂的二维(2D)或三维(3D)图像。在一些例子中,GPU 10可集成到计算装置2的母板中。在其它例子中,GPU 10可存在于安装在计算装置2的母板中的端口中的图形卡上,或可以其它方式并入经配置以与计算装置2互操作的外围装置内。GPU 10可为一个或一个以上处理器(例如一个或一个以上微处理器)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其它等效的集成或离散逻辑电路。
GPU 10可直接耦合到GPU存储器12。因此,GPU 10无需使用总线18即可从GPU存储器12读取数据和将数据写入到GPU存储器12。换句话说,GPU 10可使用局部存储装置(代替芯片外存储器)来在本地处理数据。这通过使GPU 10无需经由总线18读取和写入数据(经由总线18读取和写入数据可能会经历繁重的总线业务)来允许GPU 10以较高效的方式操作。然而,在一些例子中,GPU 10可能并不包括单独的存储器,而是经由总线18利用装置存储器8。GPU存储器12可为一个或一个以上易失性或非易失性存储器或存储装置,例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学存储媒体。
CPU 6和/或GPU 10可将图像信息提供给显示器接口14以用于经由显示器16呈现。在复杂的2D和3D图形的情况下,图像信息通常由GPU 10为显示器16而产生。显示器16可包含监视器、电视机、投影装置、液晶显示器(LCD)、等离子体显示面板、发光二极管(LED)阵列、阴极射线管显示器、电子纸(electronic paper)、表面传导电子发射显示器(SED)、激光电视机显示器、纳米晶体显示器或另一类型的显示单元。显示器16可集成在计算装置2内。举例来说,显示器16可为移动电话的屏幕。或者,显示器16可为经由有线或无线通信链路耦合到计算机装置2的独立装置。举例来说,显示器16可为经由电缆或无线链路连接到个人计算机的计算机监视器或平板显示器。
当在CPU 6上执行的软件应用程序之一想要呈现复杂的2D或3D图形图像时,CPU6与GPU 10一起操作以将图形渲染到显示器16。举例来说,在视频游戏应用程序的情况下,软件应用程序可能想要依次呈现一系列视频帧,以向用户提供视频游戏体验。所述软件应用程序包括定义形成待显示的图形图像的一个或一个以上曲线的命令。例如,在视频游戏应用程序的情况下,所述视频游戏应用程序可包括定义视频游戏的场景的图形图像的曲线的命令。举例来说,所述命令可定义若干曲线,所述曲线界定角色和对象在背景内的边界。
在一个实例中,所述软件应用程序可包括根据如在2005年7月28日的文献“OpenVG规范,版本1.0”中定义的OpenVG来定义多个路径(即曲线)的命令。OpenVG为一组命令,其允许使用一个或一个以上分段命令来指定2D或3D形式的图形图像。根据OpenVG规范,分段命令可定义直线段、贝塞尔(Bezier)曲线段或椭圆弧段。OpenVG的扩展可指定其它类型的片段。因此,本发明的技术不限于OpenVG规范中目前所定义的分段命令。此外,尽管本发明的技术是在OpenVG的背景中进行描述,但所述技术可用于其它图形创作标准的背景中,所述标准例如是OpenGL、Direct3D、图形装置接口(GDI)、Quartz、QuickDraw等。
为了将曲线渲染到显示器16,CPU 6和/或GPU 10使用本发明中所描述的多阶段细分技术将曲线细分为若干线段。在一个方面中,CPU 6可执行第一细分阶段,以将所述曲线划分为若干线段,且GPU 10可执行第二细分阶段,以将所述曲线进一步划分为若干额外线段。在此实例中,在第一细分阶段期间,CPU 6将曲线细分为第一组线段,其粗略表示曲线的形状。所述曲线的线段中的每一者表示曲线的一部分。在第二细分阶段期间,GPU 10将曲线的由所述线段中的每一者表示的部分细分为若干额外线段,所述额外线段更精细地表示曲线的形状。换句话说,曲线的在第一细分阶段后由仅一个线段表示的每一部分在第二细分阶段后由一个以上线段表示。GPU 10可利用并行结构来并行地细分曲线的由两个或两个以上线段表示的多个部分。在一些方面中,以此方式,计算装置2可利用GPU 10的加速能力来完全并行地同时对曲线的多个部分进行操作,从而产生改进的渲染性能。
CPU 6执行的细分的量可依据CPU 6上的处理负荷和/或GPU 10上的处理负荷而变化。如上文所述,CPU 6可一次执行多个软件应用程序,每一软件应用程序均使用CPU6的处理资源来执行计算任务。如果当图形相关应用程序想要进行图形处理时,CPU 6轻微地负担有其它计算任务(例如,当CPU 6的处理负荷小于或等于阈值时),那么CPU6可将曲线细分为较多线段。这将使得GPU 10的细分工作负荷减轻,因为GPU将必须把曲线的若干部分细分为较少的额外线段。
如果当图形相关应用程序想要进行图形处理时,CPU 6较重地负担有其它计算任务(例如,当CPU 6的处理负荷大于阈值时),那么CPU 6可将曲线细分为较小数目的线段。举例来说,当要求CPU 6运行例如使计算机与人类玩家对决的人工智能、计算游戏中的物理效应、提供声效、显示游戏图形等任务的游戏应用程序在CPU 6上执行时,CPU 6可能会负担较重。这将使得CPU 6的细分工作负荷减轻,但增加GPU 10的细分工作负荷,因为GPU 10将必须把曲线的若干部分细分为较多的额外线段。可同样基于GPU 10的负荷或CPU 6与GPU 10上的负荷的组合来平衡细分处理工作负荷。以此方式,计算装置2可依据可用处理资源来动态地平衡CPU 6与GPU 10之间的细分工作负荷。
在另一实例中,曲线的多阶段细分可在GPU 10内发生。在此实例中,CPU 6不执行对曲线的任何细分。代替的是,GPU 10内的第一计算单元执行第一细分阶段,以将曲线划分为若干第一线段,而GPU 10内的第二计算单元执行第二细分阶段,以进一步将曲线的由第一线段表示的部分划分为若干额外线段。在此实例中,计算装置2可利用GPU 10的加速能力在所述两个细分阶段期间完全并行地对曲线的多个部分同时进行操作。
在一些例子中,曲线的多阶段细分可包括两个以上细分阶段。举例来说,第一细分阶段可将曲线细分为第一组线段,所述线段各表示曲线的一部分。在第二细分阶段期间,将曲线的由第一线段中的每一者表示的部分细分为第二组线段,使得曲线的在第一细分阶段之后仅由第一组线段中的一者表示的每一部分在第二细分阶段之后由一个以上线段表示。在第三细分阶段期间,将曲线的由第二线段中的每一者表示的部分细分为若干额外线段。可执行任何数目的细分阶段。细分阶段可由CPU 6、GPU 10和/或专用细分硬件(图1中未说明)执行。
许多其它元件也可包括在计算装置2中,但为说明简单和容易起见,图1中未具体说明。举例来说,计算装置2可包括专用细分硬件,例如下文在图7中详细说明和描述的细分硬件72。此外,图1中所说明的架构只是示范性的,因为本发明中所描述的技术可用多种其它架构来实施。
图2是更详细地说明图1的CPU 6和GPU 10的框图。CPU 6和GPU 10一起操作以使用本发明中所描述的多阶段细分来细分2D或3D图形图像的一个或一个以上曲线。CPU 6包括至少一个在CPU 6上执行的软件应用程序20。在CPU 6上执行的软件应用程序20可为视频游戏应用程序、图形用户接口应用程序、便携式绘图应用程序、可缩放向量图形(SVG)应用程序、用于工程设计或艺术应用的计算机辅助设计程序或另一类型的使用2D或3D图形的软件应用程序。
如上文所述,软件应用程序20可包括定义形成待显示的图形图像的一个或一个以上曲线的命令。所述指令可符合多种图形创作标准(即应用编程接口(API))中的任一者,例如OpenVG、OpenGL、Direct3D、图形装置接口(GDI)、Quartz、QuickDraw等。举例来说,在OpenVG的情况下,曲线由序列分段命令定义。OpenVG的每一分段命令可指定移动、直线段、二次或三次贝塞尔曲线段或椭圆弧段。因此,每一分段命令可定义曲线的一部分。软件应用程序20可包括用以产生任何形状的曲线的分段命令序列。
为了准备用于渲染到显示器16的曲线,CPU 6和/或GPU 10使用本发明中所描述的多阶段细分技术将曲线细分为若干线段。在一个方面中,CPU 6执行第一细分阶段,而GPU 10执行第二细分阶段。软件应用程序20可调用图形API 26,其与GPU驱动程序21交互以致使CPU 6执行第一细分阶段。明确地说,GPU驱动程序21调用GPU驱动程序21内的细分模块22,以在第一细分阶段期间细分曲线。细分模块22可个别地细分曲线的每一片段(即,命令)。换句话说,细分模块22可一次对曲线的一个片段进行操作,以将曲线的所述片段划分为若干线段。在其它例子中,细分模块22可细分整个曲线。因此,本文中所使用的术语“曲线”可指代对象的曲线或曲线的片段。
细分模块22将曲线细分为第一组线段。所述线段中的每一者表示曲线的一部分。在一些例子中,第一组线段可至少近似曲线的大体形状。然而,第一组线段无需提供对曲线形状的高分辨率近似。细分模块22可(例如)将曲线细分为保存曲线的大体形状所需的最小数目的线段。换句话说,细分模块22可细分所述曲线以产生尽可能少的线段,同时仍保留曲线的大体形状。在另一实例中,细分模块22可在CPU 6负担较重时(例如,当CPU 6的处理负荷超出阈值时)不执行曲线的任何细分。代替的是,CPU 6可将曲线信息提供给GPU 10以进行多阶段细分。然而,这导致GPU 10上的工作负荷增加。因此,CPU 6可经配置以平衡CPU 6与GPU 10之间的细分负荷。
为了产生第一组线段,细分模块22计算落在曲线上的一个或一个以上顶点点。细分模块22可(例如)使用对应于特定命令片段的数学表示来产生一个或一个以上顶点点,所述特定命令片段可在图形创作规范(例如,OpenVG)中指定。举例来说,在使用OpenVG定义为椭圆弧曲线的曲线的情况下,细分模块22可使用以下等式来计算顶点点:
x=-a*cos(θ) (1)
y=b*sin(θ), (2)
其中(x,y)为曲线上的顶点点在对象空间中的位置坐标,a为椭圆的半长轴、b为椭圆的半短轴,且0≤θ≤2π。第一组线段中的每一者均为直线段,其将每一顶点点连接到其相邻的顶点点。在一些例子中,细分模块22或CPU 6的其它组件可如关于图7详细描述的那样计算曲线的展开多项式表示。
细分模块22可细分曲线,以将曲线均等划分为第一组线段。举例来说,细分模块22可将曲线均等地划分为N个线段,其中N等于任何正整数值。举例来说,在以上椭圆弧曲线实例中,细分模块22可以步长(θs-θe)/N将θ的值从开始角度θs递增地增加到结束角度θe,以便将椭圆弧曲线均等地划分为N个相等的线段。举例来说,如果椭圆弧曲线是具有开始角度θs=0和结束角度θe=2π的完整椭圆,且N=8,那么细分模块22可产生八个线段,其连接位于θ0=θs=0、θ1=π/4、θ2=π/2、θ3=3π/4、θ4=π、θ5=5π/4、θ6=3π/2、θ7=7π/4、θ8=θe=2π处的顶点点。在其它例子中,细分模块22可自适应地细分曲线,以针对曲线的其中曲线曲率较大的部分,将曲线划分为较多线段,且针对曲线的其中曲线曲率较小的部分,将曲线划分为较少线段。以此方式,步长是非线性的,使得在曲线的曲率越大的地方,细分越密集。再次参考椭圆形曲线实例,细分模块22可基于比率b/a产生θ的步长,使得在θ=0和θ=π附近产生较多线段(即θ的步长较小),且在θ=π/2和θ=3π/2附近产生较少线段(即θ的步长较大)。
GPU驱动程序21的细分负荷控制器24可基于CPU 6的负荷和/或GPU 10的负荷来计算线段数目N。细分负荷控制器24可(例如)从监视CPU 6的负荷的操作系统(未图示)接收关于CPU 6的负荷的数据。因此,CPU 6可监视其自身的工作负荷。细分负荷控制器24可另外监视GPU 10的负荷。因为CPU 6通过将任务发送到GPU 10且监视GPU 10的进程来控制GPU 10,所以细分负荷控制器24可基于发送到GPU 10的命令数目来确定负荷。
细分模块22可使用所产生的线段来产生制图基元列表。细分模块22可(例如)使用线段的顶点点作为用于基元的顶点点的至少一部分来形成制图基元列表。细分模块22可产生许多制图基元中的任一者,包括点、线条带、线环、单独的线、三角形条带、三角形扇、单独的三角形、四边形条带、单独的四边形或其它类型的多边形。
CPU 6可调用图形API 26,以经由GPU驱动程序21将所述制图基元(例如三角形)列表传送给GPU 10。图形API 26可包含一组软件指令,所述指令提供CPU 6与GPU 10之间的接口。明确地说,GPU驱动程序21可制定并发布一个或一个以上命令,所述命令致使GPU 10将制图基元渲染成可显示的图形信息。所述命令可包括基元的顶点点、与基元的每一顶点点相关联的色彩信息、与基元的每一顶点点相关联的纹理信息、基元的缩放信息、基元的旋转信息等。GPU驱动程序21可制定指定要对基元执行的操作的命令。举例来说,GPU驱动程序21可制定指示GPU 10执行曲线的细分和/或渲染的命令。
当GPU 10接收到来自CPU 6的命令时,命令解码器28对命令进行解码,且配置GPU 10的一个或一个以上处理元件以执行命令中指定的操作。命令解码器28可另外存储包含于GPU存储器12中的命令内或GPU 10内的一个或一个以上缓冲区(未图示)内的信息(例如,基元或曲线信息)。命令解码器28可将一组指令加载到GPU 10的处理元件的每一者中,所述指令致使处理元件执行特定的图形处理操作。在图2所说明的实例中,GPU 10的处理元件包括顶点着色器30、几何形状着色器32、光栅化器34和像素着色器36。在一些例子中,GPU 10还可包括专用细分硬件38。其它处理元件也可包括于GPU 10内,但出于说明的简单和容易起见,未在图2中具体说明。
顶点着色器30、几何形状着色器32、光栅化器34和像素着色器36作为图形管线而操作。当作为图形管线而操作时,顶点着色器30对从命令解码器28或GPU存储器12接收到的第一组输入数据执行第一组一个或一个以上图形操作,并将第一组中间结果输出到几何形状着色器32。几何形状着色器32对从顶点着色器30接收到的中间结果执行第二组一个或一个以上图形操作,并将第二组中间结果输出到光栅化器34。当几何形状着色器32执行第二组图形操作时,顶点着色器30对从命令解码器22接收到的第二组初始输入数据执行第一组图形操作。图形处理以类似方式继续,直到产生图形图像以供显示为止。
此外,GPU 10可具有高度并行的结构,与CPU 6相比,所述结构提供对复杂图形相关操作的更高效处理。尽管图2中仅说明一个图形管线,但GPU 10可包括多个类似图形管线,其并行地对多个数据基元进行操作。换句话说,GPU 10可包括多个顶点着色器、几何形状着色器、光栅化器和像素着色器,其可完全并行地对若干数据基元进行操作。因此,在一些例子中,GPU 10的高度并行性质允许GPU 10比用CPU 6将图形图像直接绘制到显示器16更快地在显示器16上产生复杂的2D或3D图形图像。
顶点着色器30一次对单个顶点进行操作。顶点着色器可经配置以接收定义单个顶点的一个或一个以上顶点属性的序列。常规顶点属性包括位置属性、普通属性、一个或一个以上色彩属性、一个或一个以上纹理属性、一个或一个以上明暗分布属性等。此外,顶点着色器30可经配置以依据顶点着色器30正被用于的图形操作而接收一个或一个以上定制顶点属性。在一些例子中,可用于定义每一顶点的顶点属性的数目可限于属性的特定最大数目。
顶点着色器30可对顶点执行许多图形操作。举例来说,顶点着色器30可经配置以将输入顶点变换到不同坐标系中。明确地说,顶点着色器30将作为输入而被接收的顶点的位置属性从对象坐标空间变换到装置坐标空间。对象坐标空间表示图形图像如何由软件应用程序20的指令定义。装置坐标空间表示图形图像将如何显示在装置(例如显示器16)上。顶点着色器30可(例如)使用仿射运算(例如旋转、平移、按比例缩放等)来变换顶点坐标。在一个实例中,顶点着色器30可使用以下等式来变换顶点坐标:
其中(X′,Y′,1)是在装置坐标空间内的顶点位置,(X,Y,1)是在对象坐标空间内的顶点位置,Scale_x是沿x轴的比例缩放因子,Scale_y是沿y轴的比例缩放因子,Rotate_x是围绕x轴的旋转,Rotate_y是围绕y轴的旋转,Trans_x是沿x轴的平移,且Trans_y是沿y轴的平移。这些变量可在软件应用程序20的指令中指定,经由图形API 26提供给GPU 10,且在顶点着色器30内由命令解码器28配置。
在一些例子中,顶点着色器30可对曲线计算一次转换。换句话说,顶点着色器30可计算等式的用于定义曲线的变换,而不是计算针对路径中的每个顶点点的变换。在上述椭圆弧曲线实例的情况下,顶点着色器30可变换曲线以将变换后的椭圆弧曲线的数学表示定义为:
x′=xt-a*cos(θ)*Sf (4)
y′=yt+b*sin(θ)*Sf, (5)
其中(x′,y′)是在装置坐标空间内的位置坐标,xt是沿x轴的平移,yt是沿y轴的平移,且Sf是变换的比例因子。等式(4)和(5)假定顶点着色器30仅平移和按比例缩放所述曲线(即,曲线不旋转)。在一些例子中,代替顶点着色器30,CPU 6可执行变换。
顶点着色器30可对输入顶点属性执行许多其它操作。顶点着色器30可执行一个或一个以上操作,以改变顶点的色彩属性中的一者或一者以上、顶点的纹理属性中的一者或一者以上、顶点的明暗分布属性中的一者或一者以上,等等。顶点着色器30可经配置以便以相同方式改变每个顶点,或仅改变具有某些特性的顶点。因此,顶点着色器30可经配置以对一个顶点执行一组操作,且接着经重新配置以对下一顶点执行不同的一组操作。
几何形状着色器32对基元而不是个别顶点点进行操作。几何形状着色器32接收一串顶点点(或定义顶点点的属性)且形成基元。在三角形基元的情况下,几何形状着色器32可输入三组顶点属性,其定义三角形基元的三个顶点点。在一些情况下,几何形状着色器32可另外输入邻近基元的顶点点的顶点属性。几何形状着色器32可丢弃基元,或使用输入基元的顶点点的顶点属性产生一个或一个以上新基元。在一些情况下,GPU10可不包括几何形状着色器32。
光栅化器34基于顶点属性将由几何形状着色器32或顶点着色器(在无几何形状着色器32的情况下)输出的基元转换成像素。光栅化器34可对基元执行裁剪操作,并为像素着色器36准备基元。光栅化器34可确定屏幕内的哪些像素在对象的几何形状内,且因此需要绘制。此外,光栅化器34执行顶点数据的内插以产生像素数据。光栅化器34的输出被提供给像素着色器36。像素着色器36(有时称为断片着色器)对将显示于显示器16上的每一像素执行图形操作。像素着色器36可(例如)执行每像素纹理化、雾化和上色操作,以产生要显示于每一像素位置处的色彩值。
根据本发明的技术,GPU 10可经配置以执行至少第二细分阶段,以便将曲线细分为若干额外线段。举例来说,着色器30、32或36可执行第二细分阶段,以便将曲线的由来自CPU 6的线段表示的部分再分为更准确地表示曲线的所述部分的若干额外线段。作为另一实例,专用细分硬件38可执行第二细分阶段,以便将曲线的由来自CPU 6的线段表示的部分再分为更准确地表示曲线的所述部分的若干额外线段。在任一情况下,第二细分阶段均导致曲线的由CPU 6产生的线段中的每一者所表示的部分被再分为第二组更详细的线段(或子片段)。着色器30、32或36或细分硬件38将原始曲线细分为若干额外线段。换句话说,着色器30、32或36或细分硬件38并不将CPU 6所产生的线段划分为若干额外线段,而是划分为由软件应用程序20定义的实际曲线。以此方式,曲线的在第一细分阶段之后仅由一个线段表示的每一部分在第二细分阶段之后由一个以上线段表示。额外线段产生对曲线的较佳表示,例如对曲线的较高分辨率表示。
着色器30、32或36或细分硬件38可基于在变换期间执行的按比例缩放的量而执行第二细分阶段。明确地说,着色器30、32或36或细分硬件38将曲线的由线段中的每一者表示的部分细分为的额外线段的数目是比例因子的函数。比例因子是在将顶点点从对象坐标空间变换到装置坐标空间期间发生的按比例缩放的量的近似值。CPU 6可计算比例因子,并将其提供给GPU 10的一个或一个以上组件,以用于确定用于第二细分阶段的额外线段的数目。CPU 6可使用多种不同技术中的任一种来计算比例因子。所述技术可产生比例因子的不同值,但所有的所得值均大体表示变换期间执行的按比例缩放的量。CPU 6可使用变换矩阵来计算比例因子。举例来说,CPU 6可将比例因子计算为Scale_x与Scale_y(即在坐标空间的变换期间使用的比例缩放变量)的相乘。在另一实例中,CPU 6可将比例缩放因子计算为Scale_x和Scale_y的最大值。在3D的情况下,CPU 6可通过视口比例因子和/或变换矩阵来计算比例因子。
着色器30、32或36或细分硬件38随比例因子的增加而将曲线的由线段表示的部分再分为更多的额外线段。因此,可依据比例因子而计算曲线的每一部分被细分为的额外线段(或子片段)的数目M。依据比例因子来再分曲线的所述部分允许着色器30、32或36或细分硬件38在曲线被严重按比例缩放时保留曲线的较多细节,同时在曲线未被按比例缩放或仅被轻微地按比例缩放时允许曲线的较少细节。以此方式,本发明中所描述的多阶段细分技术允许适应于图形图像的分辨率要求的动态细分。当需要高分辨率(例如,较大的按比例缩放)时,着色器30、32或36或细分硬件38较多地细分曲线,而当高分辨率不必要(例如,较少按比例缩放或无按比例缩放)时,着色器30、32或36或细分硬件38较少地细分曲线,且节省了GPU的处理资源。因此,本发明的技术并不是将曲线过度细分以确保质量,而是基于按比例缩放来按需要产生额外线段。因此,并不经由图形管线发送额外线段,因此通过以更高效的方式利用计算资源而改进管线性能和功率消耗。
将曲线的每一部分细分为的额外线段或子片段的数目可被作为全局常数而加载到着色器30、32或36或细分硬件38中。着色器30、32或36或细分硬件38将曲线的由CPU 6提供的线段中的一者所表示的部分细分为M个额外线段。由着色器30、32或36或细分硬件38产生的M个额外线段表示对原始曲线的进一步细分。因此,不是用CPU6产生的单个线段表示曲线的所述部分,而是由M个线段来表示曲线的所述部分。同样,所述M个子片段表示原始曲线的细分,而不是由CPU 6提供的线段的细分。以此方式,着色器30、32或36或细分硬件38进一步近似所述曲线,而不是进一步近似由CPU 6提供的线段。
关于由上述等式(1)和(2)定义的椭圆弧曲线,着色器30、32或36或细分硬件38可将曲线的由来自CPU 6的线段中的一者表示的部分划分为若干额外线段。举例来说,着色器30、32或36或细分硬件38可将曲线的与从位于θ0=0处的顶点到位于θ1=π/4处的顶点的线段对应的部分划分为M个额外线段。举例来说,如果M=4,那么着色器30、32或36或细分硬件38将曲线的从位于θ0=0处的顶点到位于θ1=π/4处的顶点的部分进一步细分为四个额外线段。明确地说,在此实例中,着色器30、32或36或细分硬件38可产生四个额外线段,其连接位于θ00=θ0=0,θ01=π/16,θ02=π/8,θ03=3π/16,θ04=θ1=π/4处的顶点点。可在如上述等式(4)和(5)中提供的变换之后,使用椭圆形曲线的数学表示来计算所述四个额外线段的顶点点。
GPU 10可用类似方式完全并行地细分曲线的由CPU 6产生的其它七个线段44所表示的其它曲线部分。因此,GPU 10同时对曲线的多个部分执行第二细分阶段。以此方式,计算装置2可利用GPU 10的并行结构来完全并行地对曲线的由CPU 6产生的线段中的其它线段所表示的部分执行第二细分阶段。此做法使得GPU加速对曲线的细分,从而改进渲染性能。
在一个例子中,几何形状着色器32可执行对曲线的多个部分的第二细分阶段。如上文所述,几何形状着色器32一次对多个顶点(例如,基元)进行操作,而不是对个别顶点进行操作。由此,几何形状着色器32可输出多个顶点点,从而在单个步骤中将曲线的部分细分为M个额外线段。在一些情况下,几何形状着色器32可经配置以使得将曲线的每一不同部分划分为不同数目的额外线段,且因此可基于曲线的部分的形状动态地细分曲线的所述部分。更详细地参看图3描述使用几何形状着色器32将曲线的所述部分细分为若干额外线段。
在另一例子中,顶点着色器30可执行对曲线的若干部分的第二细分阶段。举例来说,当GPU 10不包括几何形状着色器32时,可能会是这种情况。如上文所述,顶点着色器30一次对单个顶点进行操作,且因此通常无法产生额外顶点。然而,顶点着色器30可经配置以输入一个或一个以上定制顶点属性,以执行第二细分阶段。明确地说,顶点着色器30可经配置以使得经输入以定义顶点的顶点属性实际上定义线段而不是线段的单个顶点。以此方式,顶点着色器30可被视为输入“虚拟顶点”,因为其实际上并不表示单个顶点。举例来说,顶点着色器30可经配置以输入包括线段的开始顶点属性和结束顶点属性的顶点属性。开始顶点属性表示线段开始于的顶点,且结束顶点属性表示线段结束于的顶点。顶点着色器30对开始顶点属性和结束顶点属性进行操作,以将曲线的所述部分细分为若干额外线段。参看图4更详细描述使用顶点着色器30将曲线的所述部分细分为若干额外线段的实例。
在另一例子中,像素着色器36可执行对曲线的若干部分的第二细分阶段。与顶点着色器30一样,像素着色器36一次对单个像素进行操作。因此,像素着色器36经配置以输入一个或一个以上定制像素属性,其定义线段而不是线段的单个像素。像素着色器36产生进一步定义额外线段的额外像素属性。
在另一例子中,细分硬件38可执行对曲线的若干部分的第二细分阶段。细分硬件38可(例如)包括一个或一个以上乘法与累加(MAC)运算单元以执行第二细分阶段。在一个例子中,细分硬件38可由MAC运算单元的管线化阵列形成,所述MAC运算单元可配置以如下文详细描述那样计算不同次数的多项式。在此情况下,细分硬件38输入来自CPU 6的多项式系数以及沿曲线的至少一个位置(将再所述位置处产生顶点点)。沿曲线的将产生顶点点的位置可(例如)在贝塞尔曲线的情况下为值t,或在椭圆弧曲线的情况下为值θ。细分硬件38的MAC运算单元对多项式系数进行运算,以在特定位置处产生顶点点的一个或一个以上坐标。细分硬件38的操作大体上类似于下文详细描述的细分硬件电路72的操作。
尽管上文所描述的多阶段细分是分布于CPU 6与GPU 10之间,但多阶段细分可在GPU 10内执行且/或分布于GPU 10与专用细分硬件(例如图7中所说明的细分硬件72)之间。因此,CPU 6不必执行对曲线的任何细分。代替地,GPU 10内的第一计算单元执行第一细分阶段,以将曲线划分为若干线段,而第二计算单元与GPU 10执行第二细分阶段,以进一步将曲线划分为若干额外线段。举例来说,细分可在顶点着色器30、几何形状着色器32、像素着色器36和细分硬件38的任一组合之间或在那些组件与专用细分硬件(例如细分硬件72)之间划分。
尽管上文将多阶段细分技术描述为包括两个阶段,但多阶段细分技术可包括两个以上阶段。举例来说,多阶段细分可包括:第一细分阶段,其可将曲线细分为第一组线段;第二细分阶段,其将曲线的由第一组线段中的每一者表示的部分细分为第二组线段;以及第三细分阶段,其将曲线的由第二组线段中的每一者表示的部分细分为额外线段。可执行任一数目的细分阶段。细分阶段可分布于CPU 6、顶点着色器30、几何形状着色器32、像素着色器36和/或细分硬件38、72(图7)中的任一者之间。
图2中说明的架构仅是示范性的,因为本发明中所描述的技术可用多种其它架构来实施。举例来说,GPU 10可利用单个着色器核心,其可执行归于顶点着色器30、几何形状着色器32和像素着色器36的功能。单个着色器核心可(例如)基于图形操作所处的管线的级而由命令解码器28配置以用作顶点着色器30、几何形状着色器32和像素着色器36。作为另一实例,细分硬件38可不位于GPU 10内,而是作为计算装置2(图1)的单独组件,且如图7中所说明经由总线18耦合到GPU 10。此外,图1中所说明的特征可通过硬件和/或软件组件的任一合适组合来实现。
图3A到图3D是说明曲线40的实例两阶段细分的图。图3A说明如由软件应用程序20(图2)定义的曲线40。曲线40被定义为以下四个贝塞尔曲线段的序列:从点A到点B的第一贝塞尔曲线段42A、从点B到点C的第二贝塞尔曲线段42B、从点C到点D的第三贝塞尔曲线段42C以及从点D返回到点A的第四贝塞尔曲线段42D。为了将曲线40渲染到显示器16,CPU 6和/或GPU 10使用本发明所描述的多阶段细分技术将曲线40细分为若干线段。如上文所述,在一些方面中,CPU 6的细分模块22可一次细分曲线40的一部分。在图3B到图3D所说明的细分的实例中,CPU 6和/或GPU 10细分贝塞尔曲线段42A。CPU 6和/或GPU 10可用类似方式来细分贝塞尔曲线段42B到42D。
图3B说明曲线40的由点A与点B之间的贝塞尔曲线段42A定义的部分。贝塞尔曲线段42A可由软件应用程序20定义为使用参数表示来定义的多项式曲线。明确地说,贝塞尔曲线段42A可表示为(x(t),y(t))形式的点集合,其中x(t)和y(t)是t的多项式,且t从0到1连续变动。图3中所说明的贝塞尔曲线段42A是三次贝塞尔曲线段,其可在对象坐标空间中由以下等式表示:
x(t)=xs*(1-t)3+3*(1-t)2*t*xc1+3*(1-t)*t2*xc2+t3*xe (6)
y(t)=ys*(1-t)3+3*(1-t)2*t*xc1+3*(1-t)*t2*yc2+t3*ye, (7)
其中(xs,ys)是贝塞尔曲线段42A的开始点,(xe,ye)是贝塞尔曲线段42A的结束点,且(xc1,yc1)和(xc2,yc2)是两个内部控制点。
第一计算单元将贝塞尔曲线段42A(即,曲线40的位于点A与点B之间的部分)细分为多个线段44A到44G(统称为“线段44”)。图3C说明由第一计算单元细分之后的贝塞尔曲线段42A。在一个例子中,执行第一细分阶段的第一计算单元可为CPU 6的细分模块22。在其它例子中,第一计算单元可为着色器30、32或36或细分硬件38中的一者。在图3C所说明的实例中,第一计算单元将贝塞尔曲线段42A细分为七个线段44。明确地说,第一计算单元使用上述等式(6)和(7)来计算沿贝塞尔曲线段42A的顶点点。
当第一计算单元为细分模块22时,细分负荷控制器24可配置细分模块22以依据CPU 6的负荷、GPU 10的负荷或其组合而将曲线细分为特定数目的线段。细分负荷控制器24可(例如)在CPU 6的负荷小于或等于阈值时增加细分模块22所产生的线段的数目,且在CPU 6的负荷超出阈值时减少线段的数目。在图3C所说明的实例中,细分负荷控制器24配置细分模块22,以将贝塞尔曲线段42A细分为七个线段44。细分负荷控制器24可配置细分模块22,以使用上述细分负荷平衡技术将贝塞尔曲线段42A细分为更多线段或更少线段。在图3C的实例中,线段44粗略地表示曲线(即贝塞尔曲线段42A)的形状。
为了将贝塞尔曲线段42A细分为若干线段44,第一计算单元计算开始点(xs,ys)(其等于顶点点A0)与结束点(xe,ye)(其等于顶点点A7)之间的一个或一个以上顶点点。为了这样做,第一计算单元可使用表示贝塞尔曲线段42A的等式(即等式(6)和(7))来计算A0(即A)与A7(即B)之间的顶点点。在图3C所说明的实例中,第一计算单元计算顶点点A1到A6。A0和A7是已知的,因为其分别等于开始点(xs,ys)和结束点(xe,ye)。
第一计算单元接着将贝塞尔曲线段42A表示为所产生的顶点点之间的多个线段44。明确地说,第一计算单元将贝塞尔曲线段42A表示为从顶点点A0(其与图3A和图3B的点A相同)到顶点点A1的线段44A、从顶点点A1到顶点点A2的线段44B、从顶点点A2到顶点点A3的线段44C等等。
在图3C所说明的实例中,第一计算单元将贝塞尔曲线段44A均等地划分为若干线段44。换句话说,第一计算单元以恒定的步长递增地增加t。然而,在一些例子中,第一计算单元可使用自适应细分技术,基于曲线的形状(即,针对每一线段以不同步长)来细分贝塞尔曲线段44A。举例来说,第一计算单元可在曲线的曲率较大(例如,在所述实例中的顶点点A5与A7之间)时以较小的步长递增t,而在曲线的曲率较小(例如,在点A0与A5之间)时以较大的步长递增t。
不作任何进一步细分而渲染线段44可能会对贝塞尔曲线42A的一些部分(尤其是在顶点点A5与A7之间)导致不良图像质量。这在曲线被放大到高分辨率时(例如,在由GPU 10变换到装置坐标空间中期间应用大比例因子时)尤其如此。因此,第二计算单元执行第二细分阶段,以将贝塞尔曲线段42A细分为若干额外线段。第二计算单元可(例如)为着色器30、32或36或细分硬件38中的一者。如下文将更详细地描述,第二细分阶段细分贝塞尔曲线段42A的由线段44表示的部分而不是实际上细分线段44。出于实例目的,将根据细分贝塞尔曲线段42A的由线段44A表示的部分来描述将贝塞尔曲线段42A细分为若干额外线段。然而,第二计算单元可用类似方式完全并行地细分线段44B到44G。
在执行第二细分阶段之前,GPU 10的顶点着色器30或CPU 6将曲线从对象坐标空间变换到装置坐标空间。顶点着色器30或CPU 6可(例如)使用上述等式(3)来变换定义曲线的点,而不是转换每一线段的每一顶点点。顶点着色器30或CPU 6可将开始点(xs,ys)、结束点(xe,ye)和内部控制点(xc1,yc1)和(xc2,yc2)变换到装置坐标空间(x′s,y′s)、(x′e,y′e)、(x′c1,y′c1)和(x′c2,y ′c2)中。以此方式,贝塞尔曲线42A的所述部分被变换到装置坐标空间中,且可定义为:
x′(t)=x′s*(1-t)3+3*(1-t)2*t*x′c1+3*(1-t)*t2*x′c2+t3*x′e (8)
y′(t)=y′s*(1-t)3+3*(1-t)2*t*x′c1+3*(1-t)*t2*y′c2+t3*y′e, (9)
在变换之后,第二计算单元执行第二细分阶段,以将贝塞尔曲线段42A的由线段44A(即,贝塞尔曲线段42A的从Ao到A1的部分)表示的部分细分为若干额外线段。贝塞尔曲线段42A的由线段44A表示的部分是贝塞尔曲线段42A的在顶点点A0与A1之间的部分。在图3D所说明的实例中,第二计算单元将贝塞尔曲线段42A的在顶点点A0与A1之间的部分细分为四个线段。明确地说,第二计算单元在顶点点A0与A1之间产生顶点点A01、A02和A03。第二细分阶段使得贝塞尔曲线段42A在顶点点A0与A1之间的部分由四个线段而不是仅单个线段表示,因此相对于曲线的部分提供更多细节。如图3D所说明,在第二细分阶段期间产生的额外线段提供对曲线(尤其是在顶点点A5与A7之间)的较佳表示。
在一个方面中,第二计算单元将曲线的由所述线段中的每一者表示的部分细分为的额外线段的数目可为比例因子的函数。第二计算单元随比例因子的增加而将曲线的由线段44表示的部分再分为更多的额外线段。依据比例因子而再分曲线的所述部分允许第二计算单元在曲线被严重按比例缩放时保留曲线的较多细节,同时在曲线未被按比例缩放或仅被轻微按比例缩放时允许曲线的较少细节。
所述技术可以相似方式应用于OpenVG中所定义的其它曲线,例如根据等式(1)和(2)定义的椭圆弧曲线,或包括(xs,ys)处的开始点、结束点(xe,ye)和控制点(xc,yc)且可在对象坐标空间中定义如下的二次贝塞尔曲线:
x(t)=xs*(1-t)2+2*(1-t)*t*xc+t2*xe; (10)
y(t)=ys*(1-t)2+2*(1-t)*t*yc+t2*ye。 (11)
此外,可配合通过任何扩展而添加到OpenVG标准的任何曲线定义而利用所述技术。同样,可使用所述技术来细分使用其它图形创作标准定义的曲线。
图4A到图4D是说明曲线的多阶段细分的实例的图。图4A说明在点A与点B之间的贝塞尔曲线段42A。如上文参看图3所述,可在对象坐标空间中由上述等式(6)和(7)表示贝塞尔曲线段42A。
第一计算单元将贝塞尔曲线段42A(即,曲线40的位于点A与点B之间的部分)细分为多个线段44A到44G(统称为“线段44”)。在一个例子中,执行第一细分阶段的第一计算单元可为CPU 6的细分模块22。在其它例子中,第一计算单元可为着色器30、32或36或细分硬件38中的一者。图4B说明由第一计算单元细分之后的贝塞尔曲线段42A。在图4B所说明的实例中,第一计算单元计算顶点点A0到A7以将贝塞尔曲线段42A细分为七个线段44A到44G,其使顶点点中的每一者与相邻顶点点连接。
如上文在图3A到3D中所述,不作任何进一步细分而渲染线段44可能会对贝塞尔曲线42A的至少一些部分(尤其是在顶点点A5与A7之间)导致不良图像质量。因此,第二计算装置执行第二细分阶段,以将贝塞尔曲线段42A细分为若干额外线段。出于实例目的,将参看细分贝塞尔曲线段42A的由线段44A表示的部分来描述将贝塞尔曲线段42A细分为若干额外线段。然而,第二计算单元可用类似方式完全并行地细分贝塞尔曲线段42A的由线段44B到44G表示的部分。
在执行第二细分阶段之前,顶点着色器30或GPU 10或CPU 6的某一其它组件将贝塞尔曲线段42A从对象坐标空间变换到装置坐标空间,以产生在上文等式(10)和(11)中定义的数学表示。在变换到装置坐标空间中之后,第二计算单元执行第二细分阶段,以将贝塞尔曲线段42A的由线段44A(即,贝塞尔曲线段42A的从A0到A1的部分)表示的部分细分为若干额外线段。
举例来说,在顶点着色器30的情况下,顶点着色器30可经配置以输入实际上定义线段而不是线段的单个顶点的顶点属性。举例来说,顶点着色器30可经配置以输入包括分别表示线段开始的顶点和结束的顶点的线段的开始顶点属性(例如A0)和结束顶点属性(例如A1)的顶点属性。顶点着色器30可计算位于顶点A0与A1之间的至少一个额外顶点。如上文所述,可用于定义每一顶点的顶点属性的数目可限于属性的特定最大数目。因此,顶点着色器30可仅能够在单遍中计算有限数目的额外顶点点。图4C说明在第二细分阶段之后的贝塞尔曲线段42A。在图4C所说明的实例中,顶点着色器30可仅能够计算表示新顶点点A01的一个额外顶点属性。因此,顶点着色器30可仅将贝塞尔曲线42A的部分细分为一组额外的线段。然而,在其它例子中,顶点着色器30可在每遍计算一个以上额外顶点属性。
在一些情况下,最大数目的可用顶点属性可足以完全细分贝塞尔曲线段42A的所述部分。然而,如果最大数目的可用顶点属性不够,那么顶点着色器30可以递归方式(即,通过执行第三细分阶段)计算更多额外线段。换句话说,顶点着色器30可以递归方式(即,第二细分阶段后接第三细分阶段)执行一个以上细分阶段。举例来说,在第二细分阶段之后,顶点着色器30可输入新的一组顶点属性,其包括表示在第二细分阶段期间产生的线段的开始顶点属性A0和结束顶点属性A01。顶点着色器30在第三细分阶段期间计算顶点A0与A01之间的至少一个额外顶点。图4D说明在由顶点着色器30进行的第三细分阶段之后的贝塞尔曲线段42A。在图4D所说明的实例中,顶点着色器30现在已将贝塞尔曲线段42A的在A0与A1之间的部分细分为四个线段而不是一个线段。以此方式,顶点着色器30可以递归方式将曲线的所述部分细分为若干额外线段,其提供对曲线42A(尤其是在顶点点A5与A7之间)的较佳表示。尽管在上述实例中顶点着色器30执行第二和第三细分阶段,但GPU 10的其它计算单元也可执行第二和第三细分阶段。举例来说,第二和第三细分阶段可由顶点着色器30、几何形状着色器32、像素着色器36和细分硬件38的任一组合执行。
图5是说明根据本发明中所描述的多阶段细分技术来细分曲线的计算装置的实例操作的流程图。计算装置2的第一计算单元将曲线细分为若干第一线段(50)。为了产生第一组线段,第一计算单元计算位于曲线上的一个或一个以上顶点点。所述第一计算单元可(例如)使用曲线的数学表示(例如,曲线的多项式表示)来产生一个或一个以上顶点点。所述第一线段将顶点点中的每一者连接到相邻的顶点点。线段中的每一者表示曲线的一部分。在一个实例中,第一计算单元可为CPU 6的细分模块22。在此情况下,细分负荷控制器24可基于CPU 6上的处理负荷和/或GPU 10上的处理负荷而控制由细分模块22执行的细分的量。在另一实例中,第一计算单元可为GPU 10的组件中的一者(例如,着色器30、32或36或细分硬件38中的一者)。
第一计算单元将线段提供给第二计算单元(52)。举例来说,当第一计算单元是细分模块22时,细分模块22可使用线段的顶点点来产生制图基元的列表,并将所述制图基元经由图形API 26和GPU驱动程序21提供给GPU 10。细分模块22可产生许多制图基元中的任一者,包括点、线条、线环、单独的线、三角形条带、三角形扇、单独的三角形、四边形条带、单独的四边形或其它类型的多边形。
第一或第二计算单元将曲线从对象坐标空间变换到装置坐标空间(54)。举例来说,GPU 10的顶点着色器30可使用上文的等式(3)将曲线变换到装置坐标空间中。所述变换可每曲线计算一次。换句话说,可在用于定义曲线的点中的每一者处计算变换,而不是计算针对路径中的每个顶点点的变换。第一或第二计算单元计算表示在变换中执行的按比例缩放的量的比例因子(56)。可基于在变换中所使用的比例缩放变量(例如,等式(3)的Scale_x和Scale_y)来计算所述比例因子。
第二计算单元执行第二细分阶段,以将曲线的所述部分细分为若干额外线段(58)。第二计算单元可(例如)为GPU 10的组件中的一者。因此,GPU 10计算由第一计算单元计算的每一线段的顶点点中的每一者之间的额外顶点点。可(例如)在变换之后使用曲线在装置坐标空间内的数学表示来计算额外的顶点点。GPU 10因此以若干线段而不是由第一计算单元产生的单个线段来表示曲线的由第一计算单元产生的线段所表示的部分中的每一者。以此方式,由GPU 10执行的第二细分阶段产生曲线的额外线段以更准确地表示所述曲线。在一些例子中,针对曲线的若干部分而产生的额外线段的数目可为比例因子的函数,使得随着比例因子增加,计算更多的额外线段以保留更多细节。
GPU 10可使用一个或一个以上着色器(例如,顶点着色器30、几何形状着色器32或像素着色器36)来执行第二细分阶段。GPU 10的着色器可并行地细分曲线的一个以上部分。因此,GPU 10同时对曲线的多个部分执行第二细分阶段。这样做使得GPU加速对曲线的细分,从而改进渲染性能。在其它例子中,GPU 10内的细分硬件38可执行第二细分阶段。在其它例子中,GPU 10外部的细分硬件可执行第二细分阶段,例如图7的细分硬件72。在执行第二细分阶段之后,GPU 10使用经细分的线段来将曲线渲染到显示器(59)。尽管将图5的流程图描述为两阶段细分,但所述技术可经扩展而包括两个以上细分阶段。
图6是说明执行细分的着色器(例如图2的顶点着色器30)的实例操作的流程图。像素着色器36可使用类似技术将曲线细分为若干额外线段。顶点着色器30输入定义线段的多个顶点属性(60)。举例来说,顶点着色器30可输入顶点属性,其包括表示线段开始于的顶点点的位置坐标的开始顶点属性(例如A0)和表示线段(其表示顶点)结束于的顶点点的位置坐标的结束顶点属性(例如A1)。以此方式,由顶点着色器30输入的顶点属性表示一线段而不是单个顶点点。
顶点着色器30计算顶点A0与A1之间的额外顶点点的坐标,以将曲线细分为额外线段(62)。顶点着色器30可将额外顶点点计算为另一顶点属性。顶点着色器30可(例如)在变换之后使用曲线在装置坐标空间中的数学表示来计算顶点点A0与A1之间的额外顶点点的坐标。顶点着色器30确定顶点着色器30是否已将曲线的所述部分细分为所要数目(M)的额外线段(64)。
如果顶点着色器30在第一遍期间产生的所要线段数目小于M,那么顶点着色器30确定是否已达到最大顶点属性数目(66)。如上文所述,顶点属性的数目可限于特定的最大顶点属性数目。因此,顶点着色器30可仅能够在单遍中计算有限数目的额外顶点点。
如果尚未达到最大顶点属性数目,那么顶点着色器30计算额外顶点点的另一坐标(62)。然而,如果已达到最大顶点属性数目,那么顶点着色器30输出所计算的顶点属性(68)。顶点着色器30可输入表示在第一遍期间产生的额外线段中的一者的新的一组顶点属性(60)。换句话说,最大数目的可用顶点属性不足以产生足够的额外顶点点来完全细分曲线的所述部分。顶点着色器30可因此以递归方式(即,通过执行一个以上细分阶段)来计算更多的额外线段。
如果在第一遍期间产生的所要线段数目大于或等于M,那么顶点着色器30输出所计算的顶点属性(68)。换句话说,最大数目的可用顶点属性足以产生足够的额外顶点点来完全细分曲线的所述部分。顶点着色器30接着输入表示由CPU 6产生的另一线段的多个顶点属性(60)。
图7是说明根据本发明中所描述的技术来执行细分的另一实例计算装置70的框图。图7的计算装置70大体上类似于图1的计算装置2,区别仅在于图7的计算装置70不包括GPU 10。代替地,计算装置70包括专用细分硬件电路72,其如下文详细描述那样执行第二细分阶段。图形渲染功能可由CPU 6而不是GPU 10执行。
如上文详细描述,为了将曲线渲染到显示器16,CPU 6执行第一细分阶段以将曲线划分为第一组线段,其各表示曲线的一部分。明确地说,CPU 6计算沿曲线的定义线段的顶点点。CPU 6可使用与曲线类型相关联的等式来计算顶点点,例如在椭圆弧曲线的情况下使用等式(1)和(2)、在三次贝塞尔曲线的情况下使用等式(6)和(7)或在二次贝塞尔曲线的情况下使用等式(10)和(11)来计算顶点点。CPU 6在第一细分阶段期间执行的细分的量可依据CPU 6上的处理负荷而变动。CPU 6可包括图2所说明的CPU 6的所有特征。
在第二细分阶段期间,细分硬件电路72将曲线的由线段中的每一者表示的部分细分为若干额外线段,所述额外线段更精细地表示曲线的形状。细分硬件电路72可(例如)包括一个或一个以上乘法与累加(MAC)运算单元,以执行第二细分阶段。在一个例子中,细分硬件电路72可由MAC运算单元的管线化阵列形成,所述MAC运算单元可配置以如下文详细描述那样计算不同次数的多项式。在此情况下,细分硬件72输入来自CPU 6的多项式系数和沿曲线的至少一个位置(将在所述位置处产生顶点点)。沿曲线的待产生顶点点的位置可(例如)在贝塞尔曲线的情况下为值t,或在椭圆弧曲线的情况下为值θ。细分硬件电路72的MAC运算单元对多项式系数进行运算,以产生特定位置处的顶点点的一个或一个以上坐标。
CPU 6可计算曲线的展开多项式表示,以确定待加载到细分硬件电路72内的多项式系数。换句话说,CPU 6可将曲线表示为展开的多项式p(x):
p(x)=∑(Ki*xi), (12)
其中Ki是多项式的第i次项的多项式系数,x是变量,i=0、1、…、n-1、n,且n是多项式的次数。CPU 6可使用多项式展开来计算曲线的展开多项式表示。举例来说,CPU 6可对等式(10)和(11)执行多项式展开,以将二次贝塞尔曲线的展开多项式表示计算为:
px(t)=P2x*t2+P1x*t+P0x, (13)
py(t)=P2y*t2+P1y*t+P0y, (14)
其中P2x、P1x、P0x、P2y、P1y和P0y是定义为P2x=(xs-2*xc+xe)、P1x=2*(xc-xs)、P0x=xs、P2y=(ys-2*yc+ye)、P1y=2*(yc-ys)和P0y=ys的多项式系数。在其它例子中,CPU 6可使用许多多项式近似算法中的任一者来计算多项式表示。在使用等式(1)和(2)定义的椭圆弧曲线的情况下,CPU 6可使用泰勒(Taylor)展开、最小平方近似或另一近似技术来计算多项式表示。举例来说,CPU 6可通过用多项式S2*θ2+S1*θ+S0近似表示sin(θ)且用C2*θ2+C1*θ+C0近似表示cos(θ)来计算椭圆弧曲线的展开多项式表示,其中S2、S1、S0、C2、C1和C0是使用特定近似技术计算的多项式系数。
此外,CPU 6可根据上述等式(3)将曲线从对象坐标空间转换到装置坐标空间。CPU 6可在计算曲线的多项式表示之前或在计算曲线的多项式表示之后,将曲线从对象坐标空间变换到装置坐标空间。如上文所述,CPU 6可每曲线计算所述变换一次。换句话说,CPU 6可计算用于定义曲线的点中的每一者处的变换,而不是计算针对沿曲线的每个顶点点的变换。举例来说,在二次贝塞尔曲线的情况下,CPU 6可计算开始点(xs,ys)、结束点(xe,ye)和控制点(xc,yc)的变换,而不是计算针对第一组线段的所计算的顶点点中的每一者的变换。在其它例子中,细分硬件电路72或计算装置70的某一其它组件可执行所述变换。
在变换期间,CPU 6可确定比例因子,其近似在变换期间执行的按比例缩放的量。在一些例子中,在第二细分阶段期间发生的细分的程度可为比例因子的函数。举例来说,CPU 6可基于比例因子来计算将曲线的每一部分细分为的额外线段的数目。在CPU 6计算出将曲线的每一部分细分为的额外线段的数目之后,CPU 6确定沿曲线的所述部分的将产生新顶点点的位置。举例来说,对于椭圆形曲线的从θ0=0到θ1=π/4的将划分为四个额外线段的部分来说,CPU 6可确定需在位置θ01=π/16、θ02=π/8、θ03=3π/16处计算新顶点,以将曲线的从θ0=0到θ1=π/4的部分均等地划分为四个额外线段。
CPU 6为细分硬件电路72提供用于曲线的展开多项式表示的多项式系数和曲线上将产生顶点点坐标的一个或一个以上位置。在上述椭圆弧曲线实例中,曲线上将产生新顶点点的坐标的位置是值θ01、θ02和θ03或对所述值的十进制近似。CPU 6可将所计算的多项式系数和位置直接加载到细分硬件电路72中,或将指针编程到细分硬件电路72中,在此情况下,细分硬件电路72加载多项式系数和位置。在任一情况下,基于正被细分的曲线的类型而将多项式系数和位置动态地加载到细分硬件电路72中。
如下文将详细描述,细分硬件电路72使用CPU 6所指定的多项式系数和位置来计算指定位置处的顶点点的坐标。以此方式,计算装置70可使用细分硬件电路72将细分工作负荷的一部分从CPU 6卸载到细分硬件电路72。在一些例子中,细分硬件电路72可(例如)在CPU 6正经历高处理负荷时执行所有的细分。细分硬件电路72可将顶点点的坐标输出到CPU 6,CPU 6可执行额外图形渲染操作以将曲线呈现在显示器16上。或者,CPU 6或细分硬件电路72可将新的顶点点存储在装置存储器8中以供稍后处理。在细分硬件电路72位于GPU 10内的例子(例如图2所说明的例子)中,细分硬件电路72可将顶点点的坐标输出到GPU 10的其它组件,例如顶点着色器30、几何形状着色器32或像素着色器36。
许多其它组件也可包括于计算装置70内,但为说明简单和容易起见,图7中未具体说明。举例来说,计算装置70可包括GPU(例如图1的GPU 10),其经由总线18耦合到其它组件。此外,图7所说明的架构只是示范性的,因为本发明中所描述的技术可配合多种其它架构来实施。
图8是说明根据本发明中所描述的技术来执行细分的实例细分硬件电路72的示意图。细分硬件电路72包括多个寄存器82(图8中标记为“REG”)、多个多路复用器84(图8中标记为“MUX”)、多个乘法运算单元86和多个累加运算单元88。乘法运算单元86后接累加运算单元88组成MAC运算单元,其由虚线89说明。细分硬件电路72包含布置成管线的可配置MAC阵列。因此,除了最后一个MAC运算单元的输出(其为所产生的顶点坐标)以外,每一MAC运算单元的输出均为对后续MAC运算单元的输入。
MUX 84为细分硬件电路72提供可配置性。明确地说,MUX 84可经配置以输出两个输入中的一者。由实线表示的对MUX 84中的每一者的输入对应于所述MUX 84将传递通过的输入。换句话说,以实线展示的输入中的每一者的值是MUX 84中的每一者将分别输出的值。由虚线表示的对MUX 84中的每一者的输入对应于MUX 84将不传递通过的输入。如参看图9和图10更详细地描述,因此可通过改变将由MUX 84传递通过的MUX输入来配置细分硬件电路72。
图8中所说明的细分硬件电路72是六阶段可配置MAC阵列,其可经配置以计算至多达六次多项式。细分硬件电路72可被配置成多个较短管线,其计算较小次数的多项式。举例来说,图8所说明的六阶段可配置MAC阵列可经配置以作为各计算一个三次多项式的两个并行三阶段MAC阵列(图9)、各计算一个二次多项式的三个并行两阶段MAC阵列(图10)等而操作。以此方式,细分硬件电路72可经配置以在细分处理期间提供硬件加速,从而得到改进的渲染性能。尽管被说明为六阶段可配置MAC阵列,但细分硬件电路72可包括更多或更少的可配置管线化MAC阶段。
可基于正被细分的曲线的类型而在运行时间动态地重新配置细分硬件电路72。举例来说,当细分二次贝塞尔曲线或椭圆弧曲线(其被表示为二次多项式)时,CPU 6可配置细分硬件电路72以使其作为三个并行的两阶段MAC阵列而操作。当细分三次贝塞尔曲线(其被表示为三次多项式)时,CPU 6可配置细分硬件电路72以使其作为两个并行的三阶段MAC阵列而操作。
细分硬件电路72从CPU 6接收多项式系数P0到P6以用于计算顶点点。多项式系数可为用于计算顶点点的x坐标的多项式系数,或用于计算顶点点的y坐标的多项式系数。在其中细分硬件电路72作为一个以上多阶段MAC阵列而操作的例子中,多项式系数可为用于计算顶点点的x坐标和y坐标的多项式系数。如上文所述,CPU 6计算多项式系数P0到06,并将所计算的多项式系数P0到P6提供给细分硬件电路72。CPU 6可将所计算的多项式系数P0到P6直接加载到细分硬件电路72中,或将指针编程到细分硬件电路72中,在此情况下,细分硬件电路72加载多项式系数P0到P6。在任一情况下,均基于正被细分的曲线的类型而动态地加载多项式系数P0到P6。
此外,CPU 6为细分硬件电路72提供与沿曲线的将产生顶点点的位置对应的输入(I)。在使用OpenVG定义的椭圆弧曲线的情况下,所述输入可为特定值θ。在使用OpenVG定义的贝塞尔曲线的情况下,所述输入可为特定值t。细分硬件电路72使用多项式系数P0到P6对所述输入执行各种乘法与累加运算,以计算输出(O)。所述输出表示由所述输入识别的沿曲线的位置处的顶点点的坐标(例如,x坐标或y坐标)。细分硬件电路72输出以下形式的六次多项式:
O=P6*I6+P5*I5+P4*I4+P3*I3+P2*I2+P1*I+P0。 (15)
细分硬件电路继续接收沿曲线的输入位置以及多项式系数,直到细分硬件电路72计算出所产生的所要数目的线段的顶点点为止。举例来说,对于椭圆形曲线的从θ0=0到θ1=π/4的将划分为四个额外线段的部分来说,CPU 6可为细分硬件电路72提供输入θ01=π/16、θ02=π/8、θ03=3π/16以产生顶点点,以用于将曲线的从θ0=0到θ1=π/4的部分均等地划分为四个额外线段。
图9是说明经配置以作为两个并行的三阶段MAC阵列而操作的细分硬件电路72的示意图,所述两个阵列各计算一个三次多项式。明确地说,前三个MAC运算单元作为输出以下形式的第一三次多项式的第一三阶段MAC阵列而操作:
O0=P3*I0 3+P2*I0 2+P1*I0+P0。 (16)
后三个MAC运算单元作为输出以下形式的第二三次多项式的第二三阶段MAC阵列而操作:
O1=P6*I1 3+P5*I1 2+P4*I1+P0′。 (17)
细分硬件电路72使用输入I0和I1以及多项式系数P0、P0′、P1、P2、P3、P4、P5和P6来计算两个坐标。在一个例子中,细分硬件电路72可计算定义位置I处的顶点点的两个坐标。换句话说,细分硬件电路72可计算定义位置I处的顶点点的x坐标和y坐标(即,(x,y))。在此情况下,输入I0和I1相等,且多项式系数P0、P1、P2和P3与用于计算x坐标的多项式的多项式系数对应,且多项式系数P0′、P4、P5和P6与用于计算y坐标的多项式的多项式系数对应。
在其它例子中,细分硬件电路72可计算与不同顶点点对应的两个坐标。举例来说,细分硬件电路72可计算两个x坐标,其表示位于沿曲线的不同位置I0和I1处的两个顶点点的x坐标。在此情况下,I0与I1不相等,且多项式系数P0、P1、P2和P3以及多项式系数P0′、P4、P5和P6均与用于计算x坐标的多项式的多项式系数对应。在计算顶点点的x坐标之后,细分硬件72输入与顶点点的y坐标相关联的系数,且计算沿曲线的各种位置I的顶点点的y坐标。在任一情况下,细分硬件电路72均在细分过程期间通过在单遍中输出顶点点的两个坐标值而提供硬件加速。
图10是说明经配置以作为三个并行的两阶段MAC阵列而操作的细分硬件电路72的示意图,所述三个阵列各计算一个二次多项式。明确地说,第一对MAC运算单元作为输出以下形式的第一二次多项式的第一两阶段MAC阵列而操作:
O0=P2*I0 2+P1*I0+P0。 (18)
第二对MAC运算单元作为输出以下形式的第二二次多项式的第二两阶段MAC阵列而操作:
O1=P3*I1 2+P4*I1+P0′。 (19)
最后一对MAC运算单元作为输出以下形式的第三二次多项式的第二三阶段MAC阵列而操作:
O2=P6*I2 2+P5*I2+P0″。 (20)
细分硬件电路72使用输入I0、I1和I2以及多项式系数P0、P0′、P0″、P1、P2、P3、P4、P5和P6来计算三个坐标。如上文所述,细分硬件电路72可计算与不同顶点点对应的三个坐标。举例来说,细分硬件电路72可计算三个x坐标,其表示位于沿曲线的不同位置I0、I1和I2的三个顶点点的x坐标。在此情况下,I0、I1和I2不相等,且多项式系数P0、P1、P2;多项式系数P0′、P3和P4以及多项式系数P0″、P5和P6各与用于计算x坐标的二次多项式的多项式系数对应。在计算顶点点的x坐标之后,细分硬件72输入与顶点点的y坐标相关联的系数,且计算沿曲线在I0、I1和I2处的顶点点的y坐标。
或者,细分硬件电路72可计算沿曲线的顶点点的x坐标和y坐标二者的组合。换句话说,细分硬件电路72可计算在沿曲线的各个位置I处的两个x坐标和一y坐标或两个y坐标和一x坐标。在此情况下,输入I0和I1相等,且多项式系数P0、P1和P2与用于计算x坐标的多项式的多项式系数对应,且多项式系数P0′、P3和P4与用于计算y坐标的多项式的多项式系数对应。另一方面,I2不同于I0和I1,且多项式系数P0″、P5和P6可为x坐标或y坐标的多项式系数。在任一情况下,细分硬件电路72均在细分过程期间通过在单遍中输出顶点点的三个坐标值而提供硬件加速。
图11是说明根据本发明所描述的技术来执行细分的计算装置的实例操作的流程图。软件应用程序20调用CPU 6的细分模块22以将曲线细分为第一组线段(90)。为了产生第一组线段,细分模块22计算位于曲线上的一个或一个以上顶点点。细分模块22可(例如)使用曲线的数学表示来产生一个或一个以上顶点点。所述线段将所述顶点点中的每一者连接到相邻的顶点点。所述线段中的每一者表示曲线的一部分。
CPU 6计算曲线的展开多项式表示(92)。CPU 6可(例如)通过用多项式S2*θ2+S1*θ+S0近似表示sin(θ)且用多项式C2*θ2+C1*θ+C0近似表示cos(θ)来计算根据等式(1)和(2)定义的椭圆弧曲线的展开多项式表示。以下提供展开多项式表示。
px(θ)=P2x*θ2+P1x*θ+P0x, (21)
py(θ)=P2y*θ2+P1y*θ+P0y, (22)
其中P2x、P1x、P0x、P2y、P1y和P0y是定义为P2x=-a*C2、P1x=-a*C1、P0x=-a*C0、P2y=b*C2、P1y=b*C1和P0y=b*C0的多项式系数。
此外,CPU 6可将曲线从对象坐标空间变换到装置坐标空间(94)。CPU 6可在计算曲线的多项式表示之前或在计算曲线的多项式表示之后变换到装置坐标空间。如上文所述,CPU 6可每曲线计算所述变换一次。换句话说,CPU 6可计算用于定义曲线的点中的每一者处的变换,而不是计算针对沿曲线的每个顶点点的变换。例如在二次贝塞尔曲线的情况下,CPU 6可计算开始点(xs,ys)、结束点(xe,ye)和控制点(xc,yc)的变换,而不是计算针对第一组线段的所计算的顶点点中的每一者的变换。在其它例子中,细分硬件电路72或计算装置70的某一其它组件可执行所述变换。
在变换期间,CPU 6可确定比例因子(其近似在变换期间执行的按比例缩放的量)(96)。CPU 6基于所述比例因子而确定第二细分阶段的额外线段的数目(98)。明确地说,CPU 6可确定第二细分阶段随比例因子的增加而将曲线的由线段表示的部分再分为更多的额外线段。在CPU 6计算出将曲线的每一部分细分为的额外线段的数目之后,CPU6确定沿曲线的所述部分的将产生新的顶点点的位置(100)。举例来说,对于椭圆形曲线的从θ0=0到θ1=π/4的将划分为四个额外线段的部分来说,CPU 6可确定需在位置θ01=π/16、θ02=π/8、θ03=3π/16处计算新顶点,以将曲线的从θ0=0到θ1=π/4的部分均等地划分为四个额外线段。
CPU 6配置细分硬件电路72以细分所述曲线(102)。CPU 6可(例如)为细分硬件电路72提供曲线的展开多项式表示的多项式系数。CPU 6可将所计算的多项式系数直接加载到细分硬件电路72中,或将指针编程到细分硬件电路72内,在此情况下,细分硬件电路72加载多项式系数和位置。在任一情况下,均基于正被细分的曲线的类型(例如,椭圆弧曲线、二次贝塞尔曲线、三次贝塞尔曲线等)将多项式系数动态地加载到细分硬件电路72中。
CPU 6为细分硬件电路72提供识别沿曲线的将产生一个或一个以上顶点点的坐标的位置的一个或一个以上输入(104)。如上文所述,细分硬件电路72可经配置以作为各计算顶点点的一坐标的两个并行三阶段MAC阵列(图9)而操作,或经配置以作为各计算顶点点的一坐标的三个并行两阶段MAC阵列(图10)而操作。细分硬件电路可经配置以计算一个以上顶点点的x坐标、一个以上顶点点的y坐标、同一顶点点的x坐标和y坐标,或其组合。
CPU 6接收由细分硬件72计算的一个或一个以上坐标(106)。CPU 6确定是否存在要为顶点点计算的更多坐标(108)。当存在要为顶点点计算的更多坐标时,CPU 6继续配置细分硬件电路102,并提供用于计算额外坐标的输入。当不存在要计算的更多坐标时,CPU 6使用经细分的线段将曲线渲染到显示器(110)。
本文中所描述的技术可以硬件、软件、固件或其任一组合来实施。描述为模块或组件的任何特征可在集成逻辑装置内一起实施,或作为离散但可互操作的逻辑装置单独实施。在一些情况下,各种特征可实施为集成电路装置,例如集成电路芯片或芯片组。如果以软件实施,那么所述技术可至少部分地由计算机可读媒体实现,所述计算机可读媒体包含在被执行时实施上述方法中的一者或一者以上的指令。计算机可读媒体可形成计算机程序产品(其可包括包装材料)的一部分。计算机可读媒体可包含随机存取存储器(RAM)(例如同步动态随机存取存储器(SDRAM))、只读存储器(ROM)、非易失性随机存取存储器(NVRAM)、电可擦除可编程只读存储器(EEPROM)、快闪存储器、磁性或光学数据存储媒体等。所述技术另外或替代地可至少部分地由计算机可读通信媒体实现,所述媒体携载或传送呈指令或数据结构的形式且可被计算机存取、读取和/或执行的代码。
所述代码可由一个或一个以上处理器执行,所述处理器例如为一个或一个以上DSP、通用微处理器、ASIC、现场可编程逻辑阵列FPGA或其它等效集成或离散逻辑电路。因此,本文中使用的术语“处理器”可指代前述结构中的任一者,或任何其它适合实施本文中所描述的技术的结构。此外,在一些方面中,本文中描述的功能性可提供于经配置以用于细分图形图像的专用软件应用程序或硬件模块内。因此,本发明还涵盖包括用以实施本发明所描述的技术中的一种或一种以上技术的电路的多种集成电路装置中的任一者。此电路可提供于单个集成电路芯片中或多个可互操作的集成电路芯片中。
已描述了各种方面。这些和其它方面均在所附权利要求书的范围内。
Claims (42)
1.一种方法,其包含:
用第一计算单元细分曲线以将所述曲线划分为若干第一线段;
用第二计算单元将所述曲线的由所述第一线段中的一者表示的部分细分为若干第二线段。
2.根据权利要求1所述的方法,其进一步包含:
将所述曲线从第一坐标空间变换到第二坐标空间,其中
细分所述曲线的由所述第一线段中的一者表示的所述部分包含基于变换所述曲线时所使用的比例因子,用所述第二计算单元将所述曲线的由所述线段中的一者表示的所述部分细分为所述第二线段。
3.根据权利要求2所述的方法,其中基于所述比例因子将所述曲线的由所述第一线段中的一者表示的所述部分细分为若干第二线段包含在所述比例因子增加时,将所述曲线的由所述第一线段中的一者表示的所述部分细分为较大数目的第二线段。
4.根据权利要求1所述的方法,其进一步包含基于所述第一计算单元的至少一负荷,动态地平衡由所述第一计算单元执行的对所述曲线的细分的量。
5.根据权利要求4所述的方法,其中基于所述第一计算单元的负荷而动态地平衡由所述第一计算单元执行的对所述曲线的细分的所述量包含在所述第一计算单元的所述负荷高于阈值时,细分所述曲线以将所述曲线划分为较少的第一线段。
6.根据权利要求1所述的方法,其中所述第一计算单元包含中央处理单元(CPU),且所述第二计算单元包含图形处理单元(GPU),其中用所述GPU来细分所述曲线的由所述第一线段中的一者表示的所述部分包含细分所述曲线的由所述第一线段中的第一者表示的第一部分,所述方法进一步包含并行地细分所述曲线的由所述第一线段中的第二者表示的第二部分。
7.根据权利要求6所述的方法,其中细分所述曲线的由所述第一线段中的所述第一者和第二者表示的所述第一和第二部分中的每一者包含用所述GPU的着色器单元细分所述曲线的由相应第一线段表示的相应部分。
8.根据权利要求7所述的方法,其中所述着色器包含顶点着色器,所述方法进一步包含:
用所述顶点着色器接收多个顶点属性,所述多个顶点属性包括指定所述第一线段中的一者的顶点点的至少两个顶点属性;以及
产生表示位于所述曲线的由所述第一线段中的所述一者表示的所述部分上的额外点的额外顶点属性,以将所述曲线的所述部分细分为所述第二线段。
9.根据权利要求1所述的方法,其中所述第二计算单元包含专用细分硬件,且细分所述曲线的由所述第一线段中的一者表示的所述部分包含:
接收至少一个输入;以及
基于所述至少一个输入而产生对应于所述第二线段中的一者的至少一顶点点的至少一个坐标。
10.根据权利要求9所述的方法,其中所述细分硬件包括多个乘法与累加运算单元的管线,且产生所述至少一个顶点点的至少一个坐标包含实施所述曲线的多项式表示,以基于所述至少一个输入而产生对应于所述第二线段中的所述一者的所述顶点点的至少一个坐标。
11.根据权利要求10所述的方法,其进一步包含配置所述多个乘法与累加运算单元的所述管线,使得所述细分硬件作为各自产生顶点点的坐标的两个或两个以上并行管线而操作。
12.根据权利要求1所述的方法,其中第一计算单元是图形处理单元(GPU)的第一组件,且所述第二计算单元是所述GPU的第二组件。
13.根据权利要求1所述的方法,其进一步包含渲染所述第二线段以将所述曲线呈现给显示器。
14.根据权利要求1所述的方法,其进一步包含用所述第一计算单元、所述第二计算单元和第三计算单元中的一者将所述曲线的由所述第二线段中的一者表示的部分细分为若干第三线段。
15.一种装置,其包含:
第一计算单元,其细分曲线以将所述曲线划分为若干第一线段;
第二计算单元,其将所述曲线的由所述第一线段中的一者表示的部分细分为若干第二线段。
16.根据权利要求15所述的装置,其中所述第一和第二计算单元中的一者将所述曲线从第一坐标空间变换到第二坐标空间,且所述第二计算单元基于变换所述曲线时所使用的比例因子,将所述曲线的由所述第一线段中的一者表示的所述部分细分为所述第二线段。
17.根据权利要求16所述的装置,其中所述第二计算单元在所述比例因子增加时,将所述曲线的由所述第一线段中的所述一者表示的所述部分细分为较大数目的第二线段。
18.根据权利要求15所述的装置,其中所述第一计算单元基于所述第一计算单元的至少一负荷,动态地平衡由所述第一计算单元执行的对所述曲线的细分的量。
19.根据权利要求18所述的装置,其中所述第一计算单元在所述第一计算单元的所述负荷高于阈值时,细分所述曲线以将所述曲线划分为较小数目的第一线段。
20.根据权利要求15所述的装置,其中所述第一计算单元包含中央处理单元(CPU),且所述第二计算单元包含图形处理单元(GPU),其中所述GPU并行地细分所述曲线的由所述第一线段中的第一者表示的第一部分,且细分所述曲线的由所述第一线段中的第二者表示的第二部分。
21.根据权利要求20所述的装置,其中所述GPU用所述GPU的着色器单元细分所述曲线的所述第一和第二部分中的每一者。
22.根据权利要求21所述的装置,其中所述着色器单元包含顶点着色器,所述顶点着色器:接收多个顶点属性,所述多个顶点属性包括指定所述第一线段中的所述一者的顶点点的至少两个顶点属性;且产生额外顶点属性,其表示位于所述曲线的由所述第一线段中的所述一者表示的所述部分上的额外顶点点。
23.根据权利要求15所述的装置,其中所述第二计算单元包含专用细分硬件,其接收至少一个输入且基于所述至少一个输入而产生对应于所述第二线段中的一者的至少一个顶点点的至少一个坐标。
24.根据权利要求23所述的装置,其中所述细分硬件包含布置成管线配置的多个乘法与累加运算单元,其实施所述曲线的多项式表示,以基于所述至少一个输入而产生对应于所述第二线段中的所述一者的所述至少一个顶点点的至少一个坐标。
25.根据权利要求24所述的装置,其中所述多个乘法与累加运算单元的所述管线经配置以使得所述细分硬件作为各自产生所述至少一个顶点点的坐标的两个或两个以上并行管线而操作。
26.根据权利要求15所述的装置,其中第一计算单元是图形处理单元(GPU)的第一组件,且所述第二计算单元是所述GPU的第二组件。
27.根据权利要求15所述的装置,其进一步包含显示器,其中所述第一和第二计算单元中的一者渲染所述第二线段,以将所述曲线呈现给所述显示器。
28.根据权利要求15所述的装置,其中所述第一计算单元、所述第二计算单元和第三计算单元中的一者将所述曲线的由所述第二线段中的一者表示的部分细分为若干第三线段。
29.一种装置,其包含:
用于细分曲线以将所述曲线划分为若干第一线段的第一装置;
用于将所述曲线的由所述第一线段中的一者表示的部分细分为若干第二线段的第二装置。
30.根据权利要求29所述的装置,其进一步包含:
用于将所述曲线从第一坐标空间变换到第二坐标空间的装置,其中
所述第二细分装置基于变换所述曲线时所使用的比例因子,将所述曲线的由所述第一线段中的所述一者表示的所述部分细分为所述第二线段。
31.根据权利要求30所述的装置,其中所述第二细分装置在所述比例因子增加时,将所述曲线的由所述第一线段中的所述一者表示的所述部分细分为较大数目的第二线段。
32.根据权利要求29所述的装置,其进一步包含用于基于所述第一细分装置的至少一负荷而动态地平衡由所述第一细分装置执行的对所述曲线的细分的量的装置。
33.根据权利要求23所述的装置,其中所述第一细分装置在所述第一细分装置的所述负荷超出阈值时,细分所述曲线以将所述曲线划分为较小数目的第一线段。
34.根据权利要求29所述的装置,其中所述第二细分装置并行地细分所述曲线的由所述第一线段中的第一者表示的第一部分和所述曲线的由所述第一线段中的第二者表示的第二部分。
35.根据权利要求29所述的装置,其中所述第二细分装置:接收多个顶点属性,所述多个顶点属性包括指定所述第一线段中的所述一者的顶点点的至少两个顶点属性;且产生表示位于所述曲线的由所述第一线段中的所述一者表示的所述部分上的额外点的额外顶点属性,以将所述曲线的所述部分细分为所述第二线段。
36.根据权利要求29所述的装置,其中所述第二细分装置包含专用细分硬件,其包括用于基于所述至少一个输入而产生对应于所述第二线段中的一者的至少一个顶点点的至少一个坐标的装置。
37.根据权利要求36所述的装置,其中所述产生装置包含多个乘法与累加运算单元的管线,其实施所述曲线的多项式表示,以基于所述至少一个输入而产生对应于所述第二线段中的所述一者的所述至少一个顶点点的至少一个坐标。
38.根据权利要求37所述的装置,其进一步包含用于配置所述多个乘法与累加运算单元的所述管线以使得所述细分硬件作为各自产生顶点点的坐标的两个或两个以上并行管线而操作的装置。
39.根据权利要求29所述的装置,其中所述第一细分装置是图形处理单元(GPU)的第一组件,且所述第二细分装置是所述GPU的第二组件。
40.根据权利要求29所述的装置,其进一步包含用于渲染所述第二线段以将所述曲线呈现给显示器的装置。
41.根据权利要求29所述的装置,其进一步包含用于将所述曲线的由所述第二线段中的一者表示的部分细分为若干第三线段的第三装置。
42.根据权利要求29所述的装置,其中所述第一细分装置和所述第二细分装置中的一者将所述曲线的由所述第二线段中的一者表示的部分细分为若干第三线段。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/052,628 US8643644B2 (en) | 2008-03-20 | 2008-03-20 | Multi-stage tessellation for graphics rendering |
US12/052,628 | 2008-03-20 | ||
PCT/US2009/037730 WO2009117619A1 (en) | 2008-03-20 | 2009-03-19 | Multi-stage tessellation for graphics rendering |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101978393A true CN101978393A (zh) | 2011-02-16 |
CN101978393B CN101978393B (zh) | 2016-12-07 |
Family
ID=40875114
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200980109895.XA Active CN101978393B (zh) | 2008-03-20 | 2009-03-19 | 用于图形渲染的多阶段细分 |
Country Status (8)
Country | Link |
---|---|
US (1) | US8643644B2 (zh) |
EP (1) | EP2269172A1 (zh) |
JP (1) | JP5335888B2 (zh) |
KR (1) | KR101240815B1 (zh) |
CN (1) | CN101978393B (zh) |
CA (1) | CA2717278A1 (zh) |
TW (1) | TW201001329A (zh) |
WO (1) | WO2009117619A1 (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102142150A (zh) * | 2011-03-17 | 2011-08-03 | 长沙景嘉微电子有限公司 | 基于分块渲染的gpu中锯齿线段的生成 |
CN104156185A (zh) * | 2013-05-13 | 2014-11-19 | 中国移动通信集团公司 | 三维字体显示方法及装置 |
CN104520900A (zh) * | 2012-08-09 | 2015-04-15 | 高通股份有限公司 | Gpu加速的路径再现 |
CN104520901A (zh) * | 2012-08-09 | 2015-04-15 | 高通股份有限公司 | 具有虚线模式的路径的gpu加速再现 |
CN104541305A (zh) * | 2012-08-09 | 2015-04-22 | 高通股份有限公司 | Gpu加速的路径再现 |
CN104574309A (zh) * | 2014-12-30 | 2015-04-29 | 北京像素软件科技股份有限公司 | 移动游戏应用中的三角形网格细分的方法及装置 |
CN108090943A (zh) * | 2016-11-21 | 2018-05-29 | 三星电子株式会社 | 渲染曲线的方法、装置和系统 |
Families Citing this family (44)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8741798B2 (en) * | 2008-05-29 | 2014-06-03 | Emmett M. Cunningham | Catalysts for hydrocarbon oxidation |
US20100079454A1 (en) * | 2008-09-29 | 2010-04-01 | Legakis Justin S | Single Pass Tessellation |
US20100079469A1 (en) * | 2008-09-30 | 2010-04-01 | Lake Adam T | Rendering tremmed nurbs on programmable graphics architectures |
GB0818277D0 (en) * | 2008-10-06 | 2008-11-12 | Advanced Risc Mach Ltd | Graphics processing system |
GB0818279D0 (en) * | 2008-10-06 | 2008-11-12 | Advanced Risc Mach Ltd | Graphics processing systems |
GB0818278D0 (en) * | 2008-10-06 | 2008-11-12 | Advanced Risc Mach Ltd | Graphics processing systems |
GB0913170D0 (en) | 2009-07-28 | 2009-09-02 | Advanced Risc Mach Ltd | Graphics processing systems |
US8884957B2 (en) * | 2009-09-09 | 2014-11-11 | Advanced Micro Devices, Inc. | Tessellation engine and applications thereof |
US20110212761A1 (en) * | 2010-02-26 | 2011-09-01 | Igt | Gaming machine processor |
KR101766383B1 (ko) * | 2011-07-26 | 2017-08-09 | 한국전자통신연구원 | 지면 고도 데이터 다운 사이징 방법 및 이를 위한 장치 |
US20130107289A1 (en) * | 2011-10-28 | 2013-05-02 | Microsoft Corporation | Rasterization of printing data |
US8810572B2 (en) * | 2011-10-31 | 2014-08-19 | Qualcomm Incorporated | Tessellation cache for object rendering |
US10089774B2 (en) * | 2011-11-16 | 2018-10-02 | Qualcomm Incorporated | Tessellation in tile-based rendering |
US10535185B2 (en) | 2012-04-04 | 2020-01-14 | Qualcomm Incorporated | Patched shading in graphics processing |
US9076260B2 (en) | 2012-08-30 | 2015-07-07 | Qualcomm Incorporated | Stitching for primitives in graphics processing |
US9082204B2 (en) | 2012-08-30 | 2015-07-14 | Qualcomm Incorporated | Storage structures for stitching primitives in graphics processing |
US9142060B2 (en) | 2012-08-30 | 2015-09-22 | Qualcomm Incorporated | Computation reduced tessellation |
KR101630486B1 (ko) * | 2012-10-09 | 2016-06-14 | 엘에스산전 주식회사 | Hmi 장치 및 hmi 장치의 데이터 출력 방법 |
TWI498849B (zh) * | 2012-11-05 | 2015-09-01 | Nvidia Corp | 圖形驅動程式層級解耦顯像以及顯示的方法 |
JP6153366B2 (ja) | 2013-03-29 | 2017-06-28 | 株式会社バンダイナムコエンターテインメント | 画像生成システム及びプログラム |
JP6166364B2 (ja) * | 2013-04-26 | 2017-07-19 | パナソニック株式会社 | 情報入力表示装置および情報入力表示方法 |
US9401034B2 (en) | 2013-04-30 | 2016-07-26 | Microsoft Technology Licensing, Llc | Tessellation of two-dimensional curves using a graphics pipeline |
KR102104057B1 (ko) | 2013-07-09 | 2020-04-23 | 삼성전자 주식회사 | 점별로 테셀레이션 팩터를 할당하는 방법과 상기 방법을 수행할 수 있는 장치들 |
KR102109130B1 (ko) | 2013-08-12 | 2020-05-08 | 삼성전자주식회사 | 그래픽스 프로세싱 유닛, 이의 동작 방법, 및 이를 포함하는 장치들 |
US9639982B2 (en) | 2013-10-18 | 2017-05-02 | Goodle Inc. | On-demand transformation aware shape tessellation |
KR102066533B1 (ko) | 2013-11-19 | 2020-01-16 | 삼성전자 주식회사 | 도메인 쉐이딩 방법과 이를 수행하는 장치들 |
KR102219294B1 (ko) | 2014-02-13 | 2021-02-23 | 삼성전자 주식회사 | 커브 렌더링 방법 및 장치 |
US9652882B2 (en) | 2014-04-05 | 2017-05-16 | Sony Interactive Entertainment America Llc | Gradient adjustment for texture mapping for multiple render targets with resolution that varies by screen location |
US11302054B2 (en) | 2014-04-05 | 2022-04-12 | Sony Interactive Entertainment Europe Limited | Varying effective resolution by screen location by changing active color sample count within multiple render targets |
US9495790B2 (en) | 2014-04-05 | 2016-11-15 | Sony Interactive Entertainment America Llc | Gradient adjustment for texture mapping to non-orthonormal grid |
EP3129958B1 (en) | 2014-04-05 | 2021-06-02 | Sony Interactive Entertainment LLC | Method for efficient re-rendering objects to vary viewports and under varying rendering and rasterization parameters |
US9836816B2 (en) | 2014-04-05 | 2017-12-05 | Sony Interactive Entertainment America Llc | Varying effective resolution by screen location in graphics processing by approximating projection of vertices onto curved viewport |
US10068311B2 (en) | 2014-04-05 | 2018-09-04 | Sony Interacive Entertainment LLC | Varying effective resolution by screen location by changing active color sample count within multiple render targets |
US9710957B2 (en) | 2014-04-05 | 2017-07-18 | Sony Interactive Entertainment America Llc | Graphics processing enhancement by tracking object and/or primitive identifiers |
US10783696B2 (en) | 2014-04-05 | 2020-09-22 | Sony Interactive Entertainment LLC | Gradient adjustment for texture mapping to non-orthonormal grid |
US9865074B2 (en) | 2014-04-05 | 2018-01-09 | Sony Interactive Entertainment America Llc | Method for efficient construction of high resolution display buffers |
US9710881B2 (en) | 2014-04-05 | 2017-07-18 | Sony Interactive Entertainment America Llc | Varying effective resolution by screen location by altering rasterization parameters |
DE102014007914A1 (de) * | 2014-05-27 | 2015-12-03 | Elektrobit Automotive Gmbh | Graphisches Darstellen von Straßen und Routen unter Benutzung von Hardware-Tesselierung |
EP2985735B1 (en) | 2014-08-11 | 2019-12-04 | Samsung Electronics Co., Ltd | Method and apparatus for performing tile-based path rendering |
US9665975B2 (en) * | 2014-08-22 | 2017-05-30 | Qualcomm Incorporated | Shader program execution techniques for use in graphics processing |
KR102443697B1 (ko) | 2015-09-11 | 2022-09-15 | 삼성전자주식회사 | 경로 스트로크를 수행하는 방법 및 장치 |
US11431480B2 (en) * | 2019-07-11 | 2022-08-30 | EMC IP Holding Company LLC | Smart compressor based on adaptive CPU/QAT scheduling method |
US11010939B2 (en) * | 2019-09-12 | 2021-05-18 | Adobe Inc. | Rendering of cubic Bezier curves in a graphics processing unit (GPU) |
CN112949023A (zh) * | 2021-01-15 | 2021-06-11 | 桂林电子科技大学 | 一种基于弦长二分法的二次Bezier曲线插值方法 |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2207840B (en) | 1987-08-07 | 1991-09-25 | Philips Electronic Associated | Method of and apparatus for modifying data stored in a random access memory |
US5261029A (en) * | 1992-08-14 | 1993-11-09 | Sun Microsystems, Inc. | Method and apparatus for the dynamic tessellation of curved surfaces |
US5473742A (en) | 1994-02-22 | 1995-12-05 | Paragraph International | Method and apparatus for representing image data using polynomial approximation method and iterative transformation-reparametrization technique |
US6111588A (en) | 1996-12-05 | 2000-08-29 | Adobe Systems Incorporated | Creating and modifying curves on a computer display |
JPH1115986A (ja) | 1997-06-25 | 1999-01-22 | Fuji Xerox Co Ltd | 画像形成装置 |
JPH1166328A (ja) | 1997-08-19 | 1999-03-09 | Murata Mach Ltd | 曲線描画装置 |
US6304677B1 (en) | 1998-04-07 | 2001-10-16 | Adobe Systems Incorporated | Smoothing and fitting point sequences |
US6204860B1 (en) * | 1998-07-02 | 2001-03-20 | Silicon Graphics, Inc. | Method and apparatus for geometric model deformation using wires |
US6597356B1 (en) | 2000-08-31 | 2003-07-22 | Nvidia Corporation | Integrated tessellator in a graphics processing unit |
JP4028979B2 (ja) | 2000-12-05 | 2008-01-09 | 松下電器産業株式会社 | 3次元図形データ生成装置 |
KR100821026B1 (ko) | 2000-12-05 | 2008-04-08 | 마쯔시다덴기산교 가부시키가이샤 | 3차원 문자 데이터 생성 장치 및 3차원 그래픽 데이터생성 장치 |
US7318238B2 (en) | 2002-01-14 | 2008-01-08 | Microsoft Corporation | Security settings for markup language elements |
GB2415118B (en) | 2002-05-10 | 2006-04-05 | Imagination Tech Ltd | An interface and method of interfacing between a parametic modelling unit and a polygon based rendering system |
US7385612B1 (en) * | 2002-05-30 | 2008-06-10 | Adobe Systems Incorporated | Distortion of raster and vector artwork |
JP4464657B2 (ja) * | 2002-11-12 | 2010-05-19 | パナソニック株式会社 | 曲面画像処理装置及び曲面画像処理方法 |
US7800631B2 (en) | 2003-03-18 | 2010-09-21 | Qualcomm Incorporated | Triangle rendering using direct evaluation |
US6811264B2 (en) * | 2003-03-21 | 2004-11-02 | Mitsubishi Electric Research Laboratories, Inc. | Geometrically aware projector |
US7042452B1 (en) * | 2003-10-02 | 2006-05-09 | Sun Microsystems, Inc. | Triangle coverage estimation and edge-correct tessellation |
US20070291040A1 (en) * | 2005-01-25 | 2007-12-20 | Reuven Bakalash | Multi-mode parallel graphics rendering system supporting dynamic profiling of graphics-based applications and automatic control of parallel modes of operation |
US7570267B2 (en) * | 2004-05-03 | 2009-08-04 | Microsoft Corporation | Systems and methods for providing an enhanced graphics pipeline |
US7564459B2 (en) * | 2005-10-31 | 2009-07-21 | Microsoft Corporation | Resolution-independent curve rendering using programmable graphics hardware |
JP4643485B2 (ja) * | 2006-03-30 | 2011-03-02 | 株式会社東芝 | 描画装置、方法およびプログラム |
-
2008
- 2008-03-20 US US12/052,628 patent/US8643644B2/en active Active
-
2009
- 2009-03-19 JP JP2011500968A patent/JP5335888B2/ja active Active
- 2009-03-19 EP EP09723358A patent/EP2269172A1/en active Pending
- 2009-03-19 WO PCT/US2009/037730 patent/WO2009117619A1/en active Application Filing
- 2009-03-19 KR KR1020107023368A patent/KR101240815B1/ko active IP Right Grant
- 2009-03-19 CN CN200980109895.XA patent/CN101978393B/zh active Active
- 2009-03-19 CA CA2717278A patent/CA2717278A1/en not_active Abandoned
- 2009-03-20 TW TW098109306A patent/TW201001329A/zh unknown
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102142150A (zh) * | 2011-03-17 | 2011-08-03 | 长沙景嘉微电子有限公司 | 基于分块渲染的gpu中锯齿线段的生成 |
CN102142150B (zh) * | 2011-03-17 | 2012-10-17 | 长沙景嘉微电子有限公司 | 基于分块渲染的gpu中锯齿线段的生成 |
CN104520900A (zh) * | 2012-08-09 | 2015-04-15 | 高通股份有限公司 | Gpu加速的路径再现 |
CN104520901A (zh) * | 2012-08-09 | 2015-04-15 | 高通股份有限公司 | 具有虚线模式的路径的gpu加速再现 |
CN104541305A (zh) * | 2012-08-09 | 2015-04-22 | 高通股份有限公司 | Gpu加速的路径再现 |
US9619853B2 (en) | 2012-08-09 | 2017-04-11 | Qualcomm Incorporated | GPU-accelerated path rendering |
CN104541305B (zh) * | 2012-08-09 | 2017-10-31 | 高通股份有限公司 | Gpu加速的路径再现 |
CN104520900B (zh) * | 2012-08-09 | 2017-12-08 | 高通股份有限公司 | Gpu加速的路径再现 |
CN104156185A (zh) * | 2013-05-13 | 2014-11-19 | 中国移动通信集团公司 | 三维字体显示方法及装置 |
CN104574309A (zh) * | 2014-12-30 | 2015-04-29 | 北京像素软件科技股份有限公司 | 移动游戏应用中的三角形网格细分的方法及装置 |
CN108090943A (zh) * | 2016-11-21 | 2018-05-29 | 三星电子株式会社 | 渲染曲线的方法、装置和系统 |
CN108090943B (zh) * | 2016-11-21 | 2022-02-01 | 三星电子株式会社 | 渲染曲线的方法 |
Also Published As
Publication number | Publication date |
---|---|
JP2011515765A (ja) | 2011-05-19 |
WO2009117619A1 (en) | 2009-09-24 |
US8643644B2 (en) | 2014-02-04 |
JP5335888B2 (ja) | 2013-11-06 |
CN101978393B (zh) | 2016-12-07 |
CA2717278A1 (en) | 2009-09-24 |
US20090237401A1 (en) | 2009-09-24 |
KR20100127834A (ko) | 2010-12-06 |
KR101240815B1 (ko) | 2013-03-11 |
TW201001329A (en) | 2010-01-01 |
EP2269172A1 (en) | 2011-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101978393A (zh) | 用于图形渲染的多阶段细分 | |
US20200320771A1 (en) | Compressed bounding volume hierarchy | |
CN102227752B (zh) | 使用三维图形硬件的二维图形渲染期间的顶点丢弃 | |
US9177351B2 (en) | Multi-primitive graphics rendering pipeline | |
US10726583B2 (en) | System and method of encoding and decoding feature maps and weights for a convolutional neural network | |
US10984049B2 (en) | Performing traversal stack compression | |
US6522326B1 (en) | Decompression of quantized compressed three-dimensional graphics data | |
US7567252B2 (en) | Optimizing performance of a graphics processing unit for efficient execution of general matrix operations | |
US6747644B1 (en) | Decompression of surface normals in three-dimensional graphics data | |
US8786606B2 (en) | Point containment for quadratic Bèzier strokes | |
US20140123147A1 (en) | System, method, and computer program product for parallel reconstruction of a sampled suffix array | |
JP2005182785A (ja) | グラフィックス処理ユニットを使用して機械学習技術の処理を速め、最適化するシステムおよび方法 | |
US20080266287A1 (en) | Decompression of vertex data using a geometry shader | |
US20210358174A1 (en) | Method and apparatus of data compression | |
US20210398325A1 (en) | Delta triplet index compression | |
US11869123B2 (en) | Anti-aliasing two-dimensional vector graphics using a compressed vertex buffer | |
JPH0766451B2 (ja) | コンピュータ・グラフィック装置 | |
GPU | Technical Brief |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |