CN104520900A - Gpu加速的路径再现 - Google Patents
Gpu加速的路径再现 Download PDFInfo
- Publication number
- CN104520900A CN104520900A CN201380041800.1A CN201380041800A CN104520900A CN 104520900 A CN104520900 A CN 104520900A CN 201380041800 A CN201380041800 A CN 201380041800A CN 104520900 A CN104520900 A CN 104520900A
- Authority
- CN
- China
- Prior art keywords
- primitive
- gpu
- path segments
- line segment
- forth
- 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
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
Abstract
本发明是针对用于执行GPU加速的路径再现的技术。描述GPU,其经配置以接收指示待再现路径的路径片段的数据,将所述路径片段棋盘形布置为多个基元,且基于所述多个基元再现用于所述路径片段的填充区域和来回划线区域中的至少一者。本发明的技术可用以改进路径再现操作的性能,减小执行路径再现操作需要的存储器带宽要求,和/或减小执行路径再现操作需要的存储器占据面积。
Description
本申请案主张2013年1月22日申请的第61/755,312号美国临时申请案、2012年10月12日申请的第61/713,377号美国临时申请案和2012年8月9日申请的第61/681,498号美国临时申请案的权益,以上申请案中的每一者的整个内容以引用的方式并入本文中。
技术领域
本发明涉及图形处理,且更具体地说涉及用于路径再现的技术。
背景技术
路径再现可指代二维(2D)向量图形路径(可替代地在本文中被称作“路径”)的再现,所述路径中的每一者可包含一或多个路径片段。当路径包含两个或两个以上路径片段时,个别路径片段可具有相同类型或不同类型。路径片段的类型可包含(例如)线、椭圆形弧、二次贝塞尔曲线和三次贝塞尔曲线。在一些实例中,路径片段类型可根据例如开放向量图形(OpenVG)API等标准向量图形应用程序编程接口(API)来界定。
路径再现可在中央处理单元(CPU)中实施。然而,此方法可为CPU密集的,且因此可限制可用于其它CPU任务的CPU处理循环的量。此外,在某些情况下,相对较大量的数据可需要传送到图形处理单元(GPU)以用所要的细节水平再现路径片段。相对较大量的数据在存储数据时可消耗大量存储器存储空间,且在将数据传送到GPU时可消耗大量的存储器带宽。
发明内容
本发明是针对用于执行GPU加速的路径再现的技术。根据本发明的GPU加速路径再现技术设计的GPU可经配置以将接收路径片段棋盘形布置为多个基元(例如,多个线段),且基于所述多个基元再现用于路径片段的填充区域和来回划线区域中的至少一者。本发明的技术可提供部分到总体GPU硬件加速以用于一或多个路径再现操作的执行,例如路径填充操作和路径来回划动操作。
在一个实例中,本发明描述一种方法,其包含以GPU接收指示待再现路径的路径片段的数据。所述方法进一步包含以所述GPU将路径片段棋盘形布置为多个基元。所述方法进一步包含以所述GPU基于所述多个基元再现用于路径片段的填充区域和来回划线区域中的至少一者。
在另一实例中,本发明描述一种装置,其包含GPU,所述GPU经配置以接收指示待再现路径的路径片段的数据。所述GPU进一步经配置以将路径片段棋盘形布置为多个基元。所述GPU进一步经配置以基于所述多个基元再现用于路径片段的填充区域和来回划线区域中的至少一者。
在另一实例中,本发明描述一种设备,其包含用于接收指示待再现路径的路径片段的数据的装置。所述设备进一步包含用于将路径片段棋盘形布置为多个基元的装置。所述设备进一步包含用于基于所述多个基元再现用于路径片段的填充区域和来回划线区域中的至少一者的装置。
在另一实例中,本发明描述一种存储指令的计算机可读存储媒体,所述指令在被执行时致使一或多个处理器接收指示待再现路径的路径片段的数据。所述计算机可读存储媒体进一步存储在被执行时致使所述一或多个处理器将路径片段棋盘形布置为多个基元的指令。所述计算机可读存储媒体进一步存储在被执行时致使所述一或多个处理器基于所述多个基元再现用于路径片段的填充区域和来回划线区域中的至少一者的指令。
在附图及以下描述中阐述本发明的一或多个实例的细节。本发明的其它特征、目标及优势将从描述及图式及权利要求书显而易见。
附图说明
图1是说明可用以实施本发明的GPU加速的路径再现技术的实例计算装置的框图。
图2是进一步详细说明图1中的计算装置的CPU、GPU和存储器的框图。
图3是说明可执行本发明的GPU加速路径再现技术的实例图形管线的概念图。
图4是说明将使用本发明的路径填充技术填充的实例多边形的概念图。
图5是说明其中法向量的交叉点在来回划线区域外部的实例来回划线区域配置的概念图。
图6是说明其中法向量的交叉点在来回划线区域的内部的实例来回划线区域配置的概念图。
图7是说明可在形成来回划线区域的两个三角形之间形成的实例T接头的概念图。
图8是说明实例斜边接合点的概念图。
图9是说明实例斜接接合点的概念图。
图10是说明实例圆形接合点的概念图。
图11是说明实例正方形盖的概念图。
图12是说明实例圆形盖的概念图。
图13是说明根据本发明的用于执行GPU加速的路径再现的实例技术的流程图。
图14是说明根据本发明的用于执行路径填充操作的实例技术的流程图。
图15是说明根据本发明的用于执行路径来回划动操作的实例技术的流程图。
图16是说明根据本发明的用于产生在空间上对应于路径片段的来回划线区域的一组基元的实例技术的流程图。
图17是说明用于致使GPU执行根据本发明的GPU加速的路径再现的实例技术的流程图。
具体实施方式
本发明是针对用于执行GPU加速的路径再现的技术。路径再现可指代二维(2D)向量图形路径(可替代地在本文中被称作“路径”)的再现,所述路径中的每一者可包含一或多个路径片段。当路径包含两个或两个以上路径片段时,个别路径片段可具有相同类型或不同类型。路径片段的类型可包含(例如)线、椭圆形弧、二次贝塞尔曲线和三次贝塞尔曲线。在一些实例中,路径片段类型可根据例如开放向量图形(OpenVG)API等标准向量图形应用程序编程接口(API)来界定。
GPU通常实施三维(3D)图形管线,其经设计以与一或多个3D图形API顺应。因为当今在使用的流行的3D图形API并不需要顺应装置支持路径再现命令,所以现代的GPU常常提供极少到不提供用于路径再现命令的硬件加速。举例来说,现代的GPU中实施的典型3D图形管线可包含光栅化器,其经设计以光栅化低阶非弯曲3D图形基元(例如点、线和三角形),但不能够直接再现弯曲路径再现基元(例如,椭圆形弧和贝塞尔曲线)。
用于路径再现的一个方法可涉及使用3D GPU管线来提供部分GPU硬件加速以用于路径再现命令的执行。此方法涉及以中央处理单元(CPU)预处理路径片段以便将所述路径片段转换为可由GPU光栅化的一或多个低阶非弯曲3D图形基元。举例来说,CPU可将弯曲路径片段(例如,椭圆弧或贝塞尔曲线)棋盘形布置为接近所述路径片段的曲率的相对较小三角形的集合,且可致使使用GPU再现所述三角形集合。然而,此方法可为CPU密集的,且因此可限制可用于其它CPU任务的CPU处理循环的量。此外,在某些情况下,可需要相对较大量的三角形来以所要细节水平再现路径片段。相对较大量的三角形在存储数据时可消耗大量存储器存储空间,且在将数据传送到GPU时可消耗大量的存储器带宽。
用于提供部分到全部GPU硬件加速以用于路径再现命令的执行的另一方法可涉及修改GPU的架构以支持专用硬件加速路径再现管线。然而,因为流行的3D图形API(例如,DirectX 11(DX)API)并不需要GPU架构包含专用路径再现管线,所以此方法并不得到将保证由与特定3D图形API(例如,DX 11API)顺应的全部GPU支持的跨平台硬件加速路径再现解决方案。
本发明中的路径再现技术可提供GPU硬件加速路径再现解决方案,其中GPU经配置以将所接收路径片段棋盘形布置为多个线段且使用3D图形管线再现所述经棋盘形布置线段。通过使用GPU将路径片段棋盘形布置为线段,预处理路径片段的负担从CPU松开,进而释放处理资源以用于其它CPU任务。此外,在一些实例中,GPU可利用高度平行的现代GPU棋盘形布置架构来执行棋盘形布置操作,其在一些实例中可允许GPU以比CPU更高效的方式再现路径片段。另外,因为棋盘形布置在GPU中发生而不是在CPU中发生,所以众多的经棋盘形布置基元不需要存储于系统存储器中且不需要从CPU传递到GPU,进而减少用于路径再现需要的存储器占据面积以及用于路径再现需要的存储器带宽。
在一些实例中,根据本发明的技术设计的GPU可经配置以使用由例如DX 11API等特定3D图形API指定的图形架构棋盘形布置且再现路径片段,而无需任何额外硬件组件和/或对图形架构的修改。在此等实例中当执行路径再现时通过仅利用很可能或保证由特定3D图形API呈现的架构特征,可实现跨平台硬件加速路径再现解决方案,其能够在与3D图形API顺应的任何装置上实施。举例来说,在一些实例中,本发明的技术可提供能够在DirectX 11顺应图形硬件上使用的路径再现解决方案。在一些实例中,可停用划虚线和尖点处置以便实施利用DirectX 11架构的DirectX 11路径再现解决方案而无需任何修改。
路径再现可划分成两个主操作:(1)填充路径片段,和(2)来回划动路径片段。在一些实例中,可执行填充和来回划动操作中的一或两者以完全再现路径。概念地,填充操作可对应于以指定填充颜色填充路径片段的内部区。来回划动操作可概念地对应于使用保持垂直于路径的直线笔“加宽”路径片段的边缘。在一些实例中,来回划动操作还可涉及将各种类型的末端盖应用到路径的末端和/或应用路径的内部路径片段的端点之间的各种类型的接合点。
在路径片段已经棋盘形布置之后,实施本发明的路径再现技术的GPU可经配置以产生对应于所述经棋盘形布置路径片段的3D几何形状,其允许GPU再现用于路径片段的填充区域和用于路径片段的来回划动区域中的一或两者。3D几何形状可包含能够由现有3D光栅化引擎光栅化的低阶非弯曲3D图形基元(例如,三角形)。通过基于由GPU从近似于待再现路径的多个经棋盘形布置线段产生的3D几何形状而再现用于路径片段的填充区域和/或来回划动区域,3D GPU管线可用以提供用于填充和来回划动操作的执行的100%或几乎100%GPU解决方案。
图1是说明可用以实施本发明的GPU加速的路径再现技术的实例计算装置2的框图。计算装置2可包括个人计算机、桌上型计算机、膝上型计算机、计算机工作站、视频游戏平台或控制台、无线通信装置(例如,移动电话、蜂窝式电话、卫星电话和/或移动电话手持机)、陆线电话、因特网电话、手持式装置(例如,便携式视频游戏装置或个人数字助理(PDA))、个人音乐播放器、视频播放器、显示装置、电视、电视机顶盒、服务器、中间网络装置、主机计算机、或处理及/或显示图形数据的任何其它类型的装置。
如图1的实例中所示,计算装置2包含用户接口4、CPU 6、存储器控制器8、存储器10、图形处理单元(GPU)12、GPU高速缓冲存储器14、显示接口16、显示器18和总线20。用户接口4、CPU 6、存储器控制器8、GPU 12及显示接口16可使用总线20彼此通信。应注意,图1中展示的不同组件之间的总线及通信接口的特定配置仅是示范性的,且具有相同或不同组件的计算装置及/或其它图形处理系统的其它配置可用于实施本发明的技术。
CPU 6可包括控制计算装置2的操作的通用或专用处理器。用户可将输入提供到计算装置2以致使CPU 6执行一或多个软件应用程序。在CPU 6上执行的软件应用程序可包含(例如)操作系统、字处理器应用程序、电子邮件应用程序、电子数据表应用程序、媒体播放器应用程序、视频游戏应用程序、图形用户接口应用程序或另一程序。用户可经由一或多个输入装置(未图示)(例如,键盘、鼠标、麦克风、触摸垫或经由用户接口4耦合到计算装置2的另一输入装置)将输入提供到计算装置2。
在CPU 6执行的软件应用程序可包含指示GPU 12致使图形数据到显示器18的再现的一或多个图形再现指令。在一些实例中,软件指令可符合图形应用程序编程接口(API),例如开放图形库()API、开放图形库嵌入系统(OpenGL ES)API、Direct3DAPI、DirectX API、RenderMan API、WebGL API或任何其它公众或专有标准图形API。为了处理图形再现指令,CPU 6可将一或多个图形再现命令发出到GPU 12以致使GPU12执行图形数据的再现的一些或全部。在一些实例中,待再现的图形数据可包含图形基元列表,例如点、线、三角形、四边形、三角形条带、片等。在其它实例中,待再现的图形数据可包含一或多个路径再现基元,例如线段、椭圆形弧、二次贝塞尔曲线和三次贝塞尔曲线。
存储器控制器8促使数据进出存储器10的传送。举例来说,存储器控制器8可从CPU 6和/或GPU 12接收存储器读取请求和存储器写入请求,且相对于存储器10服务此类请求以便为计算装置2中的组件提供存储器服务。存储器控制器8通信地耦合到存储器10。虽然存储器控制器8在图1的实例计算装置2中图解说明为与CPU 6、GPU 12和存储器10两者分开的处理模块,但在其它实例中,存储器控制器8的功能性的一些或全部可在CPU 6、GPU 12和存储器10中的一或多者上实施。
存储器10可存储可存取以用于由CPU 6执行的程序模块和/或指令和/或用于由CPU6上执行的程序使用的数据。举例来说,存储器10可存储用户应用程序和与所述应用程序相关联的图形数据。存储器10还可存储用于由计算装置2的其它组件使用和/或由其产生的信息。举例来说,存储器10可充当用于GPU 12的装置存储器且可存储将在GPU12上操作的数据以及由GPU 12执行的操作而产生的数据。举例来说,存储器10可存储路径数据、路径片段数据、表面、纹理缓冲器、深度缓冲器、模板缓冲器、顶点缓冲器、帧缓冲器或类似者的任何组合。另外,存储器10可存储用于由GPU 12处理的命令流。举例来说,存储器10可存储路径再现命令、3D图形再现命令和/或通用GPU计算命令。存储器10可包含一或多个易失性或非易失性存储器或存储装置,例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、同步动态随机存取存储器(SDRAM)、只读存储器(ROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学存储媒体。
GPU 12可经配置以执行由CPU 6发出到GPU 12的命令。由GPU 12执行的命令可包含图形命令、绘制调用命令、GPU状态编程命令、存储器传送命令、通用计算命令、核心执行命令等。
在一些实例中,GPU 12可经配置以执行图形操作以将一或多个图形基元再现到显示器18。在此等实例中,当在CPU 6上执行的软件应用程序之一需要图形处理时,CPU6可将图形数据提供到GPU 12用于向显示器18再现且将一或多个图形命令发出到GPU12。所述图形命令可包含例如绘制调用命令、GPU状态编程命令、存储器传送命令、传图命令等。所述图形数据可包含顶点缓冲器、纹理数据、表面数据等。在一些实例中,CPU 6可通过将命令和图形数据写入到可由GPU 12存取的存储器10而将命令和图形数据提供到GPU 12。
在其它实例中,GPU 12可经配置以执行用于CPU 6上执行的应用程序的通用计算。在此等实例中,当CPU 6上执行的软件应用程序之一决定将计算任务卸载到GPU 12时,CPU 6可将通用计算数据提供到GPU 12,且将一或多个通用计算命令发出到GPU 12。所述通用计算命令可包含例如核心执行命令、存储器传送命令等。在一些实例中,CPU6可通过将命令和图形数据写入到可由GPU 12存取的存储器10而将命令和通用计算数据提供到GPU 12。
在一些情况下,GPU 12可内置有高度并行的结构,其提供比CPU 6对向量操作的更有效的处理。举例来说,GPU 12可包含经配置而以并行方式对多个顶点、控制点、像素和/或其它数据操作的多个处理元件。在一些情况下,GPU 12的高度并行本质可允许GPU 12比使用CPU 6再现图像更快地将图形图像(例如,GUI和二维(2D)和/或三维(3D)图形场景)再现到显示器18上。另外,GPU 12的高度并行本质可允许GPU 12比CPU6更快地处理某些类型的向量和矩阵运算以用于通用计算应用程序。
在一些实例中,GPU 12可集成到计算装置2的母板中。在其它情况下,GPU 12可存在于安装在计算装置2的母板中的端口中的图形卡上或否则可并入在经配置以与计算装置2交互操作的外围装置内。在进一步例子中,GPU 12可与CPU 6位于同一微芯片上从而形成芯片上系统(SoC)。GPU 12可包含一或多个处理器,例如一或多个微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其它等效的集成或离散逻辑电路。
在一些实例中,GPU 12可直接耦合到GPU高速缓冲存储器14。因此,GPU 12可从GPU高速缓冲存储器14读取数据且写入数据到GPU高速缓冲存储器14而不一定使用总线20。换句话说,GPU 12可使用局部存储装置而非片外存储器来局部地处理数据。此允许GPU 12通过消除GPU 12经由总线20读取及写入数据的需要而以更有效的方式操作,其中经由总线操作可经历繁重的总线业务。然而,在一些情况下,GPU 12可不包含单独的高速缓冲存储器,但改为经由总线20利用存储器10。GPU高速缓冲存储器14可包含一或多个易失性或非易失性存储器或存储装置,例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学存储媒体。
CPU 6和/或GPU 12可将经再现图像数据存储在存储器10内分配的帧缓冲器中。经再现图像数据可包含用于待再现路径片段的经再现填充区域和来回划线区域。显示接口16可从帧缓冲器检索数据且配置显示器18以显示由经再现图像数据表示的图像。在一些实例中,显示接口16可包含数/模转换器(DAC),其经配置以将从帧缓冲器检索的数字值转换为可由显示器18消耗的模拟信号。在其它实例中,显示接口16可将数字值直接传递到显示器18以进行处理。
显示器18可包含监视器、电视、投影装置、液晶显示器(LCD)、等离子显示器面板、发光二极管(LED)阵列、阴极射线管(CRT)显示器、电子纸、表面传导电子发射显示器(SED)、激光电视显示器、纳米晶体显示器或另一类型的显示单元。显示器18可集成在计算装置2内。举例来说,显示器18可为移动电话手持机或平板计算机的屏幕。或者,显示器18可为经由有线或无线通信链路而耦合到计算机装置2的独立装置。举例来说,显示器18可为经由电缆或无线链路而连接到个人计算机的计算机监视器或平板显示器。
总线20可使用总线结构和总线协议的任何组合来实施,包含第一、第二和第三代总线结构和协议、共享总线结构和协议、点对点总线结构和协议、单向总线结构和协议以及双向总线结构和协议。可用以实施总线20的不同总线结构和协议的实例包含例如超传输总线、InfiniBand总线、高级图形端口总线、外围组件互连(PCI)总线、PCI高速总线、高级微控制器总线架构(AMBA)、高级高性能总线(AHB)、AMBA高级外围总线(APB),和AMBA高级eXentisible接口(AXI)总线。也可以使用其它类型的总线结构和协议。
根据本发明,GPU 12可经配置以提供部分到总体GPU硬件加速以用于各种路径再现命令的执行。举例来说,CPU 6可将一或多个路径再现命令发出到GPU 12,且GPU 12可执行所述路径再现命令。作为一个实例,CPU 6可向GPU 12发出一或多个路径填充命令,其指示GPU 12执行路径填充操作,且GPU 12可执行所述路径填充命令。作为另一实例,CPU 6可向GPU 12发出一或多个路径来回划动命令,其指示GPU 12执行路径来回划动操作,且GPU 12可执行所述路径来回划动命令。
在一些实例中,GPU 12可经配置以接收指示待再现的路径的路径片段的数据,将路径片段棋盘形布置为多个基元,且基于所述多个基元再现用于所述路径片段的填充区域和来回划线区域中的至少一者。GPU可当执行填充操作时再现用于路径片段的填充区域,且可当执行来回划线操作时再现用于路径片段的来回划线区域。在一些实例中,所述多个基元可为多个线段。
在一些实例中,GPU 12可使用两遍次再现方法来执行路径填充操作。举例来说,作为第一再现遍次的一部分,GPU 12可接收指示待再现路径的路径片段的数据,将所述路径片段棋盘形布置为多个线段,且基于所述多个线段产生多个三角形基元。GPU 12可基于所述多个线段中的相应一者产生所述多个三角形基元中的每一者。GPU 12可将所述多个三角形基元中的每一者再现到共同模板缓冲器中以使得所述共同模板缓冲器存储指示哪些像素在用于路径片段的填充区域内部的数据。在将基元再现到共同模板缓冲器中之后,GPU 12可执行第二再现遍次。在第二再现遍次期间,GPU 12可基于存储于模板缓冲器中的数据和填充颜色而再现包含处于用于路径片段的填充区域内部的像素的一或多个基元以便产生用于路径片段的填充区域的光栅化版本。以此方式,GPU 12可提供GPU硬件加速以用于路径填充操作的执行。
为了产生用于路径填充操作的多个三角形基元,在一些实例中,GPU 12可产生多个三角形基元以使得所述三角形基元中的每一者具有对于针对路径片段产生的全部三角形基元为相同的共同顶点。在此等实例中,GPU 12可产生所述多个三角形基元以使得所述三角形基元中的每一者具有对应于所述多个线段中的相应一者的端点的两个额外顶点(即,除共同顶点之外的两个顶点)。每一额外顶点可对应于对应线段的端点中的相应一者。
为了将所述多个三角形基元中的每一者再现到共同模板缓冲器中,GPU 12可使用以下技术中的一者。根据技术,GPU 12可针对所述多个三角形基元中的每一者反转模板缓冲器中的对应于相应三角形基元的一或多个值。根据第二技术,GPU 12可针对多个三角形基元中的每一者,在相应三角形基元的顶点次序在顺时针方向中定向的情况下递增模板缓冲器中对应于相应三角形基元的一或多个值,且在相应三角形基元的顶点次序在逆时针方向中定向的情况下递减模板缓冲器中对应于相应三角形基元的值。
在某些情况下,GPU 12可使用以下技术中的一者或两者来执行路径填充操作。根据第一技术,GPU 12可使用GPU 12的固定功能棋盘形布置引擎和在GPU 12的可编程着色器单元上执行的域着色器程序将路径片段棋盘形布置为多个线段。根据第二技术,GPU 12可使用在GPU 12的可编程着色器单元上执行的几何形状着色器程序产生多个三角形基元。使用GPU 12的棋盘形布置引擎、域着色器和几何形状着色器中的一或多者执行路径填充操作可允许在一些实例中使用与芯片上具有棋盘形布置功能的3D图形API(例如,DX 11API)顺应的GPU执行路径填充操作,而无需API的修改或由API指定的图形架构的修改。
在其它实例中,GPU 12可使用单个遍次再现方法执行路径来回划动操作。举例来说,GPU 12可接收指示待再现路径的路径片段的数据,将路径片段棋盘形布置为多个线段,且基于多个线段产生在空间上对应于用于路径片段的来回划线区域的多个三角形基元。对于所述多个线段中的每一者,GPU 12可产生在空间上对应于用于相应线段的来回划线区域的一或多个基元(例如,三角形基元),且基于来回划线颜色再现用于相应线段的一或多个基元以产生用于路径片段的来回划线区域的光栅化版本。以此方式,GPU 12可提供GPU硬件加速以用于路径来回划动操作的执行。
为了产生在空间上对应于线段的来回划线区域的一或多个基元(例如,三角形基元),在一些实例中,GPU 12可产生相应线段的多个法向量。所述法向量中的每一者可指示在沿着路径片段的多个点中的相应一者处垂直于所述路径片段的切线的方向。沿着路径片段的所述多个点中的每一者可对应于相应线段的端点中的相应一者。GPU 12可基于所述多个法向量和来回划线宽度确定用于相应线段的来回划线区域的拐角点。GPU 12可基于来回划线区域的所述拐角点产生在空间上对应于用于相应线段的来回划线区域的一或多个基元。
在某些情况下,GPU 12可使用以下技术中的一或多者来执行路径来回划动操作。根据第一技术,GPU 12可使用GPU 12的固定功能棋盘形布置引擎和在GPU 12的可编程着色器单元上执行的域着色器程序将路径片段棋盘形布置为多个线段。根据第二技术,GPU 12可使用在GPU 12的可编程着色器单元上执行的几何形状着色器程序产生所述一或多个基元。根据第三技术,GPU 12可使用在GPU 12的可编程着色器单元上执行的域着色器程序产生多个法向量。使用GPU 12的棋盘形布置引擎、域着色器和几何形状着色器中的一或多者执行路径来回划动操作可允许在一些实例中使用与例如DX 11API等芯片上具有棋盘形布置功能的3D图形API顺应的GPU执行路径来回划动操作而无需API的修改或由API指定的图形架构的修改。
本发明中描述的路径再现技术可在图1中图解说明的计算装置2中的组件中的任一者中实施,包含例如CPU 6、GPU 12和存储器10。在一些实例中,路径再现技术的全部或几乎全部可在GPU 12中(例如,GPU 12的图形管线中)实施。在额外实例中,CPU 6可实施用于配置图形管线的状态且将着色器程序绑定到图形管线以实施GPU 12中执行本发明的路径再现技术的路径再现管线的技术。在其它实例中,CPU 6可经配置以将指示待再现路径的数据放置到一或多个缓冲器(例如,一或多个顶点缓冲器)中,所述缓冲器可由GPU 12存取以再现一或多个路径。
图2是进一步详细说明图1中的计算装置2的CPU 6、GPU 12和存储器10的框图。如图2中所示,CPU 6通信地耦合到GPU 12和存储器10,且GPU 12通信地耦合到CPU6和存储器10。在一些实例中,GPU 12可与CPU 6集成到母板上。在额外实例中,GPU12可实施在安装于包含CPU 6的母板的端口中的图形卡上。在其它实例中,GPU 12可并入在经配置以与CPU 6交互操作的外围装置内。在额外实例中,GPU 12可与CPU 6位于同一微芯片上从而形成芯片上系统(SoC)。
CPU 6经配置以执行软件应用程序24、图形API 26、GPU驱动器28和操作系统30。软件应用程序24可包含致使显示图形图像的一或多个指令和/或致使在GPU 12上执行非图形任务(例如,通用计算任务)的一或多个指令。软件应用程序24可将指令发出到图形API 26。图形API 26可为将从软件应用程序24接收的指令转译为可由GPU驱动器28消耗的格式的运行时间服务。GPU驱动器28经由图形API 26从软件应用程序24接收指令,且控制GPU 12的操作以服务所述指令。举例来说,GPU驱动器28可调配一或多个命令38,将命令38放置到存储器10中,且指示GPU 12执行命令38。在一些实例中,GPU驱动器28可将命令38放置到存储器10中且经由操作系统30、例如经由一或多个系统调用与GPU 12通信。
GPU 12包含命令引擎32和一或多个处理单元34。在一些实例中,所述一或多个处理单元34可形成和/或实施3D图形再现管线,例如DX 11图形再现管线(即,与DX 11图形API顺应的3D图形管线)。
命令引擎32经配置以从CPU 6(例如,经由存储器10)接收命令且致使GPU 12执行命令。响应于接收到状态命令,命令引擎32可经配置以基于所述状态命令将GPU 12中的一或多个状态寄存器设定到特定值,和/或基于所述状态命令配置固定功能处理单元34中的一或多者。响应于接收到绘制调用命令,命令引擎32可经配置以致使处理单元34基于界定待再现的一或多个路径片段的几何形状的数据且基于指示待再现路径片段中的每一者的路径片段类型的数据而再现一或多个路径片段。在一些实例中,界定待再现的一或多个路径片段的几何形状的数据和界定路径片段中的每一者的路径片段类型的数据可存储于存储器10中的一或多个顶点数据结构中。命令引擎32还可接收着色器程序绑定命令,且基于着色器程序绑定命令将特定着色器程序加载到可编程处理单元34中的一或多者中。
处理单元34可包含一或多个处理单元,其中的每一者可为可编程处理单元或固定功能处理单元。可编程处理单元可包含(例如)可编程着色器单元,其经配置以执行从CPU6下载到GPU 12上的一或多个着色器程序。在一些实例中,着色器程序可为以高级着色语言编写的程序的经编译版本,例如OpenGL着色语言(GLSL)、高级着色语言(HLSL)、用于图形的C(Cg)着色语言等。在一些实例中,可编程着色器单元可包含经配置以并行操作的多个处理单元,例如SIMD管线。可编程着色器单元可具有存储着色器程序指令的程序存储器和执行状态寄存器,例如指示程序存储器中正执行的当前指令或待提取的下一指令的程序计数器寄存器。处理单元34中的可编程着色器单元可包含(例如)顶点着色器单元、像素着色器单元、几何形状着色器单元、壳着色器单元、域着色器单元、棋盘形布置控制着色器单元、棋盘形布置评估着色器单元、计算着色器单元和/或统一着色器单元。
固定功能处理单元可包含经硬连线以执行某些功能的硬件。虽然固定功能硬件可经由举例来说一或多个控制信号而配置以执行不同功能,但所述固定功能硬件通常并不包含能够接收用户编译程序的程序存储器。在一些实例中,处理单元34中的固定功能处理单元可包含(例如)执行光栅操作的处理单元,例如深度测试、剪刀测试、α掺合等。
存储器10可存储路径数据36和一或多个命令38。在一些实例中,路径数据36可作为多个顶点(或控制点)存储在存储器10中分配的一或多个顶点缓冲器中。在一些实例中,路径数据可存储于片列表数据结构(例如,四个控制点片列表)中。命令38可存储于一或多个命令缓冲器(例如,环缓冲器)中。CPU 6(例如,经由操作系统30的GPU驱动器28)可将路径数据36和命令38放置到存储器10中用于由GPU 12消耗。GPU 12(例如,命令引擎32)可检索且执行存储于存储器10中的命令38。
在其中路径数据36存储为顶点(例如,控制点)的实例中,所述顶点可包含几何学上界定待再现路径片段的一或多个属性。举例来说,对于线,片控制列表中的顶点可包含指示所述线的端点的坐标(例如,(x0,y0)和(x1,y1))的数据。对于三次贝塞尔曲线,片控制列表中的顶点可包含指示界定所述曲线的四个控制点的坐标(例如,(x0,y0)、(x1,y1)、(x2,y2)、(x3,y3))的数据。对于二次贝塞尔曲线,片控制列表中的顶点可包含指示三个控制点而非四个控制点的坐标的数据。对于椭圆形弧,片控制列表中的顶点可包含指示椭圆形弧的端点参数化的数据或指示椭圆形弧的中心参数化的数据。
在某些情况下,几何学上界定待再现路径片段的一或多个属性可为分辨率独立的。换句话说,几何学上界定路径片段的属性可独立于当再现路径片段时执行的棋盘形布置的量和/或独立于当再现路径片段时产生的顶点的量。
CPU 6还可将指示待再现路径片段的类型的数据(即,“路径片段类型指示符”)放置到顶点缓冲器中的一或多个原本未使用的顶点属性中。在一些实例中,不同路径片段类型可对应于由向量图形API界定且可用于由软件应用程序24使用的一组路径片段类型。在一些实例中,不同路径片段类型可对应于由OpenVG API界定的一组路径片段类型。
命令38可包含一或多个状态命令和/或一或多个绘制调用命令。状态命令可指示GPU 12改变GPU 12中的状态变量中的一或多者,例如绘制颜色、填充颜色、来回划线颜色等。在一些实例中,状态命令可包含路径再现状态命令,其经配置以设定与再现路径相关联的一或多个状态变量。举例来说,状态命令可包含图画模式命令,其经配置以指示待再现路径是否将填充、来回划线或两者。作为另一实例,状态命令可包含指定将用于填充操作的颜色的填充颜色命令,和/或指定用于来回划动操作的颜色的来回划线颜色命令。作为另一实例,状态命令可指定用于来回划线操作的一或多个参数,例如来回划线宽度、末端盖样式(例如,圆形、正方形)、线接合点样式(例如,斜接、圆形、斜边)、斜接限制等。在一些实例中,除使用状态命令来设定一或多个状态参数之外或代替使用状态命令来设定一或多个状态参数,所述状态参数中的一或多者可通过使用绘制调用命令或通过将状态指示符放置到含有路径数据36的顶点缓冲器中来设定。
绘制调用命令可指示GPU 12再现由存储于存储器10中的一或多个顶点的群组(例如,在顶点缓冲器中界定)界定的几何形状。在一些实例中,绘制调用命令可调用GPU 12以再现存储于存储器10的经界定区段(例如,顶点缓冲器或路径数据36)中的全部顶点。换句话说,一旦GPU 12接收到绘制调用命令,控制便传递到GPU 12用于再现由存储器10的经界定区段(例如,顶点缓冲器或路径数据36)中的顶点表示的几何形状和基元。
绘制调用命令可包含3D绘制调用命令和路径再现绘制调用命令中的一者或两者。对于3D再现绘制调用命令,由顶点缓冲器中的一或多个顶点的群组界定的几何形状可对应于待再现的一或多个3D图形基元(例如,点、线、三角形、四边形、三角形条带、片等),且3D再现绘制调用命令可指示GPU 12再现所述一或多个3D图形基元。对于路径再现绘制调用命令,由顶点缓冲器中的一或多个顶点的群组界定的几何形状可对应于待再现的一或多个路径基元(例如,线段、椭圆形弧、二次贝塞尔曲线和三次贝塞尔曲线等),且路径再现绘制调用命令可指示GPU 12再现所述一或多个路径基元。在一些实例中,能够由GPU 12再现的路径基元可对应于本发明中描述的不同类型的路径片段。
在一些实例中,本发明中描述的路径再现技术可在图2中所示的组件中的任一者中实施,包含例如图形API 26、GPU驱动器28、命令引擎32和处理单元34。在其它实例中,路径再现技术中的全部或几乎全部可在GPU 12中由处理单元34形成的图形管线中实施。在额外实例中,CPU 6的软件应用程序24、图形API 26和/或GPU驱动器28可实施用于配置图形管线的状态且将着色器程序绑定到图形管线以在GPU 12中实施执行本发明的路径再现技术的路径再现管线的技术。在其它实例中,CPU 6的软件应用程序24、图形API 26和/或GPU驱动器28可经配置以将指示待再现路径的数据放置到可由GPU 12存取以再现一或多个路径的一或多个缓冲器(例如,一或多个顶点缓冲器)中。
图3是说明可执行本发明的路径再现技术的实例图形管线40的概念图。在一些实例中,所述图形管线可对应于DirectX(DX)11图形管线。如图3中示出,图形管线40包含资源块42和多个处理级。所述多个处理级包含输入组装器(IA)44、顶点着色器(VS)46、壳着色器(HS)48、棋盘形布置器50、域着色器(DS)52、几何形状着色器(GS)54、光栅化器56、像素着色器(PS)58以及输出合并器60。壳着色器48、棋盘形布置器50和域着色器52可形成图形管线40的棋盘形布置级62。
资源块42可对应于由图形管线40使用的一或多个存储器资源,例如一或多个纹理和/或一或多个缓冲器。资源块42可存储将由图形管线40中的处理级中的一或多者处理的输入数据和/或来自图形管线40中的处理级中的一或多者的输出数据。作为一个实例,资源块42可存储用于执行如本发明中所描述的路径填充操作的模板缓冲器。作为另一实例,资源块42可存储帧缓冲器,其如本发明中所描述保持用于路径片段的填充区域的光栅化版本和/或用于路径片段的来回划线区域的光栅化版本。在一些实例中,形成资源块42的存储器资源可驻留在计算装置2的存储器10和/或GPU高速缓冲存储器14中。
图3中以直拐角所描绘的处理级表示固定功能处理级,且图3中以圆形拐角所描绘的处理级表示可编程处理级。举例来说,如图3中示出,输入组装器44、棋盘形布置器50、光栅化器56和输出合并器60是固定功能处理级,且顶点着色器46、壳着色器48、域着色器52、几何形状着色器54和像素着色器58是可编程处理级。可编程级中的每一者可经配置以执行特定类型的着色器程序。举例来说,顶点着色器46可经配置以执行顶点着色器程序,壳着色器48可经配置以执行壳着色器程序等。不同类型的着色器程序中的每一者可在GPU 12的共同着色器单元上或在专用于执行一或多个特定类型的着色器程序的一或多个专用着色器单元上执行。
如图3中示出,输入组装器44、顶点着色器46、壳着色器48、域着色器52、几何形状着色器54、像素着色器58和输出合并器60通信地耦合到资源块42。输入组装器44、顶点着色器46、壳着色器48、域着色器52、几何形状着色器54、像素着色器58和输出合并器60经配置以检索和/或接收来自资源块42的输入数据。几何形状着色器54和输出合并器60经配置以将输出数据写入到资源块42。上述图形管线40中的处理级与资源块42之间的通信的配置仅是在图形管线40的处理级与资源块42之间可如何配置通信的一个实例。在其它实例中,在图形管线40的处理级与资源块42之间可提供更多或更少的单向和/或双向通信信道。
关于DirectX 11图形管线的大体操作的额外背景信息可参见http://msdn.microsoft.com/en-us/library/windows/desktop/ff476882%28v=vs.85%29.aspx,其整个内容以引用的方式并入本文中。关于DirectX 11图形管线的大体操作的进一步信息可参见辛克(Zink)等人的“以Direct3D 11进行的实际再现和计算”CRC出版社(2011年),其整个内容以引用的方式并入本文中。
如上文所论述,所述两个主路径再现操作是:(1)填充路径片段;以及(2)来回划动路径片段。现将描述用于以图形再现管线40(例如,DirectX 11图形管线)执行这些操作中的每一者的解决方案。
填充操作可利用两遍次方法,其可大体上涉及以下步骤:
遍次1
1.将路径片段棋盘形布置为多个线段。
2.产生每个线段的三角形基元。
3.将全部三角形基元再现到模板缓冲器中。
遍次2
4.使用模板缓冲器再现路径片段限界框。
对于第一遍次,CPU 6可将指示待再现路径片段的数据放置到顶点缓冲器的一或多个顶点中。在一些实例中,顶点缓冲器可对应于图2中所示的路径数据36。用于顶点缓冲器中的顶点的基元拓扑可在一些实例中为片控制列表。对于线,片控制列表中的顶点可包含指示所述线的端点的坐标(例如,(x0,y0)和(x1,y1))的数据。对于三次贝塞尔曲线,片控制列表中的顶点可包含指示界定所述曲线的四个控制点的坐标(例如,(x0,y0)、(x1,y1)、(x2,y2)、(x3,y3))的数据。对于二次贝塞尔曲线,片控制列表中的顶点可包含指示界定曲线的三个控制点而非四个控制点的坐标的数据。对于椭圆形弧,片控制列表中的顶点可包含指示椭圆形弧的端点参数化的数据或指示椭圆形弧的中心参数化的数据。CPU 6还可将指示待再现路径片段的类型的数据放置到片控制列表的原本未使用的顶点属性中。
现将描述由GPU 12接收且使用以执行路径再现的路径数据36的一个实例格式。应理解这仅是指示待再现路径和/或待再现路径片段的数据可如何由CPU 6提供到GPU 12的一个实例且其它实例是可能的且在本发明的范围内。在此实例中,GPU 12接收每一路径片段作为四个(4)控制点片列表基元。在此实例中,片列表中的顶点(例如,控制点)中的每一者包含界定相应顶点(例如,控制点)的属性的三(3)个浮动属性。
对于线路径片段,输入路径数据可采取以下形式或相似形式:
在此实例中,每一行表示四个控制点片列表的顶点或控制点,且圆括号中的每一参数表示相应顶点或控制点的属性。在此实例中,第一控制点的最后属性存储指示待再现路径片段的类型的数据(即,“路径片段类型指示符”)。具体来说,在此实例中路径片段类型指示符是2.0f,其意味着所述路径片段是线路径片段。X0、Y0、X1、Y1是线路径片段的端点的坐标,其中(X0,Y0)表示第一端点且(X1,Y1)表示第二端点。
在此实例中剩余顶点和属性可未使用和/或可用以指示路径片段的其它属性。路径片段的其它属性可包含例如路径片段是否为开放路径的开始或末端、路径片段是否应针对路径显示、末端盖是否应放置于路径片段的末端上、应使用何种类型的末端盖(如果存在)、是否应在路径片段的末端上放置接合点,以及将使用何种类型的接合点(如果存在)。
用于三次贝塞尔路径片段的输入路径数据可采取以下形式或相似形式:
在此实例中,每一行表示四个控制点片列表的顶点或控制点,且圆括号中的每一参数表示相应顶点或控制点的属性。在此实例中,第一控制点的最后属性存储指示待再现路径片段的类型的数据(即,“路径片段类型指示符”)。具体来说,在此实例中路径片段类型指示符是3.0f,其意味着所述路径片段是三次贝塞尔曲线路径片段。X0-X3和Y0-Y3是用于三次贝塞尔路径片段的控制点的坐标,其中(X0,Y0)表示第一控制点,(X1,Y1)表示第二控制点等。在此实例中剩余顶点和属性可未使用和/或可用以指示路径片段的其它属性。在一些实例中,路径片段的其它属性可包含类似于上文相对于线路径片段描述的属性。
相似输入可用于二次贝塞尔路径片段,不同之处在于可提供三个控制点而非四个控制点,且路径片段类型指示符可为不同的以区分所述基元与三次贝塞尔路径片段。举例来说,用于二次贝塞尔路径片段的输入路径数据可采取以下形式或相似形式:
在此实例中,每一行表示四个控制点片列表的顶点或控制点,且圆括号中的每一参数表示相应顶点或控制点的属性。在此实例中,第一控制点的最后属性存储指示待再现路径片段的类型的数据(即,“路径片段类型指示符”)。具体来说,在此实例中路径片段类型指示符是1.0f,其意味着所述路径片段是二次贝塞尔路径片段。X0-X2和Y0-Y2是用于二次贝塞尔路径片段的控制点的坐标,其中(X0,Y0)表示第一控制点,(X1,Y1)表示第二控制点等。在此实例中剩余顶点和属性可未使用和/或可用以指示路径片段的其它属性。在一些实例中,路径片段的其它属性可包含类似于上文相对于线路径片段描述的属性。
在一些实例中,用于椭圆形弧路径片段的输入路径数据可包含指示所述椭圆形弧路径片段的中心参数化的数据。举例来说,用于椭圆形弧路径片段的输入路径数据可采取以下形式或相似形式:
在此实例中,每一行表示四个控制点片列表的顶点或控制点,且圆括号中的每一参数表示相应顶点或控制点的属性。在此实例中,第一控制点的最后属性存储指示待再现路径片段的类型的数据(即,“路径片段类型指示符”)。在此实例中,路径片段类型指示符可为4.0、4.1、4.2或4.3中的任一者,其分别对应于大顺时针(LCW)椭圆形弧、大逆时针(LCCW)椭圆形弧、小顺时针(SCW)椭圆形弧以及小逆时针(SCCW)椭圆形弧。X0、X1和Y0、Y1是椭圆形弧路径片段的端点坐标,其中(X0,Y0)表示弧的初始端点且(X1,Y1)表示弧的最终端点。另外,rH和rV分别表示水平和垂直半径,c.x和c.y是表示所述椭圆形弧路径片段是其一部分的椭圆的中心点的坐标(c.x,c.y),angle表示在以(rh,rv)按比例缩放之前测量的所述椭圆相对于x轴线的逆时针旋转角度,theta0表示所述椭圆形弧的初始点的角度(如在未按比例缩放圆上测量),且theta1表示所述椭圆形弧的最终点的角度(如在未按比例缩放圆上测量)。特别地,即使以上指定的实例输入数据形式是中心参数化,输入数据形式仍可包含弧的初始和最终端点的坐标(即,(X0,Y0)、(X1,Y1))。在一些实例中,此类坐标可用以确保所得几何形状的密封性。
在其它实例中,用于椭圆形弧路径片段的输入路径数据可包含指示所述椭圆形弧路径片段的端点参数化的数据。举例来说,用于椭圆形弧路径片段的输入路径数据可采取以下形式或相似形式:
在此实例中,每一行表示四个控制点片列表的顶点或控制点,且圆括号中的每一参数表示相应顶点或控制点的属性。在此实例中,第一控制点的最后属性存储指示待再现路径片段的类型的数据(即,“路径片段类型指示符”)。在此实例中,路径片段类型指示符可为4.0、4.1、4.2或4.3中的任一者,其分别对应于大顺时针(LCW)椭圆形弧、大逆时针(LCCW)椭圆形弧、小顺时针(SCW)椭圆形弧以及小逆时针(SCCW)椭圆形弧。X0、X1和Y0、Y1是椭圆形弧路径片段的端点坐标,其中(X0,Y0)表示弧的初始端点且(X1,Y1)表示弧的最终端点。另外,rH和rV分别表示水平和垂直半径,且angle表示在以(rh,rv)按比例缩放之前测量的椭圆相对于x轴线的逆时针旋转角度。
在其中输入路径数据包含以端点参数形式表示的椭圆形弧的实例中,在一些实例中,CPU 6可椭圆形弧的表示从端点参数形式转换为中心参数形式,之后将指示椭圆形弧的数据发送到GPU 12用于再现。举例来说,CPU 6可基于椭圆形弧的端点参数化产生椭圆形弧的中心参数化,且将椭圆形弧的中心参数化发送到GPU 12。椭圆形弧的中心参数化可符合以上指定的实例输入数据形式。中心参数化可由CPU 6使用以找到椭圆形弧的端点切线和/或法线,其又可由CPU 6使用以产生用于由GPU 12再现的接合点基元。
在一些实例中,来回划动操作可使用顶点路径数据输入的三个额外字段来处置末端盖、接合点和开放路径。举例来说,某些顶点坐标可存储指示路径片段是否是开放路径的开始、开放路径的末端以及路径片段是否可丢失((例如,路径片段是开放路径的封闭路径片段)的数据。以下是包含上述顶点属性的实例模板:
在此模板中,第二顶点的z坐标(即第三坐标或属性)上的2.0f指示所述路径片段是开放路径的开始且可发信号到GPU 12以在所述路径片段的开始处放置末端盖(即,起始盖)。第三顶点的z坐标上的2.0f指示所述路径片段是开放路径的终止且可发信号到GPU12以在所述路径片段的末端处放置末端盖。最后顶点的z坐标上的2.0f指示当前基元将丢失(例如,其是开放路径的封闭线或路径片段)。
为了执行路径填充操作,输入组装器44从存储器10获得路径数据36,且将路径数据传递到图形管线40的一或多个后续级上以再现由路径数据36指定的路径片段(例如,路径基元)。举例来说,输入组装器44可从存储于存储器10中的顶点缓冲器获得多个顶点且致使顶点着色器46处理所述顶点。在一些实例中,输入组装器44可将待处理顶点直接传递到顶点着色器46。在额外实例中,输入组装器44可引导顶点着色器46以从资源块42中的顶点缓冲器检索用于处理的特定顶点。
顶点着色器46经配置以处理从输入组装器44和/或资源块42接收的顶点且针对由顶点着色器46处理的每一输入顶点产生输出顶点。举例来说,对于每一输入顶点,顶点着色器46可执行GPU 12的着色器单元上的顶点着色器程序的实例。在一些实例中,顶点着色器46可针对每一输入顶点执行“穿通”顶点着色器程序。所述“穿通”顶点着色器程序可致使顶点着色器46针对每一输入顶点输出对应于所述输入顶点的顶点。在此情况下,如果输出顶点具有与输入顶点相同的属性,那么输出顶点可对应于输入顶点。为了实施“穿通”顶点着色器程序,在一些实例中,顶点着色器46可将恒等变换应用于每一输入顶点以产生具有相同属性的输出顶点。由顶点着色器46接收的输入顶点和由顶点着色器46产生的输出顶点可替代地分别被称作输入控制点和输出控制点。
在其它实例中,顶点着色器46可产生与对应输入顶点的输入属性不等同的输出顶点的一或多个输出属性。举例来说,顶点着色器46可对输入顶点的属性中的一或多者执行实质性的处理以产生输出顶点的一或多个属性。作为一个实例,顶点着色器46可对输入顶点的位置属性执行世界变换、视图变换、投影变换或其任何组合中的一或多者以产生输出顶点的一或多个属性。作为另一实例,顶点着色器46可从输入属性集合增加和/或删除属性以产生输出顶点的输出属性的集合。
棋盘形布置级62(即,壳着色器48、棋盘形布置器50和域着色器级52)可将由输入路径数据界定的路径片段棋盘形布置为多个线段。所述多个线段可近似待再现路径片段的曲率。一股来说,壳着色器48可将从顶点着色器46接收的控制点传递到域着色器52用于进一步处理,且将配置数据提供到棋盘形布置器50。棋盘形布置器50可确定表示特定类型的路径片段的一或多个参数方程式应评估的值。域着色器52可在由棋盘形布置器50确定的值处评估参数方程式,且针对每一评估输出顶点。在一些实例中,由域着色器52输出的顶点中的每一者可包含指示所述顶点的位置的一或多个属性。在额外实例中,由域着色器52输出的顶点中的每一者可包含指示与所述顶点相关联的路径再现基元的类型的一或多个属性。
在一些实例中,壳着色器48可处理从顶点着色器46和/或资源块42接收的控制点且可针对由壳着色器48执行的壳着色器程序的每一实例产生输出控制点。举例来说,对于将由壳着色器48产生的每一输出控制点,壳着色器48可执行GPU 12的着色器单元上的壳着色器程序的实例。在一些实例中,壳着色器48可针对每一输出控制点执行“穿通”壳着色器程序。“穿通”壳着色器程序可致使壳着色器48针对每一输出控制点输出对应于输入控制点中的相应一者的控制点。在此情况下,如果输出控制点具有与输入控制点相同的属性,那么输出控制点可对应于输入控制点。
在其它实例中,壳着色器48可产生与输入控制点中的相应一者的输入属性不等同的输出控制点的一或多个输出属性。举例来说,壳着色器48可对输入控制点的属性中的一或多者执行实质性处理以产生输出控制点的一或多个属性。作为另一实例,壳着色器48可从输入属性集合增加和/或删除属性以产生输出控制点的输出属性的集合。在一些实例中,如果GPU 12接收到呈端点参数化形式的椭圆弧的路径数据,那么壳着色器48可将椭圆弧的端点参数化转换为椭圆弧的中心参数化,如下文进一步详细描述。
在额外实例中,壳着色器48可丢弃针对特定再现操作将不再现的基元。丢弃基元可指代致使对应于基元的数据不传递到图形管线40的其它级上进而有效地致使此基元不由管线的剩余部分再现的过程。举例来说,当图形管线40正执行填充操作时,壳着色器48可丢弃接合点基元和盖基元。作为另一实例,当图形管线40正执行来回划动操作时,壳着色器48可针对开放路径丢弃闭合路径基元。闭合路径基元可指代表示闭合环的线路径片段的基元。闭合路径基元通常用于是闭合路径而不是开放路径的路径。在一些实例中,闭合路径基元可由与用于识别路径中的其它线路径片段的基元类型识别符不同的基元类型识别符识别。举例来说,闭合路径基元可由基元类型识别符2.1f而非2.0f识别。
壳着色器48还可执行用于每一路径片段的片恒定功能的实例。片恒定功能可确定且提供配置参数到棋盘形布置器50以当产生输出值时由棋盘形布置器50使用。举例来说,片恒定功能可致使壳着色器48将棋盘形布置因数提供到棋盘形布置器50。棋盘形布置因数可指定棋盘形布置器50将应用于特定棋盘形布置域的棋盘形布置程度(例如,所述域应细分的精细程度和/或所述域应细分为的较小对象的数目)。在一些实例中,壳着色器48可致使棋盘形布置器50执行用于三次贝塞尔曲线的4x棋盘形布置、用于圆形接合点和盖的4x棋盘形布置,和用于线段的1x棋盘形布置。
作为另一实例,片恒定功能可致使壳着色器48将在棋盘形布置期间将使用的棋盘形布置域的类型提供到棋盘形布置器50。棋盘形布置域可指代由棋盘形布置器50使用以产生用于由域着色器52使用的多个坐标的对象。棋盘形布置域在概念上可对应于由棋盘形布置器50细分为多个较小对象的对象。较小对象的顶点的位置坐标随后发送到域着色器52用于进一步处理。在一些实例中,棋盘形布置域的类型可选择为方形、三角形和等值线中的一者。在一些实例中,域细分为的较小对象可对应于三角形、线段或点。在一些实例中,壳着色器48可指定等值线棋盘形布置域类型且指定棋盘形布置器50应将等值线域细分为线段。
棋盘形布置器50可针对由棋盘形布置级62处理的每一路径片段产生多个输出值。所述输出值可确定表示特定类型路径片段的一或多个参数方程式应由域着色器52评估的值。在一些实例中,棋盘形布置器50可基于由壳着色器48提供到棋盘形布置器50的一或多个棋盘形布置因数和/或棋盘形布置域类型而产生多个输出值。举例来说,棋盘形布置器50可将等值线细分为多个线段,且针对归一化坐标系中的多个线段的每一端点产生输出值。
域着色器52可从棋盘形布置器50接收输出值且从壳着色器48接收用于路径片段的控制点,且产生对应于近似路径片段的曲率和/或形状的多个经棋盘形布置线段的输出顶点。举例来说,针对从棋盘形布置器50接收的输出值中的每一者,域着色器52可执行GPU 12的着色器单元上的域着色器程序的实例。所述域着色器程序可致使域着色器52针对从棋盘形布置器50接收的输出值中的每一者在基于相应输出值确定的特定值处评估一或多个参数方程式以产生对应于所述相应输出值的输出顶点的位置坐标。用以产生输出顶点坐标的参数方程式的系数中的一或多者可基于从壳着色器48接收的控制点中的一或多者而界定。每一输出顶点可对应于多个经棋盘形布置线段中的一者的端点。两个连续输出顶点可对应于单个经棋盘形布置线段的端点。
在额外实例中,域着色器程序可致使域着色器52产生对应于从棋盘形布置器50接收的输出值中的每一者的输出顶点的法线坐标。举例来说,域着色器程序可致使域着色器52针对从棋盘形布置器50接收的输出值中的每一者在基于相应输出值确定的特定值处评估一或多个额外参数方程式以便产生对应于所述相应输出值的输出顶点的切线坐标。输出顶点的切线坐标可指示在输出顶点处与路径片段交叉的路径片段的切线的方向。域着色器52可基于对应于相应输出顶点的切线坐标产生输出顶点中的每一者的法线坐标。针对特定输出顶点产生的法线坐标可指示法向量,所述法向量指示垂直于在输出顶点处与路径片段交叉的路径片段的切线的方向。
在一些实例中,当图形管线40正执行填充操作时,域着色器52可产生对应于经棋盘形布置线段的端点的位置的顶点而无需产生此类位置的任何法线。在此等实例中,当图形管线40正执行来回划动操作时,域着色器52可在一些实例中产生对应于经棋盘形布置线段的端点的位置的顶点且产生对应于此类位置的法线。
域着色器52可以经排序序列输出顶点,其中邻近顶点的每一集合表示经棋盘形布置线段。线段可共同地近似在顶点缓冲器中界定的路径片段。举例来说,域着色器52可输出以下顶点集合{0,1,2,3,4,5},其界定以下线段:{0,1}、{1,2}、{2,3}、{3,4}、{4,5}。在额外实例中,域着色器52可输出以下顶点集合{0,1,1,2,2,3,3,4,4,5},其可界定与先前实例中所列相同的线段。
在一些实例中,棋盘形布置器50和域着色器52可经配置以根据以下技术均匀地将路径片段棋盘形布置为多个线段。具体来说,棋盘形布置器50可输出用于参数评估的坐标(例如,t=0/T、1/T、2/T...T/T,其中T是棋盘形布置因数)。取决于基元的类型,域着色器52可在由棋盘形布置器50输出的值处评估一或多个参数方程式。
对于线,在一些实例中,T可始终等于1。在此等实例中,域着色器52可不必需要执行任何评估来产生对应于线路径片段的顶点。
对于三次贝塞尔曲线,域着色器52可根据以下参数方程式评估曲线且产生输出顶点:
V(t)=C0*(1-t)3+C1*3*(1-t)2*t+C2*3*(1-t)*t2+C3*t3 (1)
其中t对应于由棋盘形布置器50提供的输出值,V(t)对应于针对特定输出值(即,t)产生的输出顶点,且C0,C1,C2,C3对应于用于三次贝塞尔曲线的控制点。
或者,对于三次贝塞尔曲线,域着色器52可根据以下参数方程式评估曲线且产生输出顶点:
x(t)=X0*(1-t)3+X1*3*(1-t)2*t+X2*3*(1-t)*t2+X3*t3 (2)
y(t)=Y0*(1-t)3+Y1*3*(1-t)2*t+Y2*3*(1-t)*t2+Y3*t3 (3)
其中t对应于由棋盘形布置器50提供的输出值,x(t)对应于针对特定输出值(即,t)产生的输出顶点的x坐标,y(t)对应于针对特定输出值(即,t)产生的输出顶点的y坐标,且(X0,Y0)、(X1,Y1)、(X2,Y2)、(X3,Y3)对应于用于三次贝塞尔曲线的控制点。
对于二次贝塞尔曲线,域着色器52可根据以下参数方程式评估曲线且产生输出顶点:
V(t)=C0*(1-t)2+C1*2*(1-t)*t+C2*t2 (4)
其中t对应于由棋盘形布置器50提供的输出值,V(t)对应于针对特定输出值(即,t)产生的输出顶点,且C0,C1,C2对应于用于二次贝塞尔曲线的控制点。
或者,对于二次贝塞尔曲线,域着色器52可根据以下参数方程式评估曲线且产生输出顶点:
x(t)=X0*(1-t)2+X1*(1-t)*t+X2*t2 (5)
y(t)=Y0*(1-t)2+Y1*(1-t)*t+Y2*t2 (6)
其中t对应于由棋盘形布置器50提供的输出值,x(t)对应于针对特定输出值(即,t)产生的输出顶点的x坐标,y(t)对应于针对特定输出值(即,t)产生的输出顶点的y坐标,且(X0,Y0)、(X1,Y1)、(X2,Y2)对应于用于二次贝塞尔曲线的控制点。
对于椭圆形弧路径片段,域着色器52可根据以下参数方程式评估曲线且产生输出顶点:
x=Centerx+rhCos*cos(anglet)-rvSin*sin(anglet) (7)
y=Centery+rhSin*cos(anglet)+rvCos*sin(anglet) (8)
其中参数化角度anglet是从棋盘形布置器输出t确定,x对应于针对特定参数化角度(即,anglet)产生的输出顶点的x坐标,y对应于针对参数化角度(即,anglet)产生的输出顶点的y坐标,rh表示未旋转椭园的水平半径,rv表示未旋转椭圆的垂直半径,rvCos、rvSin、rhCos和rhSin分别表示rv*Cos(角度)、rv*Sin(角度)、rh*Cos(角度)和rh*Sin(角度),且angle表示在通过(rh,rv)按比例缩放之前测量的椭圆相对于x轴线的逆时针角度。在一些实例中,壳着色器48可经配置以确定(例如,预计算)cos(角度)和sin(角度)和/或确定(例如,预计算)rvCos、rvSin、rhCos和rhSin值,且将这些值提供到域着色器52供用于针对椭圆形弧评估上文所述的参数方程式。
如上文相对于椭圆形弧所论述,在一些实例中,片控制列表中的顶点可包含指示用于椭圆形弧的端点参数化的数据。在此等实例中,壳着色器48(例如,在GPU 12的着色器单元上执行的壳着色器程序)可用以将指示椭圆形弧的端点参数化的数据转换到指示椭圆形弧的中心参数化的数据。
现在描述用于当将椭圆形弧的端点参数化转换到椭圆形弧的中心参数化时寻找椭圆的正确中心的实例技术。所述实例技术可基于由参数集合(x0,y0)、(x1,y1)、rh、rv、φ、fS和fA界定的椭圆的端点表示而确定椭圆和/或椭圆形弧的中心点(cx,cy)以及初始和最终角度θ1和θ2。具有中心点(cx,cy)、半径rh和rv以及旋转角度rot的椭圆可满足隐式方程式(x′)2+(y′)2=1,其中x′=((x-cx)*cos(rot)+(y-cy)*sin(rot))/rh且y′=(-(x-cx)*sin(rot)+(y-cy)*cos(rot))/rv。从(x,y)到(x′,y′)的变换将所要椭圆映射到以原点为中心的单位圆中。
为了确定穿过两个给定点(x0,y0)和(x1,y1)的具有共同半径和旋转角度的一对椭圆形的中心点,首先将平面变换到合适按比例缩放且旋转的坐标系中以使得每一椭圆的方程式变成(x′-cx′)2+(y′-cy′)2=1。随后可发现圆周穿过两个给定点的两个单位圆的中心(即,(cx0′,cy0′)和(cx1′,cy1′))。最后,通过逆变换放置中心点以获得原始坐标系中的解。
穿过点(x0,y0)和(x1,y1)的两个单位圆的中心点由给定,其中xm=(x0+x1)/2、ym=(y0+y1)/2、Δx=(x0-x1)、Δy=(y0-y1)且d=√(1/(Δx2+Δy2)-1/4)。如果d是无限的或虚数,那么分别由于输入点一致或相隔太远而不存在解。通过寻找圆上的端点的斜率且计算反正切可发现角度θ1和θ2。
以下伪码说明根据上述技术计算椭圆中心的过程。在原始椭圆参数的逆变换后findUnitCircles函数由findEllipses调用。
关于将椭圆形弧的端点参数化转换到椭圆形弧的中心参数化的进一步细节可参见2008年12月3日的“OpenVG规范,版本1.1”章节18.4,其在http://www.khronos.org/registry/vg/specs/openvg-1.1.pdf可用且整个内容以引用的方式并入本文中。
几何形状着色器54可从域着色器52接收经棋盘形布置线段且基于经棋盘形布置线段产生多个三角形基元。举例来说,针对经棋盘形布置线段中的每一者,几何形状着色器54可执行GPU 12的着色器单元上的几何形状着色器程序的实例,且基于相应经棋盘形布置线段产生用于经棋盘形布置线段的三角形基元。在一些实例中,针对经棋盘形布置线段中的每一者,几何形状着色器54可从域着色器52接收对应于相应经棋盘形布置线段的两个顶点,且产生对应于三角形基元的一组三个顶点。在一些实例中,三角形基元的所述顶点中的两者可为与两个所接收顶点相同的顶点(例如,具有相同位置坐标)。在此些实例中,几何形状着色器54可基于针对与待再现路径片段相关联的全部经棋盘形布置线段为共同的共同顶点产生第三顶点。所述共同顶点可或可不对应于经棋盘形布置线段的端点中的一者。在一些实例中,所述共同顶点可对应于对应于用于待再现路径片段的经棋盘形布置线段的一组顶点中的第一顶点。
几何形状着色器54可针对由域着色器52产生的经棋盘形布置线段中的每一者调用一次。针对经棋盘形布置线段中的每一者,几何形状着色器54可使用共同控制点作为三角形的第一顶点且使用相应经棋盘形布置线段的两个端点作为三角形的第二和第三顶点而产生三角形基元。举例来说,以上提供实例,其中域着色器52产生以下顶点集合{0,1,2,3,4,5},其界定以下线段:{0,1}、{1,2}、{2,3}、{3,4}、{4,5}。对于以上所列线段序列,几何形状着色器54可产生以下三角形:{C,0,1}、{C,1,2}、{C,2,3}、{C,3,4}、{C,4,5}、{C,4,5},其中C是对全部三角形为共同的任何单一顶点。
光栅化器56可经配置以将多个3D图形基元(例如,点、线和三角形)转换为对应于3D图形基元的多个像素。举例来说,光栅化器56可接收对应于三角形基元的三个顶点,且将所述三个顶点转换为对应于由三角形基元覆盖的屏幕像素位置的多个像素。由三角形基元覆盖的屏幕像素位置可包含对应于三角形的顶点、三角形的边缘和三角形的内部的屏幕像素位置。
像素着色器58可从光栅化器56接收像素,且根据像素着色器程序基于所接收的像素产生经着色像素。举例来说,针对从光栅化器56接收的每一像素,像素着色器58可执行GPU 12的着色器单元上的像素着色器程序的实例。在一些实例中,像素着色器58可针对每一像素执行“穿通”像素着色器程序。“穿通”像素着色器程序可致使像素着色器58针对每一像素输出对应于输入像素中的相应一者的像素。在此情况下,如果输出像素具有与输入像素相同的属性,那么输出像素可对应于输入像素。
在其它实例中,像素着色器58可产生与输入像素中的相应一者的输入属性不等同的输出像素的一或多个输出属性。举例来说,像素着色器58可对输入像素的属性中的一或多者执行实质性处理以产生输出像素的一或多个属性。作为另一实例,像素着色器58可从输入属性集合增加和/或删除属性以产生输出像素的输出属性的集合。
输出合并器60可将从像素着色器58接收的像素数据放置到再现目标(例即,帧缓冲器或模板缓冲器)中。在一些实例中,输出合并器60可基于光栅操作将从像素着色器58接收的像素数据与已经存储于再现目标中的像素数据合并。
为了执行路径填充操作,光栅化器56可将由几何形状着色器54接收的三角形中的每一者光栅化到共同模板缓冲器(例如,存储于资源块42中的缓冲器)中。在第一遍次期间,像素着色器58可停用或设定成“穿通”模式以将输入像素直接传递到输出合并器60。输出合并器60可经配置以根据一或多个模板缓冲器填充技术填入模板缓冲器以使得模板缓冲器存储指示用于路径片段的填充区域的值。
根据第一模板缓冲器填充技术,对于光栅化基元中的每一者,输出合并器60可反转模板缓冲器中的对应于由所述光栅化基元覆盖的像素的值。以此技术,在全部基元已经光栅化到模板缓冲器之后,模板缓冲器中的任何反转值可表示用于待再现路径片段的填充区域。
根据第二模板缓冲器填充技术,对于光栅化基元中的每一者,输出合并器60可在光栅化基元的顶点次序在顺时针方向中定向的情况下递增模板缓冲器中的对应于由光栅化基元覆盖的像素的值,且在光栅化基元的顶点次序在逆时针方向中定向的情况下递减模板缓冲器中的对应于由光栅化基元覆盖的像素的值。以此技术,在全部基元已经光栅化到模板缓冲器之后,模板缓冲器中的任何非零值可表示用于待再现路径片段的填充区域。
图4是说明将使用本发明的路径填充技术填充的实例多边形的概念图。在一些实例中,所述多边形可表示待填充的路径和/或路径片段。在一些实例中,可如下相对于图4中所示的多个连接的线段(p0p1、p1p2、p2、p3等)执行两遍次填充算法:
遍次1
1.清除模板缓冲器且停用对颜色缓冲器中的写入。拾取任意点C。
2.将所述多边形的边界打断为有向线段p0p1、p1p2、...的序列
3.在C处构造三角形扇形中心:Cp0p1、Cp1p2、Cp2p3...
4.绘制每个三角形且将模板操作设定为INVERT(偶/奇)或INCR(非零)。
遍次2
1.绘制覆盖整个屏幕的大方形/三角形且绘制到其中模板值不是零的像素。
在一些实例中,图4中所示的点p1可选择为用于产生三角形扇形的共同点(C),且可产生包含以下三角形的三角形扇形:{p1,p2,p3}、{p1,p3,p4}、{p1,p4,p5}、{p1,p5,p6}、{p1,p6,p7}。图4中所示的路径的目标填充区是区A、D和F的联合。
如图4中所示,区A、D和F仅是在由所述三角形扇形形成的奇数三角形内的区。因此,如果这些三角形是根据其中模板缓冲器中的对应于由光栅化基元覆盖的像素的值被反转的第一模板缓冲器填充技术而再现,那么在全部基元已经光栅化到模板缓冲器之后,模板缓冲器中的任何反转值可对应于区A、D和F的联合(即,用于待再现路径片段的填充区域)。
另外,区A、D和F是在由三角形扇形形成的不平衡数目的顺时针和逆时针三角形内的仅有的区。在不平衡数目的顺时针和逆时针三角形内的区可指代其中所述区在其内部的三角形的总数不等于所述区在其外部的三角形的总数的区。因此,如果这些三角形是根据其中模板缓冲器中的值取决于三角形是在顺时针或逆时针方向中定向而递增或递减的第二模板缓冲器填充技术而再现,那么在全部基元已经光栅化到模板缓冲器之后,模板缓冲器中的任何非零值可对应于区A、D和F的联合(即,用于待再现路径片段的填充区域)。
关于使用模板缓冲器来填充多边形的进一步细节可参见“OpenGL编程指南:学习OpenGL版本1.1的官方指南”,其在http://www.glprogramming.com/red/chapter14.html#name13可用且整个内容以引用的方式并入本文中。
在由几何形状着色器54产生的全部基元已经再现到模板缓冲器中之后第一遍次完成。在第二遍次期间,在启用模板测试的情况下将包含填充区域的限界框(例如,由两个三角形基元形成)再现到再现目标(例如,帧缓冲器)中。模板缓冲器中的数据可致使填充区域内部的像素以填充颜色(在第二再现遍次之前由CPU 6指定)点亮,且致使在填充区域之外的像素保持暗。在第二遍次期间,可停用棋盘形布置级62和几何形状着色器54。顶点着色器46可经配置以执行用于再现3D图形基元的标准顶点着色器操作(例如,变换)。像素着色器58可经配置以执行标准操作和/或经配置以在“穿通”模式中操作。一旦第二遍次完成,再现目标(例如,帧缓冲器)便可存储用于路径片段的填充区域的光栅化版本。
来回划动操作可利用单个遍次方法,其可大体上涉及以下步骤:
1.将路径片段棋盘形布置为多个线段。
2.计算线段的端点的法线。
3.通过使用所述法线加宽所述线段而确定来回划线区域。
4.产生对应于所述来回划线区域的基元。
5.在启用深度测试的情况下将所述基元再现到再现目标。
输入处理和棋盘形布置操作实质上类似于相对于填充操作描述的输入处理和棋盘形布置操作,并且因此将不进一步详细描述。
除域着色器52评估参数方程式以产生顶点的位置坐标之外,如上文相对于填充操作所描述,域着色器52还可在来回划动操作期间产生顶点的法线坐标(例如,法向量或法线)。针对特定输出顶点产生的法线坐标可指示法向量,所述法向量指示垂直于在输出顶点处与路径片段交叉的路径片段的切线的方向。
为了产生法线,域着色器52可针对由棋盘形布置器50产生的值中的每一者评估额外参数方程式,且可基于每一评估输出一或多个法线。举例来说,针对从棋盘形布置器50接收的输出值中的每一者,域着色器52可在基于相应输出值确定的特定值处评估一或多个参数方程式以产生对应于相应输出值的输出顶点的一或多个切线坐标。输出顶点的切线坐标可指示在输出顶点处与路径片段交叉的路径片段的切线的方向。域着色器52可基于对应于相应输出顶点的切线坐标产生输出顶点中的每一者的法线坐标。针对特定输出顶点产生的法线坐标可指示法向量,所述法向量指示垂直于在输出顶点处与路径片段交叉的路径片段的切线的方向。
在某些情况下,法线坐标可输出为由域着色器52输出的顶点的属性。举例来说,对于来回划动操作,由域着色器52产生的输出顶点可包含指示所述顶点的位置的一或多个属性,指示与所述顶点相关联的法线的一或多个属性,以及指示与所述顶点相关联的路径再现基元的类型(例如,路径片段的类型)的一或多个属性。法线属性可指示路径片段上对应于由棋盘形布置器50产生的参数值的点的法向量。
对于线段,线段的端点中的每一者的切线的方向可对应于线段自身的方向。因此,通过取线段的终点与起始点之间的向量差可获得切线坐标(例如,(X1-X0,Y1-Y0))。
为了产生弯曲路径片段(例如,贝塞尔曲线和椭圆形弧)的法线,可使用用于弯曲路径片段的切线公式。一股来说,用于曲线和椭圆形弧(可用以确定法线)的切线方程式是上文相对于产生曲线和弧的顶点描述的参数方程式的导数。
举例来说,对于三次贝塞尔曲线,域着色器52可基于以下参数方程式产生曲线的输出顶点的切线坐标:
N(t)=C0*-3*(1-t)2+C1*(-6*(1-t)*t+3*(1-t)2)+C2
(9)
*(-3*t2+6*(1-t)*t)+C3*3*t2
其中t对应于由棋盘形布置器50提供的输出值,N(t)对应于针对特定输出值(即,t)产生的一或多个切线坐标,且C0,C1,C2,C3对应于用于三次贝塞尔曲线的控制点。以上提供的用于二次贝塞尔曲线的参数方程式的导数可用以以类似方式产生用于二次贝塞尔曲线的切线坐标。
或者,对于三次贝塞尔曲线,域着色器52可基于以下参数方程式产生曲线的输出顶点的切线坐标:
x(t)=X0*-3*(1-t)2+X1*(-6*(1-t)*t+3*(1-t)2)+X2
(10)
*(-3*t2+6*(1-t)*t)+X3*3*t2
y(t)=Y0*-3*(1-t)2+Y1*(-6*(1-t)*t+3*(1-t)2)+Y2
(11)
*(-3*t2+6*(1-t)*t)+Y3*3*t2
其中t对应于由棋盘形布置器50提供的输出值,x(t)对应于对应于特定输出值(即,t)的切线的x坐标,y(t)对应于对应于特定输出值(即,t)的切线的y坐标,且(X0,Y0)、(X1,Y1)、(X2,Y2)、(X3,Y3)对应于用于三次贝塞尔曲线的控制点。以上提供的用于二次贝塞尔曲线的参数方程式的导数可用以以类似方式产生用于二次贝塞尔曲线的切线坐标。
对于椭圆形弧路径片段,域着色器52可基于以下参数方程式产生曲线的输出顶点的切线坐标:
Tanx=-rhCos*sin(anglet)-rvSin*cos(anglet) (12)
Tany=-rhSin*sin(anglet)+rvCos*cos(anglet) (13)
其中参数化角度anglet是从棋盘形布置器输出(即,t)确定,Tanx是对应于特定参数化角度(即,anglet)的椭圆形弧的切线的x坐标,Tany是对应于特定参数化角度(即,anglet)的椭圆形弧的切线的y坐标,rh表示未旋转椭园的水平半径,rv表示未旋转椭圆的垂直半径,rvCos、rvSin、rhCos和rhSin分别表示rv*Cos(角度)、rv*Sin(角度)、rh*Cos(角度)和rh*Sin(角度),且angle表示在通过(rh,rv)按比例缩放之前测量的椭圆相对于x轴线的逆时针角度。在一些实例中,壳着色器48可经配置以确定(例如,预计算)cos(角度)和sin(角度)和/或确定(例如,预计算)rvCos、rvSin、rhCos和rhSin值,且将这些值提供到域着色器52供用于针对椭圆形评估上文所述的参数方程式。
在一些实例中,域着色器52可根据以下方程式基于相应输出顶点的切线坐标产生输出顶点中的每一者的法向量(例如,法线坐标):
法线=归一化(-Tany,Tanx) (14)
其中法线对应于特定顶点的法向量,Tanx对应于在特定顶点处与路径片段交叉的路径片段的切线的x坐标,Tany对应于在特定顶点处与路径片段交叉的路径片段的切线的y坐标,且normalize(x,y)是产生输入向量(x,y)的归一化的版本的函数。向量(x,y)的归一化版本可指代具有与向量(x,y)相同的方向和单位长度(即,一的长度(例如,范数))的向量。
如上文相对于椭圆形弧所论述,在一些实例中,片控制列表中的顶点可包含指示端点参数化的数据。在此等实例中,壳着色器48可将指示椭圆形弧的端点参数化的数据转换到指示椭圆形弧的中心参数化的数据。
几何形状着色器54可接收由域着色器52产生的线段和法线,且产生在空间上对应于用于线段中的每一者的来回划线区域的基元(例如,三角形)。用于线段中的每一者的来回划线区域可共同地近似用于原始路径片段的来回划线区域。
一股来说,每一线段可由路径上的两个连续点(p0,p1)和在所述点中的每一者处的法线(n0,n1)界定。为了确定用于线段的来回划线区域,几何形状着色器54可根据以下方程式确定用于线段的来回划线区域的四个拐角点(u0,l0,u1,l1):
u0=p0+n0*StrokeWidth (15)
l0=p0-n0*StrokeWidth (16)
u1=p1+n1*StrokeWidth (17)
l1=p1-n1*StrokeWidth (18)
其中p0和p1是正确定来回划线区域的线段的端点,n0是对应于p0的法向量,n1是对应于p1的法向量,且StrokeWidth是由用户应用程序界定且传递到GPU 12(例如,经由一或多个顶点属性和/或状态命令)的来回划线宽度。
图5和6图解说明用于给定线段的两个不同来回划线区域配置。取决于来回划线宽度的值,两个不同情况可适用于如图5和6中示出的来回划线区域的形状。点c经界定为其中法向量交叉的点(即,由u0和l0形成的线与由u1和l1形成的线的交叉点),且可被称为交叉点。
几何形状着色器54可确定所述交叉点是在来回划线区域之外(例如,图5)还是在来回划线区域内部(例如,图6),且基于所述确定产生在空间上对应于所述来回划线区域的一或多个基元。为了确定交叉点是否在来回划线区域之外,几何形状着色器54可确定是否来回划线宽度<min(u0c,u1c)。如果来回划线宽度<min(u0c,u1c),那么几何形状着色器54可确定交叉点在来回划线区域之外。否则,几何形状着色器54可确定交叉点在来回划线区域的内部。
如果来回划线宽度足够较小(来回划线宽度<min(u0c,u1c))以使得两个线段(u0,u1)和(l0,l1)具有相同定向,那么用于线段的来回划线区域的形状可为方形(图5)。否则用于线段的来回划线区域的形状可为两个头对头三角形(即,蝶形)(图6)。
如果交叉点在来回划线区域之外(例如,图5),那么几何形状着色器54可产生两个三角形以形成在空间上对应于来回划线区域的方形。举例来说,几何形状着色器54可使用以下顶点组合{u0,u1,l1}和{l1,l0,u0}产生两个三角形。
如果交叉点在来回划线区域的内部(例如,图6),那么几何形状着色器54可产生两个三角形以形成在空间上对应于来回划线区域的蝶形。举例来说,几何形状着色器54可在{u0,u1,c}三角形在顺时针方向中定向的情况下使用以下顶点组合{u0,u1,c}和{c,l0,l1}产生两个三角形,且在{u0,u1,c}三角形在逆时针方向中定向的情况下使用以下顶点组合{u0,u1,c}和{c,l1,l0}产生两个三角形。
为了确定{u0,u1,c}三角形是否在顺时针方向中定向,几何形状着色器54可确定以下界定的方程式中是否sin(a0+a1)>0。如果sin(a0+a1)>0,那么几何形状着色器54可确定{u0,u1,c}三角形在顺时针方向中定向。否则,几何形状着色器54可确定{u0,u1,c}三角形在逆时针方向中定向。
可用以确定来回划线区域的形状并且还确定中心点C的坐标的距离u0c和u1c可基于以下公式确定:
v=normalize(n1-n0) (19)
sin(a0)=n0×v,cos(a0)=n0·v (20)
sin(a1)=v×n1,cos(a1)=v·n1 (21)
sin(a0+a1)=sin(a0)cos(a1)+cos(a0)sin(a1) (22)
c=u0-n0·u0c (24)
其中n0是用于端点p0的法线,且n1是用于端点p1的法线。
如果来回划线宽度<min(u0c,u1c),那么用于线段的来回划线区域可为简单的方形。在此情况下,GPU 12可绘制两(2)个三角形(u0,u1,l1)和(l1,l0,u1)。在一些实例中,不管p0、p1、n0、n1的位置如何,当来回划线宽度<min(u0c,u1c)时,两个三角形可始终为顺时针。
如果来回划线宽度>min(u0c,u1c),那么存在2个情况。如果sin(a0+a1)>0,意味着三角形(u0,u1,c)是顺时针,那么由GPU 12绘制的三角形是(u0,u1,c)和(c,l0,l1)。如果sin(a0+a1)<0,那么由GPU 12绘制的三角形是(u1,u0,c)、(c,l1,l0)。
在某些情况下,当(例如,由几何形状着色器54)产生对应于线段的来回划线区域的基元时,如果来回划线区域中的一者或两者形成蝶形形状(例如图6),那么相邻线段可形成T形接头。这是因为中心点C针对不同线段不在相同位置。
图7是说明可在三角形(U0,U1,C1)与(U1,U2,C2)之间形成的实例T接头的概念图。所述T接头可致使最终再现结果中一或多个像素丢失(例如,不恰当地再现和/或堵塞)。在一些实例中,为了解决上述问题,GPU 12可绘制两个有帮助的三角形(C1,U0,L0)、(C1,U1,L1)。为了确保所述两个三角形将不会因为背面剔除而被剔除,如果GPU 12包含背面剔除特征(例如,作为光栅化器56的一部分),那么在一些实例中可停用或关闭此特征。
光栅化器56可将由几何形状着色器54产生的基元中的每一者光栅化到再现目标(例如,帧缓冲器)中。在输出合并器级期间,由几何形状着色器54产生的基元覆盖的全部像素可以来回划线颜色(在再现遍次之前由CPU指定)点亮。像素着色器58可经配置以在再现遍次期间执行标准操作和/或经配置以在“穿通”模式中操作。在再现由几何形状着色器54产生的全部基元之后单一再现遍次完成。一旦再现遍次完成,再现目标(例如,帧缓冲器)便可存储用于路径片段的来回划线区域的光栅化版本。
如上文所论述,除再现在空间上对应于待再现路径片段的来回划线区域的基元之外,来回划动操作还可涉及将各种类型的末端盖应用于路径的末端和/或应用路径的内部路径片段的端点之间的各种类型的接合点。在一些实例中,这些操作可能够使用下文描述的技术中的一或多者以DX11管线实施。
现在描述用于再现接合点的技术。接合点可在不同路径片段会合的位置处应用。在一些实例中,可存在三个不同类型的接合点:(1)斜边;(2)斜接;以及(3)圆形。在一些实例中,待再现的接合点的类型可存储于GPU 12中的缓冲器(例如,片恒定缓冲器)中,且CPU 6可通过将指示接合点类型的值放置到所述缓冲器中而指示将用于再现的接合点的类型。
接合点可在两个路径片段会合的位置处形成。为了再现接合点,CPU 6可将指示两个路径片段会合处位置的数据和指示在所述位置处的两个切线(即,每一路径片段一个切线)的数据放置到缓冲器(例如,路径数据36中的顶点缓冲器)中用于由GPU 12消耗。
在一些实例中,用于接合点的输入路径数据可采取以下形式或相似形式:
在此实例中,每一行表示四个控制点片列表的顶点或控制点,且圆括号中的每一参数表示相应顶点或控制点的属性。在此实例中,第一控制点的最后属性存储指示待再现路径片段的类型的数据(即,“路径片段类型指示符”)。具体来说,在此实例中路径片段类型指示符是5.0f,其意味着所述路径片段是接合点路径片段。接合点路径片段的类型(例如,斜边、斜接或圆形)可由存储于GPU 12的缓冲器(例如,片恒定缓冲器)中的值指示。在此实例中,pos.x和pos.y是对应于所述两个路径片段会合的位置的(x,y)坐标,tan0.x和tan0.y是对应于在所述两个路径片段会合的位置处两个路径片段中的第一者的切线的(x,y)坐标,且tan1.x和tan1.y是对应于在所述两个路径片段会合的位置处两个路径片段中的第二者的切线的(x,y)坐标。路径片段中的每一者的切线坐标可指示相应路径片段的切线相对于所述两个路径片段会合的位置的方向。在一些实例中,CPU 6可基于指示所述两个路径片段中的一者或两者的数据而确定切线的坐标。在此实例中剩余顶点和属性可未使用和/或可用以指示接合点的其它属性。
在一些实例中,为了再现接合点,壳着色器48可将对应于接合点的切线坐标{(tan0.x,tan0.y)和(tan1.x,tan1.y)}从笛卡耳坐标转换到角度坐标。在其它实例中,壳着色器48可在将笛卡耳坐标转换到角度坐标之前将对应于接合点的切线{(tan0.x,tan0.y)和(tan1.x,tan1.y)}归一化。在额外实例中,壳着色器48可将切线的角度坐标放置到由壳着色器48接收的片控制列表的一或多个属性中,且将经修改片控制列表传递到域着色器52用于进一步处理。
作为一个具体实例,针对接合点由壳着色器48接收的输入片控制列表可如下:
在此实例中,壳着色器48可针对每一切线产生角度坐标并且针对每一切线将角度坐标放置到对应于相应切线的控制点的第三属性中。在一些实例中,所得片控制列表可采取以下形式:
在一些实例中,壳着色器48可实施以下伪码和/或着色器程序代码以归一化切线,且将切线的笛卡耳坐标转换为角度坐标:
图8是说明实例斜边接合点的概念图。对于斜边接合点,GPU 12可再现在空间上对应于斜边区域的一或多个三角形(例如,图8中所示的亮着色三角形)。如图8中示出,点c可对应于两个路径片段会合处的路径片段的端点,u0和l0可对应于基于端点(即,c)的第一路径片段产生的拐角点,且u1和l1可对应于基于端点(即,c)的第二路径片段产生的拐角点。
在一些实例中,域着色器52可从壳着色器48接收指示待再现接合点的数据,产生对应于待再现接合点的一或多个顶点,且将所述顶点提供到几何形状着色器54用于进一步处理。指示待再现接合点的数据可包含指示两个路径片段会合的位置的数据、指示在两个路径片段会合的位置处两个路径片段中的第一者的切线的数据、指示在两个路径片段会合的位置处两个路径片段中的第二者的切线的数据,以及指示路径再现基元的类型(例如,在此情况下的接合点)的数据。在一些实例中,指示待再现接合点的数据可呈片控制列表(例如,以上指定的片控制列表)的形式。
对于与斜边接合点相关联的切线中的每一者,域着色器52可基于指示由域着色器52接收的相应切线的数据产生对应于相应切线的法线。举例来说,域着色器52可基于方程式(14)产生每一切线的法线。由域着色器52产生的一或多个顶点可包含指示两个路径片段会合的共同端点(即,点c)的一或多个属性,指示在共同端点处路径片段中的每一者的法线的一或多个属性,以及指示路径再现基元的类型(例如,在此情况下的接合点)的一或多个属性。
在一些实例中,几何形状着色器54可从域着色器52接收所述一或多个顶点,且基于如本发明中所描述的方程式(15)到(18)中的一或多者确定两个路径片段会合的路径片段的端点的拐角点(u0,u1,l0,l1)。一股来说,存在可对应于斜边接合点区域的两个可能的三角形(c,l1,l0)和(c,u0,u1)。图8图解说明其中(c,l1,l0)三角形对应于斜边接合点区域的实例。
为了避免绘制不必要的三角形,在一些实例中,几何形状着色器54可取差向量(u0-l0)和(u1-l1)的叉积,且基于差向量的叉积识别将绘制哪一三角形。在其它实例中,几何形状着色器54可取在两个路径片段会合的端点(即,c)处交叉路径片段中的每一者的法线的叉积,且基于差向量的叉积识别将绘制哪一三角形。几何形状着色器54可产生对应于斜边区域的所识别三角形的三角形基元且将所述三角形基元传递到图形管线40的一或多个后续级(例如,光栅化器56)上以使得GPU 12再现所识别三角形。
在上述实例中的任一者中,几何形状着色器54可基于叉积的正负号确定针对斜边接合点将绘制或再现哪一三角形。举例来说,如果以上实例中的任一者中叉积的正负号是负的,那么几何形状着色器54可确定绘制用于斜边接合点的(c,l1,l0)三角形且不绘制用于斜边接合点的(c,u0,u1)三角形。另一方面,如果以上实例中的任一者中叉积的正负号是正的,那么几何形状着色器54可确定绘制用于斜边接合点的(c,u0,u1)三角形且不绘制三角形(c,l1,l0)。在一些实例中,确定绘制特定三角形可对应于几何形状着色器54产生且输出特定三角形,且确定不绘制特定三角形可对应于几何形状着色器54不产生和/或不输出特定三角形。
图形管线40可针对斜边接合点区域再现由几何形状着色器54产生的一或多个三角形。一旦所述一或多个三角形已经再现,再现目标(例如,帧缓冲器)便可存储所述两个路径片段之间的斜边接合点的来回划线区域的光栅化版本。
图9是说明实例斜接接合点的概念图。对于斜接接合点,GPU 12可再现在空间上对应于斜接区域的一或多个三角形。针对斜接接合点再现的三角形中的一者可类似于如上文相对于图8所描述的针对斜边接合点再现的三角形。然而,斜接接合点与斜边接合点相比可具有额外三角形。
如图9中示出,点c可对应于两个路径片段会合的路径片段的端点,u0和l0可对应于基于所述端点(即,c)的第一路径片段产生的拐角点,且u1和l1可对应于基于所述端点(即,c)的第二路径片段产生的拐角点。类似于上文相对于图8描述的斜边接合点,域着色器52可从壳着色器48接收指示待再现接合点的数据,基于由域着色器52接收的指示切线数据而产生与所述接合点相关联的切线中的每一者的法线,且将对应于待再现接合点的一或多个顶点提供到几何形状着色器54用于进一步处理。所述一或多个顶点可包含指示两个路径片段会合的共同端点(即,点c)的一或多个属性,指示在所述共同端点处路径片段中的每一者的法线的一或多个属性,以及指示路径再现基元的类型(例如,在此情况下的接合点)的一或多个属性。
在一些实例中,几何形状着色器54可从域着色器52接收所述一或多个顶点,且确定两个路径片段会合的路径片段的端点的拐角点(u0,u1,l0,l1)。在一些实例中,几何形状着色器54可基于如本发明中所描述的方程式(15)到(18)中的一或多者而确定拐角点(u0,u1,l0,l1)。
为了再现斜接接合点,几何形状着色器54可根据以下方程式确定两个差向量:
v0=(u0-l0)/2 (25)
v1=(u1-l1)/2 (26)
其中v0和v1对应于两个差向量,u0和u1对应于基于两个邻近路径片段会合的端点(即,c)的第一路径片段产生的拐角点,且l0和l1对应于基于所述两个邻近路径片段会合的端点(即,c)的第二路径片段产生的拐角点。
几何形状着色器54可根据以下方程式将所述两个差向量加在一起以确定中心方向:
v=(v0+v1)/2 (27)
其中v对应于中心方向,且v0和v1对应于在方程式(25)和(26)中计算的两个差向量。
几何形状着色器54可根据以下方程式确定斜接长度:
斜接长度=(来回划线宽度*来回划线宽度)/(4*|v|) (28)
其中斜接长度对应于斜接的长度,且v对应于在方程式(27)中计算的中心方向。如图9中示出,斜接长度可对应于第一点与第二点之间的长度。第一点可对应于其中用于路径片段的来回划线区域在所述路径片段的第一侧上会合的点。第二点可对应于其中用于路径片段的来回划线区域在所述路径片段的与所述第一侧相对的第二侧上会合的点。
如果斜接长度大于斜接限制乘以来回划线宽度,那么几何形状着色器54可以斜边接合点置换所述斜接接合点。否则,几何形状着色器54可根据以下方程式确定斜接点:
其中m对应于斜接点,v对应于在方程式(27)中计算的中心方向,且c对应于所述两个邻近路径片段会合的端点。
GPU 12可再现在空间上对应于斜接区域的一或多个三角形。一股来说,存在可对应于斜接接合点区域的两个可能的三角形集合{(c,l1,l0),(m,l0,l1)}和{(c,u0,u1),(m,u0,u1)}。图9图解说明其中{(c,l1,l0),(m,l0,l1)}三角形集合对应于斜接接合点区域的实例。
为了避免绘制不必要的三角形,在一些实例中,几何形状着色器54可取差向量(u0-l0)和(u1-l1)的叉积,且基于差向量的叉积识别将绘制哪一三角形集合。在其它实例中,几何形状着色器54可取在两个路径片段会合的端点(即,c)处交叉路径片段中的每一者的法线的叉积,且基于差向量的叉积识别将绘制哪一三角形集合。几何形状着色器54可产生对应于斜接区域的三角形的经识别三角形集合中每一三角形的三角形基元,且将三角形基元传递到图形管线40的一或多个后续级(例如,光栅化器56)上以使得GPU12再现所述经识别三角形集合。
在上述实例中的任一者中,几何形状着色器54可基于叉积的正负号确定针对斜接接合点将绘制或再现哪些三角形。举例来说,如果在以上实例中的任一者中叉积的正负号是负的,那么几何形状着色器54可确定针对斜接接合点绘制{(c,l1,l0),(m,l0,l1)}三角形集合中的三角形且针对斜接接合点不绘制{(c,u0,u1),(m,u0,u1)}三角形集合中的三角形。另一方面,如果在以上实例中的任一者中叉积的正负号是正的,那么几何形状着色器54可确定针对斜接接合点绘制{(c,u0,u1),(m,u0,u1)}三角形集合中的三角形且针对斜接接合点不绘制{(c,l1,l0),(m,l0,l1)}三角形集合中的三角形。在一些实例中,确定绘制特定三角形集合中的三角形可对应于几何形状着色器54产生且输出所述特定三角形集合中的三角形,且确定不绘制特定三角形集合中的三角形可对应于几何形状着色器54不产生和/或不输出所述特定三角形集合中的三角形。
图形管线40可针对斜接接合点区域再现由几何形状着色器54产生的三角形。一旦所述一或多个三角形已经再现,再现目标(例如,帧缓冲器)便可存储所述两个路径片段之间的斜接接合点的来回划线区域的光栅化版本。
图10是说明实例圆形接合点的概念图。如图10中示出,点c可对应于两个路径片段会合处的路径片段的端点,u0和l0可对应于基于端点(即,c)的第一路径片段产生的拐角点,且u1和l1可对应于基于端点(即,c)的第二路径片段产生的拐角点。本文所描述的是用于再现圆形接合点的两个不同技术。
根据用于再现圆形接合点的第一技术,图形管线40可使用棋盘形布置级62来产生针对圆形接合点区域的多个切片近似。每一切片近似可对应于圆形接合点区域的相应切片,其中每一切片由共同端点(即,c)和沿着圆形接合点的弯曲边缘的两个相应点界定。为了近似切片,图形管线40可使用沿着圆形接合点的弯曲边缘的与所述切片相关联的两个相应点之间的线段来近似所述切片的弯曲边缘的曲率。为了再现圆形接合点,在此等实例中,图形管线40可再现切片近似中的每一者,所述切片近似可一起近似所述圆形接合点的聚合区域。
为了产生用于圆形接合点的切片近似,棋盘形布置级62可产生两个法向量的多个集合,其中两个法向量的每一集合可对应于圆形接合点的切片中的相应一者。所述多个法向量集合可包含在与所述两个路径片段会合的点(即,c)相关联的法向量之间内插的法向量。法向量中的每一者可指示沿着圆形接合点的弯曲边缘的点中的一者相对于所述共同端点的方向。每一切片近似可由共同端点(即,c)和两个法向量界定。这是如上文相对于图8所论述图形管线40用来再现斜边接合点区域的相同信息。因此,图形管线40可使用与上文相对于斜边接合点描述的相同技术来再现每一切片近似。
除归一化切线和/或将切线从笛卡耳坐标转换到角度坐标之外,如上文一股来说相对于接合点所描述,对于圆形接合点,壳着色器48可配置且致使棋盘形布置器50产生多个输出值用于由域着色器52评估。举例来说,壳着色器48可针对每一圆形接合点执行片恒定功能。片恒定功能可确定配置参数且将此类配置参数提供到棋盘形布置器50以当产生输出值时由棋盘形布置器50使用。举例来说,片恒定功能可致使壳着色器48将棋盘形布置因数提供到棋盘形布置器50。棋盘形布置因数可指定棋盘形布置器50将应用于特定棋盘形布置域的棋盘形布置程度(例如,所述域应细分的精细程度和/或所述域应细分为的较小对象的数目)。在一些实例中,壳着色器48可致使棋盘形布置器50执行用于圆形接合点的4x棋盘形布置。在一些实例中,壳着色器48可指定等值线棋盘形布置域且指定棋盘形布置器50应将等值线域细分为线段。
域着色器52可针对从棋盘形布置器50接收的每一输出值产生输出顶点。相对于特定圆形接合点产生的每一输出顶点可包含相同位置坐标,其可对应于两个路径片段会合的点(即,点c)的坐标。对于此点的坐标可在从壳着色器48接收的片控制列表中指定。针对接合点产生的每一输出顶点的法线属性可不同。在一些实例中,域着色器52可基于从壳着色器48接收的片控制列表中包含的两个切线的两个不同角度坐标使用线性内插产生圆形接合点的法线属性。举例来说,针对从棋盘形布置器50接收的每一输出值,域着色器52可基于从棋盘形布置器50接收的输出值评估一或多个方程式以确定将作为对应顶点的属性输出的法线坐标。
在一些实例中,域着色器52可基于以下方程式中的一或多者产生法线坐标:
lerpedAngle=(1-u)*firstAngle+u*secondAngle (30)
norm.x=cos(lerpedAngle) (31)
norm.y=-sin(lerpedAngle) (32)
其中firstAngle对应于与在与接合点相关联的两个路径片段会合的共同点处与所述接合点相关联的第一路径片段的切线相关联的角度坐标,secondAngle对应于与在与接合点相关联的两个路径片段会合的共同点处与所述接合点相关联的第二路径片段的切线相关联的角度坐标,u对应于由棋盘形布置器50提供的输出值,且(norm.x,norm.y)对应于由域着色器52针对顶点产生的(x,y)法线坐标。
几何形状着色器54可以与上文相对于斜边接合点所论述的相同方式处理每一切片近似,不同的是用以产生斜边接合点的两个路径片段法线可由棋盘形布置级62产生的经棋盘形布置法线替换。举例来说,对于每一切片近似,几何形状着色器54可产生在空间上对应于所述切片近似的三角形。图形管线40可针对全部切片近似再现三角形。一旦全部切片近似已经再现,再现目标(例如,帧缓冲器)便可存储所述两个路径片段之间的接合点的来回划线区域的光栅化版本。
如上文所论述,圆形接合点可使用棋盘形布置引擎经棋盘形布置为多个切片。在圆形接合点的切片到达几何形状着色器54时,所述切片可恰似斜边接合点来处理,且可再现近似所述切片的区域的单个三角形。在此些实例中,可存在针对圆形接合点产生的众多斜边类型接合点,因此可存在针对圆形接合点调用的一个以上几何形状着色器实例。
与下文描述的用于再现接合点的第二技术相比,上述第一技术可允许利用棋盘形布置引擎,且可从单个几何形状着色器实例实现可预测且较低的顶点输出计数。这与下文进一步详细描述的第二技术相比可当再现接合点时改进系统的性能。
根据用于再现圆形接合点的第二技术,几何形状着色器54可将接合点区段划分为角度α的段(图10中所示)且可通过三角形来近似所述划分。允许像素准确再现的最大角度可针对给定来回划线宽度而预定。几何形状着色器54可采取在斜边接合点区段上找到的顶点,且保持应用从一个方向的旋转矩阵以产生接近所述圆形接合点的区域的三角形扇形的顶点。图形管线40可再现所述三角形扇形以使得再现目标(例如,帧缓冲器)存储用于两个路径片段之间的接合点的来回划线区域的光栅化版本。
现在描述用于再现末端盖的技术。末端盖可在由多个路径片段形成的路径的开始和末端处应用。在一些实例中,可存在两个不同类型的末端盖:(1)正方形盖;以及(2)圆形盖。在一些实例中,待再现末端盖的类型可存储于GPU 12中的缓冲器(例如,片恒定缓冲器)中,且CPU 6可通过将指示末端盖类型的值放置到所述缓冲器中来指示将用于再现的末端盖的类型。
末端盖可形成在对应于路径的开始或末端的路径片段的开始或末端。为了再现末端盖,CPU 6可将指示末端盖的位置(例如,路径片段的端点)的数据和指示在所述位置处的切线的数据放置到缓冲器(例如,路径数据36中的顶点缓冲器)中用于由GPU 12消耗。
在一些实例中,用于末端盖的输入路径数据可采取以下形式或相似形式:
在此实例中,每一行表示四个控制点片列表的顶点或控制点,且圆括号中的每一参数表示相应顶点或控制点的属性。在此实例中,第一控制点的最后属性存储指示待再现路径片段的类型的数据(即,“路径片段类型指示符”)。具体来说,在此实例中路径片段类型指示符是6.0f,其意味着所述路径片段是末端盖路径片段。末端盖路径片段的类型(例如,正方形或圆形)可由存储于GPU 12的缓冲器(例如,片恒定缓冲器)中的值指示。在此实例中pos.x和pos.y是对应于所述末端盖形成的位置(例如,路径片段的端点)的(x,y)坐标,且tan.x和tan.y是对应于在所述末端盖形成的位置处的路径片段的切线的(x,y)坐标。在一些实例中,CPU 6可基于指示其上形成末端盖的路径片段的数据确定切线的坐标。在此实例中剩余顶点和属性可未使用和/或可用以指示盖的其它属性。
在一些实例中,为了再现末端盖,壳着色器48可将对应于末端盖的切线(tan.x,tan.y)从笛卡耳坐标转换到角度坐标。在其它实例中,壳着色器48可在将笛卡耳坐标转换到角度坐标之前将对应于末端盖的切线(tan.x,tan.y)归一化。在额外实例中,壳着色器48可将切线的角度坐标放置到由壳着色器48接收的片控制列表的一或多个属性中,且将经修改片控制列表传递到域着色器52用于进一步处理。在一些实例中,壳着色器48可实施上文相对于接合点所论述的伪码和/或着色器程序代码以归一化切线和/或将切线的笛卡耳坐标转换为角度坐标。
作为一个具体实例,针对末端盖由壳着色器48接收的输入片控制列表可如下:
在此实例中,壳着色器48可产生切线的角度坐标,且将所述角度坐标放置在含有所述切线的控制点的第三属性中。在一些实例中,所得片控制列表可采取以下形式:
图11是说明实例正方形盖的概念图。对于正方形盖,GPU 12可再现在空间上对应于盖区域(例如,图11中所示的亮着色矩形)的一或多个三角形。如图11中示出,点c可对应于路径片段的端点,且u和l可对应于基于在其处形成盖的路径片段的端点(即,c)产生的拐角点。
在一些实例中,域着色器52可从壳着色器48接收指示待再现盖的数据,产生对应于待再现盖的一或多个顶点,且将所述顶点提供到几何形状着色器54用于进一步处理。指示待再现盖的数据可包含指示所述盖形成的位置(例如,路径片段的端点)的数据、指示在所述盖形成的位置处路径片段的切线的数据以及指示路径再现基元的类型(例如,在此情况下为盖)的数据。在一些实例中,指示待再现盖的数据可呈片控制列表(例如,以上指定的片控制列表)的形式。
域着色器52可基于由域着色器52接收的指示切线的数据产生对应于所述切线的法线。举例来说,域着色器52可基于方程式(14)产生切线的法线。由域着色器52产生的一或多个顶点可包含指示在其处形成盖的路径片段(即,点c)的端点的一或多个属性、指示在所述端点(即,点c)处的路径片段的法线的一或多个属性,以及指示路径再现基元的类型(例如,在此情况下为盖)的一或多个属性。
在一些实例中,几何形状着色器54可从域着色器52接收一或多个顶点,且基于如本发明中所描述的方程式(15)到(18)中的一或多者确定形成末端盖的路径片段的端点的拐角点(u,l)。几何形状着色器54可根据以下方程式确定向量v:
v=(u-l)/2 (33)
其中u和l对应于用于路径片段的端点的来回划线区域的拐角点。
几何形状着色器54可根据以下方程式将向量v旋转90度以找到向量n:
n=(v.y,-v.x) (34)
其中a=(x,y)指示向量a的x和y分量,其中v.y对应于向量v的y分量,且其中v.x对应于向量v的x分量。
几何形状着色器54可根据以下方程式确定用于起始盖或末端盖的新点(例如顶点):
nu=u±n (35)
nl=l±n (36)
其中nu和nl是用于盖的新拐角点,且u和l对应于用于路径片段的端点的来回划线区域的拐角点。
几何形状着色器54可产生在空间上对应于正方形盖区域的用于再现正方形盖的一或多个三角形。举例来说,几何形状着色器54可产生在空间上对应于正方形盖区域的两个三角形(例如,(u,l,nu)和(nu,l,nl))。图形管线40可针对正方形盖区域再现由几何形状着色器54产生的一或多个三角形。一旦一个或三角形已经再现,再现目标(例如,帧缓冲器)便可存储用于正方形盖的来回划线区域的光栅化版本。
图12是说明实例圆形盖的概念图。如图12中示出,点c可对应于路径片段的端点,且u和l可对应于基于在其处形成盖的路径片段的端点(即,c)产生的拐角点。GPU 12可以类似于上文针对再现圆形接合点的技术中的任一者的方式再现圆形盖。
根据用于再现圆形盖的第一技术,图形管线40可使用棋盘形布置级62来产生针对圆形盖区域的多个切片近似。每一切片近似可对应于圆形盖区域的相应切片,其中每一切片由路径端点(即,c)和沿着圆形盖的弯曲边缘的两个相应点界定。为了近似切片,图形管线40可使用沿着圆形盖的弯曲边缘的与所述切片相关联的两个相应点之间的线段来近似所述切片的弯曲边缘的曲率。为了再现圆形盖,在此等实例中,图形管线40可再现切片近似中的每一者,所述切片近似可一起近似所述圆形盖的聚合区域。
为了产生用于圆形盖的切片近似,棋盘形布置级62可产生两个法向量的多个集合,其中两个法向量的每一集合可对应于圆形盖的切片中的相应一者。所述多个法向量的集合可包含在与所述圆形盖形成的路径片段的端点(即,c)相关联的法向量与指向与所述法向量的相反方向的向量之间内插的法向量。法向量中的每一者可指示沿着圆形盖的弯曲边缘的点中的一者相对于所述共同端点的方向。每一切片近似可由所述圆形盖形成的端点(即,c)和两个法向量界定。这是如上文相对于图8所论述图形管线40用来再现斜边接合点区域的相同信息。因此,图形管线40可使用与上文相对于斜边接合点描述的相同技术来再现每一切片近似。
除归一化切线和/或将切线从笛卡耳坐标转换到角度坐标之外,如上文一股来说相对于盖所描述,对于圆形盖,壳着色器48可配置且致使棋盘形布置器50产生多个输出值用于由域着色器52评估。举例来说,壳着色器48可针对每一圆形盖执行片恒定功能。片恒定功能可确定配置参数且将此类配置参数提供到棋盘形布置器50以当产生输出值时由棋盘形布置器50使用。举例来说,片恒定功能可致使壳着色器48将棋盘形布置因数提供到棋盘形布置器50。棋盘形布置因数可指定棋盘形布置器50将应用于特定棋盘形布置域的棋盘形布置程度(例如,所述域应细分的精细程度和/或所述域应细分为的较小对象的数目)。在一些实例中,壳着色器48可致使棋盘形布置器50执行用于圆形盖的4x棋盘形布置。在一些实例中,壳着色器48可指定等值线棋盘形布置域且指定棋盘形布置器50应将等值线域细分为线段。
域着色器52可针对从棋盘形布置器50接收的每一输出值产生输出顶点。相对于特定圆形盖产生的每一输出顶点可包含相同位置坐标,其可对应于所述盖形成的路径片段的端点(即,点c)的坐标。对于此点的坐标可在从壳着色器48接收的片控制列表中指定。针对圆形盖产生的每一输出顶点的法线属性可不同。在一些实例中,域着色器52可使用线性内插产生圆形接合点的法线属性。线性内插可基于从壳着色器48接收的片控制列表中包含的切线的角度坐标且基于通过将π(例如,180度)添加到从壳着色器48接收的片控制列表中包含的切线的角度坐标而导出的角度坐标。对于从棋盘形布置器50接收的每一输出值,域着色器52可基于从棋盘形布置器50接收的输出值评估一或多个方程式以确定将作为对应顶点的属性输出的法线坐标。
在一些实例中,域着色器52可基于以下方程式中的一或多者产生法线坐标:
lerpedAngle=(1-u)*angle+u*(angle+PI) (37)
norm.x=cos(lerpedAngle) (38)
norm.y=-sin(lerpedAngle) (39)
其中angle对应于与在所述圆形盖形成的路径片段的端点处路径片段的切线相关联的角度坐标,u对应于由棋盘形布置器50提供的输出值,且(norm.x,norm.y)对应于由域着色器52针对路径片段的端点产生的(x,y)法线坐标。
几何形状着色器54可以与上文相对于斜边接合点所论述的相同方式处理每一切片近似,不同的是用以产生斜边接合点的两个路径片段法线可由棋盘形布置级62产生的经棋盘形布置法线替换。举例来说,对于每一切片近似,几何形状着色器54可产生在空间上对应于所述切片近似的三角形。图形管线40可针对全部切片近似再现三角形。一旦全部切片近似已经再现,再现目标(例如,帧缓冲器)便可存储用于圆形盖的来回划线区域的光栅化版本。
如上文所论述,圆形盖可通过使用棋盘形布置引擎经棋盘形布置为多个切片。在圆形盖的切片到达几何形状着色器54时,所述切片可恰似斜边接合点来处理,且可再现近似所述切片的区域的单个三角形。在此些实例中,可存在从圆形盖产生的众多斜边类型接合点,因此可存在针对圆形盖调用的一个以上几何形状着色器实例。
与下文描述的用于再现盖的第二技术相比,上述第一技术可允许利用棋盘形布置引擎,且可从单个几何形状着色器实例实现可预测且较低的顶点输出计数。这与下文进一步详细描述的第二技术相比可当再现盖时改进系统的性能。
根据用于再现圆形盖的第二技术,几何形状着色器54可将盖区段划分为角度α的段且通过三角形近似所述划分。允许像素准确再现的最大角度可针对当前来回划线宽度而预定。几何形状着色器54可采取在斜边接合点区段上找到的顶点,可保持将旋转矩阵应用于u或l顶点中的一者,且可产生近似圆形盖的区域的三角形扇形。图形管线40可再现所述三角形扇形以使得再现目标(例如,帧缓冲器)存储用于圆形盖的来回划线区域的光栅化版本。
上文描述的用于再现接合点和末端盖的技术在上文一股描述为由几何形状着色器54执行。在一些实例中,上述技术的全部或一部分可除几何形状着色器54之外或代替几何形状着色器54而在GPU 12的一或多个固定功能和/或可编程着色器处理级中执行。光栅化器56和像素处理管线级也可用以再现对应于接合点和末端盖区域的三角形。
图13到16图解说明用于执行根据本发明的GPU加速的路径再现的技术。出于示范性目的,图13到16中所示的技术描述为由图1和2中所示的GPU 12且以图3中所示的图形管线40执行。在其它实例中,图13到16中图解说明的技术可在以相同或不同配置具有相同或不同组件的其它系统中实施。
图13是说明根据本发明的用于执行GPU加速的路径再现的实例技术的流程图。GPU 12接收路径数据(100)。路径数据可指示待再现路径的一或多个路径片段。在一些实例中,路径数据可几何学上界定待再现的路径片段(例如,可提供几何学上界定待再现路径片段的一或多个数学方程式的一或多个参数)。
GPU 12将由路径数据界定的路径片段棋盘形布置为多个线段(102)。在一些实例中,GPU 12的棋盘形布置级62可用以执行棋盘形布置。GPU 12基于所述多个线段再现用于路径片段的填充区域和来回划线区域中的至少一者(104)。在一些实例中,GPU 12可基于所述多个线段再现用于路径片段的填充区域和来回划线区域两者。
图13中所示的实例技术产生经棋盘形布置线段以执行GPU加速的路径再现。在其它实例中,可产生其它类型的经棋盘形布置基元以执行GPU加速的路径再现,例如经棋盘形布置点或顶点。
图14是说明根据本发明的用于执行填充操作的实例技术的流程图。在一些实例中,图14中图解说明的技术可用以执行图13中图解说明的技术(例如,再现用于路径片段的填充区域)。
GPU 12接收路径数据(106)。路径数据可指示待再现路径的一或多个路径片段。GPU12将由路径数据界定的路径片段棋盘形布置为多个线段(108)。
GPU 12基于所述多个线段产生多个三角形基元(110)。所述多个三角形基元中的每一者可基于所述多个线段中的相应一者产生。用于给定路径片段的所述多个三角形基元中的每一者可共享共同顶点。三角形基元中的每一者的另两个顶点可对应于所述多个线段中的相应一者的端点。
GPU 12将所述多个三角形基元中的每一者再现到共同模板缓冲器中(112)。在将全部三角形基元再现到模板缓冲器中之后,模板缓冲器可存储指示哪些像素在用于路径片段的填充区域内部的数据。为了将所述多个三角形基元中的每一者再现到共同模板缓冲器中,GPU 12可使用以下技术中的一者。根据技术,GPU 12可针对所述多个三角形基元中的每一者反转模板缓冲器中的对应于相应三角形基元的一或多个值。根据第二技术,GPU 12可针对多个三角形基元中的每一者,在相应三角形基元的顶点次序在顺时针方向中定向的情况下递增模板缓冲器中对应于相应三角形基元的一或多个值,且在相应三角形基元的顶点次序在逆时针方向中定向的情况下递减模板缓冲器中对应于相应三角形基元的值。
GPU 12使用模板缓冲器再现对应于用于填充区域的限界框的一或多个基元(114)。举例来说,GPU 12可基于存储于模板缓冲器中的数据和填充颜色而再现包含处于填充区域内部的像素的一或多个基元以产生用于路径片段的填充区域的光栅化版本。限界框可包含处于用于待再现路径片段的填充区域内部的像素。在一些实例中,限界框可由包含处于用于待再现路径片段的填充区域内部的像素的两个三角形基元形成。模板缓冲器中的数据可致使填充区域内部的像素以填充颜色(在第二再现遍次之前由CPU 6指定)点亮,且致使在填充区域之外的像素保持暗。一旦限界框的再现已完成,再现目标(例如,帧缓冲器)便可存储用于路径片段的填充区域的光栅化版本。
在一些实例中,过程方框108可使用GPU 12的棋盘形布置级62(例如,GPU 12的壳着色器48、棋盘形布置器50和/或域着色器52)执行。在其它实例中,过程方框110可使用GPU 12的几何形状着色器54执行。
图15是说明根据本发明的用于执行来回划动操作的实例技术的流程图。在一些实例中,图15中图解说明的技术可用以执行图13中图解说明的技术(例如,再现用于路径片段的来回划线区域)。
GPU 12接收路径数据(116)。路径数据可指示待再现路径的一或多个路径片段。GPU12将由路径数据界定的路径片段棋盘形布置为多个线段(118)。
GPU 12产生在空间上对应于用于路径片段的来回划线区域的多个基元(120)。举例来说,对于多个经棋盘形布置线段中的每一者,GPU 12可产生在空间上对应于用于相应线段的来回划线区域的一或多个基元。
GPU 12再现在空间上对应于用于路径片段的来回划线区域的基元(122)。举例来说,对于多个经棋盘形布置线段中的每一者,GPU 12可基于来回划线颜色而再现用于相应线段的一或多个基元以产生用于路径片段的来回划线区域的光栅化版本。一旦所述基元的再现完成,再现目标(例如,帧缓冲器)便可存储用于路径片段的来回划线区域的光栅化版本。
在一些实例中,过程方框118可使用GPU 12的棋盘形布置级62(例如,GPU 12的壳着色器48、棋盘形布置器50和/或域着色器52)执行。在其它实例中,过程方框120可使用GPU 12的几何形状着色器54执行。
图16是说明根据本发明的用于产生在空间上对应于路径片段的来回划线区域的一组基元的实例技术的流程图。在一些实例中,图16中图解说明的技术可用以执行图13中图解说明的过程方框120。
对于经棋盘形布置线段中的每一者,GPU 12产生相应线段的多个法向量(124)。所述法向量中的每一者可指示在沿着所述路径片段的多个点中的相应一者处路径片段的切线。在一些实例中,在沿着路径片段的多个点中的相应一者处路径片段的切线可对应于在沿着所述路径片段的多个点中的相应一者处与所述路径片段交叉的路径片段的切线。沿着路径片段的所述多个点中的每一者可对应于相应线段的端点中的相应一者。在某些情况下,法向量中的每一者可具有单位长度。在进一步情况中,法向量中的每一者可表示为界定所述法向量相对于原点的方向的一组法线坐标。在一些实例中,GPU 12可基于如本发明中所描述的方程式(9)到(14)中的一或多者而确定法向量。
对于经棋盘形布置线段中的每一者,GPU 12基于多个法向量和来回划线宽度而确定对应于用于相应线段的来回划线区域的拐角点集合(126)。在一些实例中,拐角点集合可对应于图5和6中所示的点u0、u1、l0和l1。在其它实例中,GPU 12可基于如本发明中所描述的方程式(15)到(18)中的一或多者而确定拐角点集合。
对于经棋盘形布置线段中的每一者,GPU 12可基于来回划线区域的拐角点而产生在空间上对应于用于相应线段的来回划线区域的一或多个基元。举例来说,GPU 12可确定法向量的交叉点(128),确定所述交叉点是否在用于相应线段的来回划线区域内(130),且基于所述拐角点、所述交叉点以及所述交叉点是否在用于相应线段的来回划线区域内的所述确定而选择对应于用于相应经棋盘形布置线段的来回划线区域的三角形(132)。所述交叉点可替代地在本文中被称作中心点(即,c)。
在一些实例中,GPU 12可基于如本发明中所描述的方程式(19)到(24)中的一或多者确定所述交叉点。在其它实例中,GPU 12可基于如本发明中上文所描述是否来回划线宽度<min(u0c,u1c)而确定所述交叉点是否在用于相应线段的来回划线区域内。
在额外实例中,GPU 12可基于以下技术选择对应于用于相应经棋盘形布置线段的来回划线区域的三角形。如果交叉点在来回划线区域之外(例如,图5),那么GPU 12可产生两个三角形以形成在空间上对应于来回划线区域的方形。举例来说,GPU 12可使用以下顶点组合{u0,u1,l1}和{l1,l0,u0}产生两个三角形。
如果交叉点在来回划线区域的内部(例如,图6),那么GPU 12可产生两个三角形以形成在空间上对应于来回划线区域的蝶形。举例来说,GPU 12可在{u0,u1,c}三角形在顺时针方向中定向的情况下使用以下顶点组合{u0,u1,c}和{c,l0,l1}产生两个三角形,且在{u0,u1,c}三角形在逆时针方向中定向的情况下使用以下顶点组合{u0,u1,c}和{c,l1,l0}产生两个三角形。
图17是说明用于致使GPU执行根据本发明的GPU加速的路径再现的实例技术的流程图。图17中所示的技术出于示范性目的描述为由图1和2中所示的CPU 6执行。在其它实例中,图17中图解说明技术可在以相同或不同配置具有相同或不同组件的其它系统中实施。
CPU 6(例如,软件应用程序24和/或GPU驱动器28)致使GPU 12将路径片段棋盘形布置为多个线段(134)。在一些实例中,为了致使GPU 12将路径片段棋盘形布置为多个线段,CPU 6可将壳着色器程序和域着色器程序中的一者或两者加载到GPU 12上,且致使壳着色器程序和域着色器程序中的所述一者或两者结合芯片上棋盘形布置引擎将路径片段棋盘形布置为多个线段。壳着色器程序和域着色器程序中的所述一者或两者可经配置以执行本发明中归于此类程序的技术中的一或多者。在一些实例中,CPU 6可致使壳着色器程序和域着色器程序中的所述一者或两者通过将指示路径片段的数据放置到一或多个顶点缓冲器中且在启用芯片上棋盘形布置的情况下发出绘制调用而将路径片段棋盘形布置为多个线段。
CPU 6(例如,软件应用程序24和/或GPU驱动器28)致使GPU 12基于经棋盘形布置线段再现填充区域和/或来回划线区域(136)。为了致使GPU 12基于经棋盘形布置线段再现填充区域,在一些实例中,CPU 6可致使GPU 12基于多个线段产生多个三角形基元。可基于所述多个线段中的相应一者产生所述多个三角形基元中的每一者。在此等实例中,CPU 6可致使GPU 12将多个三角形基元中的每一者再现到共同模板缓冲器中以使得所述共同模板缓冲器存储指示哪些像素在用于路径片段的填充区域内部的数据,且基于存储于模板缓冲器中的数据和填充颜色而再现包含处于填充区域内部的像素的一或多个基元以产生用于路径片段的填充区域的光栅化版本。
在一些实例中,为了致使GPU 12基于多个线段产生多个三角形基元,CPU 6可将几何形状着色器程序加载到GPU 12上,且致使几何形状着色器程序基于多个线段产生多个三角形基元。几何形状着色器程序可经配置以执行本发明中归于几何形状着色器程序的技术中的一或多者。在一些实例中,CPU 6可致使几何形状着色器程序通过将指示路径片段的数据放置到一或多个顶点缓冲器中且在启用几何形状着色器的情况下发出绘制调用而产生多个三角形基元。
在一些实例中,为了致使GPU 12基于多个线段产生多个三角形基元,CPU 6可致使GPU 12针对多个三角形基元中的每一者在相应三角形基元的顶点次序在顺时针方向中定向的情况下递增模板缓冲器中对应于相应三角形基元的一或多个值。在此等实例中,CPU 6可致使GPU 12针对多个三角形基元中的每一者在相应三角形基元的顶点次序在逆时针方向中定向的情况下递减模板缓冲器中对应于相应三角形基元的一或多个值。在其它实例中,为了致使GPU 12基于多个线段产生多个三角形基元,CPU 6可致使GPU 12针对多个线段中的每一者反转模板缓冲器中对应于相应三角形基元的一或多个值。
为了致使GPU 12基于经棋盘形布置线段再现来回划线区域,在一些实例中,CPU 6可致使GPU 12针对多个线段中的每一者产生在空间上对应于用于相应线段的来回划线区域的一或多个基元,且针对多个线段中的每一者,基于来回划线颜色再现用于相应线段的一或多个基元以产生用于路径片段的来回划线区域的光栅化版本。
在一些实例中,为了致使GPU 12产生在空间上对应于用于相应线段的来回划线区域的一或多个基元,CPU 6可将几何形状着色器程序加载到GPU 12上,且致使几何形状着色器程序基于多个线段产生多个三角形基元。几何形状着色器程序可经配置以执行本发明中归于几何形状着色器程序的技术中的一或多者。在一些实例中,CPU 6可通过将指示路径片段的数据放置到一或多个顶点缓冲器中且在启用几何形状着色器的情况下发出绘制调用而致使几何形状着色器程序产生多个三角形基元。
在一些实例中,为了致使GPU 12产生在空间上对应于用于相应线段的来回划线区域的一或多个基元,CPU 6可致使GPU 12中的域着色器52产生相应线段的多个法向量。所述法向量中的每一者可指示在沿着路径片段的多个点中的相应一者处垂直于所述路径片段的切线的方向。沿着路径片段的所述多个点中的每一者可对应于相应线段的端点中的相应一者。在此等实例中,在一些实例中,CPU 6可致使GPU 12中的几何形状着色器54基于多个法向量和来回划线宽度确定用于相应线段的来回划线区域的拐角点,且基于来回划线区域的拐角点产生在空间上对应于用于相应线段的来回划线区域的一或多个基元。
在一些实例中,本发明的技术可用以在DirectX GPU上执行路径再现。在其它实例中,本发明的技术可在OpenVG平台上实施且测试和/或可符合OpenVG路径再现标准。在额外实例中,本发明的技术可为DirectX版本9.3、11和11+提供对路径再现的GPU加速解决方案。DirectX11+可指代经修改DirectX 11架构。
在一些实例中,路径可指代多个路径片段,其可为例如线、椭圆形弧、二次贝塞尔曲线和三次贝塞尔曲线。路径可为“闭合”或不闭合的(即,开放)。闭合路径可指代其中最后顶点经由线连接到第一顶点且其中路径形成封闭形状的路径。开放路径可指代其中最后顶点未必连接到第一顶点的路径。路径可自身重叠多次。路径再现可划分成两个主任务:填充和来回划动。
填充路径可指代以填充颜色填充给定路径的内部区。所述内部区可使用例如偶/奇填充规则或非零填充规则来界定。在一些实例中,本发明的技术可提供两遍次方法,其中第一遍次上使用VS/HS/DS/GS(即,顶点着色器/壳着色器/域着色器/几何形状着色器),且在第二遍次上使用VS/PS(即顶点着色器/像素着色器)。第一遍次可产生模板缓冲器中的填充信息,且第二遍次可覆盖模板区域以便将用于路径的填充区域再现到帧缓冲器上。在一些实例中,所述两遍次方法可在DirectX 11(DX11)图形管线中实施而在一些实例中无需对DX11管线架构的任何大体修改。
在一些实例中,路径填充操作可如下执行:
1.遍次1:将所述路径棋盘形布置为线段
2.遍次1:在每个GS实例中通过将枢轴点连接到线段而产生三角形且将三角形再现到模板缓冲器
3.遍次2:在启用模板测试的情况下再现限界框区域。
在一些实例中,将路径棋盘形布置为线段可涉及使用四(4)个控制点片列表作为用于路径片段的输入格式,如本发明中早先所描述。在其它实例中,将路径棋盘形布置为线段可涉及使用域着色器52评估路径,如本发明中早先所描述。在额外实例中,将路径棋盘形布置为线段可涉及找到椭圆形弧的椭圆中心,如本发明中早先所描述。
在一些实例中,在每个GS实例中通过将枢轴点连接到线段而产生三角形且随后将三角形再现到模板缓冲器可涉及在DS中产生线段之后使用GS将预定枢轴点连接到每个线段以产生三角形。光栅化器56可随后将这些三角形光栅化到模板缓冲器上,其中面向前的三角形增加模板结果且背面三角形减小模板结果。
在一些实例中,在启用模板测试的情况下再现限界框区域可涉及在启用模板测试的情况下传递覆盖路径的限界框区域的两个三角形以点亮落在路径填充中的像素。
来回划动路径可指代使用保持垂直于路径的直线笔“加宽”所述路径的边缘。在一些实例中,本发明的技术可棋盘形布置且评估路径,且在每一评估点根据在所述点处的法线加宽所述点且产生三角测量以形成片段。全部片段的联合可形成来回划线(例如,用于线的来回划线区域)。
在一些实例中,本发明的技术可提供单个遍次方法,其使用VS/HS/DS(即,顶点着色器/壳着色器/域着色器)来棋盘形布置线,且使用GS(即,几何形状着色器)以来回划动宽度使线增厚。接合点和末端盖可通过同一管线且在GS中处置。所得三角形可随后在同一再现遍次中光栅化。在一些实例中,所述单遍次方法可在DirectX 11(DX11)图形管线中实施而在一些实例中无需对DX11管线架构的任何实质性修改。
在一些实例中,来回划动操作可如下执行:
1.将路径棋盘形布置为线段(针对接合点/末端盖绕过)
2.使线段增厚且产生三角测量
3.在启用深度测试的情况下再现三角形
在一些实例中,将路径棋盘形布置为线段可涉及使用四(4)个控制点片列表作为用于路径片段的输入格式,如本发明中早先所描述。在其它实例中,将路径棋盘形布置为线段可涉及使用域着色器52评估路径,如本发明中早先所描述。在额外实例中,将路径棋盘形布置为线段可涉及找到椭圆形弧的椭圆中心,如本发明中早先所描述。
在一些实例中,使线段增厚且产生三角测量可涉及在产生线段之后使用GS通过在GS中在正和负的法线方向中使端点移位而使每个线段增厚。GS可随后产生来回划线区域的三角测量。接合点和盖也可以在GS中处置。
在一些实例中,在启用深度测试的情况下再现三角形可涉及在启用深度测试的情况下从GS再现三角形流以便正确地处置重叠部分。在一些实例中,模板缓冲器可代替深度缓冲器用于模仿深度测试功能性而无需分配单独的模板和深度缓冲器。
表1 说明在不同代的DirectX图形管线中实施的本发明的技术的比较。应注意表1中针对本发明的技术所列的性质不一定适用于本文所描述的技术的全部实例。
表1:针对不同代的DirectX图形管线的本发明的实例技术的实施方案的比较。
下文描述可用以在DirectX 11水平或稍后图形管线上执行路径再现的算法的可能组合。
填充操作可表示为:
VS→HS→DS→GS→VS→PS(2遍次)。
第一遍次可利用VS/HS/DS/GS,且可将路径段棋盘形布置为线段,在每个GS实例中通过将枢轴点连接到线段而产生三角形,且将三角形再现到模板缓冲器。第二遍次可利用VS/PS,且可在启用模板测试的情况下再现限界框区域。
来回划动操作可表示为:
VS→HS→DS→GS→PS(1遍次)。
来回划动操作可为单个遍次操作,其利用VS/HS/DS/GS/PS,且可将路径段棋盘形布置为线段,使线段增厚或做出接合点/末端盖,且在GS实例中产生三角测量,且在启用深度测试的情况下再现三角形。
在一些实例中,接合点和盖可形成GPU输入的一部分,且可封装到顶点缓冲器中作为路径数据的一部分。在此等实例中,CPU可找到路径片段的端点切线,其可对应于用于曲线和线的控制点差。对于椭圆,CPU可首先将椭圆转换为参数形式且随后找到端点切线。
在一些实例中,本发明的技术可需要极少或不需要CPU参与和/或数据操纵。在额外实例中,本发明的技术可不一定实施再棋盘形布置/尖点和虚线。在额外实例中,再现遍次的总数可建模为2*PF+PS。
路径再现可包含称为填充闭合路径和来回划动所述路径的两个阶段。路径可包含以下三者中的一或多者:线、二次/三次贝塞尔曲线,或椭圆形弧。虽然存在再现路径的许多CPU实施方案,但一些(例如,由NVidia实施)可使用CPU/GPU混合实施方案。在CPU上再现路径可为浪费的方法,其并不利用问题的并行本质。CPU/GPU混合实施方案可存在由于装置通信所致的性能损失的问题。
在一些实例中,本发明的技术提供路径再现的方法,即基于DirectX 11的100%GPU再现解决方案,其中停用划虚线且路径并不具有尖点或零切线。超过95%的真实寿命情形通常并不具有尖点或零切线。使用GPU,再现时间和功率消耗可显著减少。如果需要划虚线,那么额外CPU操作可用于处置两个再现遍次之间的划虚线。
在一些实例中,本发明的技术可允许DirectX 11硬件的用户使用DirectX 11硬件或以具有相似性能特性的硬件执行路径再现。在其它实例中,本发明的技术可提供对路径再现的全部GPU再现解决方案。
虽然本发明的技术已经基本上相对于由DX 11图形API界定的硬件架构描述,但本发明的技术也可以在根据其它芯片上具有棋盘形布置功能的图形API界定的硬件架构中执行,例如OpenGL图形API(例如,OpenGL版本4.0、4.1、4.2、4.3和更晚的版本)。在其中本发明的技术在根据OpenGL图形API界定的硬件架构中实施的实例中,本发明中归于壳着色器48的功能中的一或多者可由棋盘形布置控制着色器执行和/或本发明中归于域着色器52的功能中的一或多者可由棋盘形布置评估着色器执行。
关于OpenGL图形管线的大体操作的进一步细节可参见“图形系统:规范(版本4.3(核心简档)-2012年8月6日)”(2012年8月6日,科纳斯(Khronos)集团公司),其在http://www.opengl.org/registry/doc/glspec43.core.20120806.pdf可用,且整个内容以引用的方式并入本文中。
本发明中所描述的技术可至少部分实施于硬件、软件、固件或其任何组合中。举例而言,所描述的技术的各种方面可实施于一或多个处理器中,包含一或多个微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA),或任何其它等效的集成或离散逻辑电路,以及此些组件的任何组合。术语“处理器”或“处理电路”可大体上指前述逻辑电路中的任一者(单独或结合其它逻辑电路)或例如执行处理的离散硬件的任何其它等效电路。
此硬件、软件和固件可实施于相同装置内或单独装置内以支持本发明中所描述的各种操作和功能。另外,所描述单元、模块或组件中的任一者可一起或单独作为离散但可互操作逻辑装置而实施。将不同特征描述为模块或单元意图强调不同功能方面且未必暗示此等模块或单元必须由单独硬件或软件组件实现。替代地,与一或多个模块或单元相关联的功能性可由单独硬件、固件和/或软件组件执行,或整合到共用或单独硬件或软件组件内。
本发明中所描述的技术也可存储、体现或编码于计算机可读媒体(例如,存储指令的计算机可读存储媒体)中。嵌入或编码于计算机可读媒体中的指令可导致一或多个处理器执行本文中所描述的技术(例如,当由一或多个处理器执行指令时)。计算机可读存储媒体可包含随机存取存储器(RAM)、只读存储器(ROM)、可编程只读存储(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、快闪存储器、硬盘、CD-ROM、软盘、卡盒、磁性媒体、光学媒体或其它有形计算机可读存储媒体。
计算机可读媒体可包含计算机可读存储媒体,其对应于例如上文所列的那些的有形存储媒体。计算机可读媒体也可包括通信媒体,其包含促进计算机程序从一个地点到另一地点的传送(例如,根据通信协议)的任何媒体。以此方式,短语“计算机可读媒体”大体上可对应于(1)非暂时性有形计算机可读存储媒体和(2)例如暂时性信号或载波的非有形计算机可读通信媒体。
已描述各种方面和实例。然而,可在不脱离所附权利要求的范围的情况下对本发明的结构或技术作出修改。
Claims (42)
1.一种方法,其包括:
以图形处理单元GPU接收指示待再现路径的路径片段的数据;
以所述GPU将所述路径片段棋盘形布置为多个基元;以及
以所述GPU基于所述多个基元再现用于所述路径片段的填充区域和来回划线区域中的至少一者。
2.根据权利要求1所述的方法,其中所述多个基元包括多个线段。
3.根据权利要求2所述的方法,其中再现所述填充区域和所述来回划线区域中的所述至少一者包括:
以所述GPU基于所述多个线段产生多个三角形基元,所述多个三角形基元中的每一者是基于所述多个线段中的相应一者产生;
以所述GPU将所述多个三角形基元中的每一者再现到共同模板缓冲器中以使得所述共同模板缓冲器存储指示哪些像素在用于所述路径片段的所述填充区域内部的数据;以及
以所述GPU基于存储于所述模板缓冲器中的所述数据和填充颜色而再现包含处于所述填充区域内部的所述像素的一或多个基元以产生用于所述路径片段的所述填充区域的光栅化版本。
4.根据权利要求3所述的方法,
其中棋盘形布置所述路径片段包括使用所述GPU的固定功能棋盘形布置引擎和在所述GPU的着色器单元上执行的域着色器程序来棋盘形布置所述路径片段,且
其中产生所述多个三角形基元包括使用在所述GPU的着色器单元上执行的几何形状着色器程序产生所述多个三角形基元。
5.根据权利要求4所述的方法,其中产生所述多个三角形基元包括产生所述多个三角形基元以使得所述三角形基元中的每一者具有共同顶点和对应于所述多个线段中的相应一者的端点的两个顶点。
6.根据权利要求5所述的方法,其中将所述多个三角形基元中的每一者再现到共同模板缓冲器中包括:
针对所述多个三角形基元中的每一者,反转所述模板缓冲器中的对应于所述相应三角形基元的一或多个值。
7.根据权利要求5所述的方法,其中将所述多个三角形基元中的每一者再现到共同模板缓冲器中包括:
针对所述多个三角形基元中的每一者,在所述相应三角形基元的顶点次序在顺时针方向中定向的情况下递增所述模板缓冲器中的对应于所述相应三角形基元的一或多个值;以及
针对所述多个三角形基元中的每一者,在所述相应三角形基元的所述顶点次序在逆时针方向中定向的情况下递减所述模板缓冲器中的对应于所述相应三角形基元的一或多个值。
8.根据权利要求2所述的方法,其中再现所述填充区域和所述来回划线区域中的所述至少一者包括:
针对所述多个线段中的每一者,以所述GPU产生在空间上对应于用于所述相应线段的来回划线区域的一或多个基元;以及
针对所述多个线段中的每一者,以所述GPU基于来回划线颜色而再现用于所述相应线段的所述一或多个基元以产生用于所述路径片段的所述来回划线区域的光栅化版本。
9.根据权利要求8所述的方法,
其中棋盘形布置所述路径片段包括使用所述GPU的固定功能棋盘形布置引擎和在所述GPU的着色器单元上执行的域着色器程序来棋盘形布置所述路径片段,且
其中产生所述一或多个基元包括使用在所述GPU的着色器单元上执行的几何形状着色器程序产生所述一或多个基元。
10.根据权利要求8所述的方法,其中产生在空间上对应于用于所述相应线段的所述来回划线区域的所述一或多个基元包括:
产生所述相应线段的多个法向量,所述法向量中的每一者指示垂直于在沿着所述路径片段的多个点中的相应一者处所述路径片段的切线的方向,沿着所述路径片段的所述多个点中的每一者对应于所述相应线段的所述端点中的相应一者;
基于所述多个法向量和来回划线宽度确定用于所述相应线段的来回划线区域的拐角点;以及
基于所述来回划线区域的所述拐角点产生在空间上对应于用于所述相应线段的所述来回划线区域的所述一或多个基元。
11.一种装置,其包括:
图形处理单元GPU,其经配置以接收指示待再现路径的路径片段的数据,将所述路径片段棋盘形布置为多个基元,且基于所述多个基元再现用于所述路径片段的填充区域和来回划线区域中的至少一者。
12.根据权利要求11所述的装置,其中所述多个基元包括多个线段。
13.根据权利要求12所述的装置,其中所述GPU进一步经配置以:
基于所述多个线段产生多个三角形基元,所述多个三角形基元中的每一者是基于所述多个线段中的相应一者产生;
将所述多个三角形基元中的每一者再现到共同模板缓冲器中以使得所述共同模板缓冲器存储指示哪些像素在用于所述路径片段的所述填充区域内部的数据;以及
基于存储于所述模板缓冲器中的所述数据和填充颜色而再现包含处于所述填充区域内部的所述像素的一或多个基元以产生用于所述路径片段的所述填充区域的光栅化版本。
14.根据权利要求13所述的装置,其中所述GPU进一步经配置以:
使用所述GPU的固定功能棋盘形布置引擎和在所述GPU的着色器单元上执行的域着色器程序棋盘形布置所述路径片段;以及
使用在所述GPU的着色器单元上执行的几何形状着色器程序产生所述多个三角形基元。
15.根据权利要求14所述的装置,其中所述GPU进一步经配置以产生所述多个三角形基元以使得所述三角形基元中的每一者具有共同顶点和对应于所述多个线段中的相应一者的端点的两个顶点。
16.根据权利要求15所述的装置,其中所述GPU进一步经配置以针对所述多个三角形基元中的每一者反转所述模板缓冲器中的对应于所述相应三角形基元的一或多个值。
17.根据权利要求15所述的装置,其中所述GPU进一步经配置以:
针对所述多个三角形基元中的每一者,在所述相应三角形基元的顶点次序在顺时针方向中定向的情况下递增所述模板缓冲器中的对应于所述相应三角形基元的一或多个值;以及
针对所述多个三角形基元中的每一者,在所述相应三角形基元的所述顶点次序在逆时针方向中定向的情况下递减所述模板缓冲器中的对应于所述相应三角形基元的一或多个值。
18.根据权利要求12所述的装置,其中所述GPU进一步经配置以:
针对所述多个线段中的每一者,产生在空间上对应于用于所述相应线段的来回划线区域的一或多个基元;以及
针对所述多个线段中的每一者,基于来回划线颜色而再现用于所述相应线段的所述一或多个基元以产生用于所述路径片段的所述来回划线区域的光栅化版本。
19.根据权利要求18所述的装置,其中所述GPU进一步经配置以:
使用所述GPU的固定功能棋盘形布置引擎和在所述GPU的着色器单元上执行的域着色器程序棋盘形布置所述路径片段;以及
使用在所述GPU的着色器单元上执行的几何形状着色器程序产生所述一或多个基元。
20.根据权利要求18所述的装置,其中所述GPU进一步经配置以:
产生所述相应线段的多个法向量,所述法向量中的每一者指示垂直于在沿着所述路径片段的多个点中的相应一者处所述路径片段的切线的方向,沿着所述路径片段的所述多个点中的每一者对应于所述相应线段的所述端点中的相应一者;
基于所述多个法向量和来回划线宽度确定用于所述相应线段的来回划线区域的拐角点;以及
基于所述来回划线区域的所述拐角点产生在空间上对应于用于所述相应线段的所述来回划线区域的所述一或多个基元。
21.根据权利要求11所述的装置,其中所述装置包括无线通信装置。
22.根据权利要求11所述的装置,其中所述装置包括移动电话手持机。
23.一种设备,其包括:
用于接收指示待再现路径的路径片段的数据的装置;
用于将所述路径片段棋盘形布置为多个线段的装置;以及
用于基于所述多个线段再现用于所述路径片段的填充区域和来回划线区域中的至少一者的装置。
24.根据权利要求23所述的设备,其中所述多个基元包括多个线段。
25.根据权利要求24所述的设备,其中所述用于再现所述填充区域和所述来回划线区域中的所述至少一者的装置包括:
用于基于所述多个线段产生多个三角形基元的装置,所述多个三角形基元中的每一者是基于所述多个线段中的相应一者产生;
用于将所述多个三角形基元中的每一者再现到共同模板缓冲器中以使得所述共同模板缓冲器存储指示哪些像素在用于所述路径片段的所述填充区域内部的数据的装置;以及
用于基于存储于所述模板缓冲器中的所述数据和填充颜色而再现包含处于所述填充区域内部的所述像素的一或多个基元以产生用于所述路径片段的所述填充区域的光栅化版本的装置。
26.根据权利要求25所述的设备,
其中所述用于棋盘形布置所述路径片段的装置包括用于使用图形处理单元GPU的固定功能棋盘形布置引擎和在所述GPU的着色器单元上执行的域着色器程序来棋盘形布置所述路径片段的装置,且
其中所述用于产生所述多个三角形基元的装置包括用于使用在所述GPU的着色器单元上执行的几何形状着色器程序产生所述多个三角形基元的装置。
27.根据权利要求26所述的设备,其中所述用于产生所述多个三角形基元的装置包括用于产生所述多个三角形基元以使得所述三角形基元中的每一者具有共同顶点和对应于所述多个线段中的相应一者的端点的两个顶点的装置。
28.根据权利要求27所述的设备,其中所述用于将所述多个三角形基元中的每一者再现到共同模板缓冲器中的装置包括:
用于针对所述多个三角形基元中的每一者反转所述模板缓冲器中的对应于所述相应三角形基元的一或多个值的装置。
29.根据权利要求27所述的设备,其中所述用于将所述多个三角形基元中的每一者再现到共同模板缓冲器中的装置包括:
用于针对所述多个三角形基元中的每一者在所述相应三角形基元的顶点次序在顺时针方向中定向的情况下递增所述模板缓冲器中的对应于所述相应三角形基元的一或多个值的装置;以及
用于针对所述多个三角形基元中的每一者在所述相应三角形基元的所述顶点次序在逆时针方向中定向的情况下递减所述模板缓冲器中的对应于所述相应三角形基元的一或多个值的装置。
30.根据权利要求24所述的设备,其中所述用于再现所述填充区域和所述来回划线区域中的所述至少一者的装置包括:
用于针对所述多个线段中的每一者产生在空间上对应于用于所述相应线段的来回划线区域的一或多个基元的装置;以及
用于针对所述多个线段中的每一者基于来回划线颜色而再现用于所述相应线段的所述一或多个基元以产生用于所述路径片段的所述来回划线区域的光栅化版本的装置。
31.根据权利要求30所述的设备,
其中所述用于棋盘形布置所述路径片段的装置包括用于使用图形处理单元GPU的固定功能棋盘形布置引擎和在所述GPU的着色器单元上执行的域着色器程序棋盘形布置所述路径片段的装置,且
其中所述用于产生所述一或多个基元的装置包括用于使用在所述GPU的着色器单元上执行的几何形状着色器程序产生所述一或多个基元的装置。
32.根据权利要求30所述的设备,其中所述用于产生在空间上对应于用于所述相应线段的所述来回划线区域的所述一或多个基元的装置包括:
用于产生所述相应线段的多个法向量的装置,所述法向量中的每一者指示垂直于在沿着所述路径片段的多个点中的相应一者处所述路径片段的切线的方向,沿着所述路径片段的所述多个点中的每一者对应于所述相应线段的所述端点中的相应一者;
用于基于所述多个法向量和来回划线宽度确定用于所述相应线段的来回划线区域的拐角点的装置;以及
用于基于所述来回划线区域的所述拐角点产生在空间上对应于用于所述相应线段的所述来回划线区域的所述一或多个基元的装置。
33.一种存储指令的非暂时性计算机可读存储媒体,所述指令在由一或多个处理器执行后即刻致使所述一或多个处理器:
接收指示待再现路径的路径片段的数据;
将所述路径片段棋盘形布置为多个基元;以及
基于所述多个基元再现用于所述路径片段的填充区域和来回划线区域中的至少一者。
34.根据权利要求33所述的非暂时性计算机可读存储媒体,其中所述多个基元包括多个线段。
35.根据权利要求34所述的非暂时性计算机可读存储媒体,其中在由所述一或多个处理器执行后即刻致使所述一或多个处理器再现所述填充区域和所述来回划线区域中的所述至少一者的所述指令包括在由所述一或多个处理器执行后即刻致使所述一或多个处理器进行以下操作的指令:
基于所述多个线段产生多个三角形基元,所述多个三角形基元中的每一者是基于所述多个线段中的相应一者产生;
将所述多个三角形基元中的每一者再现到共同模板缓冲器中以使得所述共同模板缓冲器存储指示哪些像素在用于所述路径片段的所述填充区域内部的数据;以及
基于存储于所述模板缓冲器中的所述数据和填充颜色而再现包含处于所述填充区域内部的所述像素的一或多个基元以产生用于所述路径片段的所述填充区域的光栅化版本。
36.根据权利要求35所述的非暂时性计算机可读存储媒体,
其中在由所述一或多个处理器执行后即刻致使所述一或多个处理器棋盘形布置所述路径片段的所述指令包括在由所述一或多个处理器执行后即刻致使所述一或多个处理器使用图形处理单元GPU的固定功能棋盘形布置引擎和在所述GPU的着色器单元上执行的域着色器程序棋盘形布置所述路径片段的指令,且
其中在由所述一或多个处理器执行后即刻致使所述一或多个处理器产生所述多个三角形基元的所述指令包括在由所述一或多个处理器执行后即刻致使所述一或多个处理器使用在所述GPU的着色器单元上执行的几何形状着色器程序产生所述多个三角形基元的指令。
37.根据权利要求36所述的非暂时性计算机可读存储媒体,其中在由所述一或多个处理器执行后即刻致使所述一或多个处理器产生所述多个三角形基元的所述指令包括在由所述一或多个处理器执行后即刻致使所述一或多个处理器产生所述多个三角形基元以使得所述三角形基元中的每一者具有共同顶点和对应于所述多个线段中的相应一者的端点的两个顶点的指令。
38.根据权利要求37所述的非暂时性计算机可读存储媒体,其中在由所述一或多个处理器执行后即刻致使所述一或多个处理器将所述多个三角形基元中的每一者再现到共同模板缓冲器中的所述指令包括在由所述一或多个处理器执行后即刻致使所述一或多个处理器进行以下操作的指令:
针对所述多个三角形基元中的每一者,反转所述模板缓冲器中的对应于所述相应三角形基元的一或多个值。
39.根据权利要求37所述的非暂时性计算机可读存储媒体,其中在由所述一或多个处理器执行后即刻致使所述一或多个处理器将所述多个三角形基元中的每一者再现到共同模板缓冲器中的所述指令包括在由所述一或多个处理器执行后即刻致使所述一或多个处理器进行以下操作的指令:
针对所述多个三角形基元中的每一者,在所述相应三角形基元的顶点次序在顺时针方向中定向的情况下递增所述模板缓冲器中的对应于所述相应三角形基元的一或多个值;以及
针对所述多个三角形基元中的每一者,在所述相应三角形基元的所述顶点次序在逆时针方向中定向的情况下递减所述模板缓冲器中的对应于所述相应三角形基元的一或多个值。
40.根据权利要求34所述的非暂时性计算机可读存储媒体,其中在由所述一或多个处理器执行后即刻致使所述一或多个处理器再现所述填充区域和所述来回划线区域中的所述至少一者的所述指令包括在由所述一或多个处理器执行后即刻致使所述一或多个处理器进行以下操作的指令:
针对所述多个线段中的每一者,产生在空间上对应于用于所述相应线段的来回划线区域的一或多个基元;以及
针对所述多个线段中的每一者,基于来回划线颜色而再现用于所述相应线段的所述一或多个基元以产生用于所述路径片段的所述来回划线区域的光栅化版本。
41.根据权利要求40所述的非暂时性计算机可读存储媒体,
其中在由所述一或多个处理器执行后即刻致使所述一或多个处理器棋盘形布置所述路径片段的所述指令包括在由所述一或多个处理器执行后即刻致使所述一或多个处理器使用图形处理单元GPU的固定功能棋盘形布置引擎和在所述GPU的着色器单元上执行的域着色器程序棋盘形布置所述路径片段的指令,且
其中在由所述一或多个处理器执行后即刻致使所述一或多个处理器产生所述一或多个基元的所述指令包括在由所述一或多个处理器执行后即刻致使所述一或多个处理器使用在所述GPU的着色器单元上执行的几何形状着色器程序产生所述一或多个基元的指令。
42.根据权利要求40所述的非暂时性计算机可读存储媒体,其中在由所述一或多个处理器执行后即刻致使所述一或多个处理器产生在空间上对应于用于所述相应线段的所述来回划线区域的所述一或多个基元的所述指令包括在由所述一或多个处理器执行后即刻致使所述一或多个处理器进行以下操作的指令:
产生所述相应线段的多个法向量,所述法向量中的每一者指示垂直于在沿着所述路径片段的多个点中的相应一者处所述路径片段的切线的方向,沿着所述路径片段的所述多个点中的每一者对应于所述相应线段的所述端点中的相应一者;
基于所述多个法向量和来回划线宽度确定用于所述相应线段的来回划线区域的拐角点;以及
基于所述来回划线区域的所述拐角点产生在空间上对应于用于所述相应线段的所述来回划线区域的所述一或多个基元。
Applications Claiming Priority (9)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201261681498P | 2012-08-09 | 2012-08-09 | |
US61/681,498 | 2012-08-09 | ||
US201261713377P | 2012-10-12 | 2012-10-12 | |
US61/713,377 | 2012-10-12 | ||
US201361755312P | 2013-01-22 | 2013-01-22 | |
US61/755,312 | 2013-01-22 | ||
US13/787,363 US9619853B2 (en) | 2012-08-09 | 2013-03-06 | GPU-accelerated path rendering |
US13/787,363 | 2013-03-06 | ||
PCT/US2013/049775 WO2014025483A1 (en) | 2012-08-09 | 2013-07-09 | Gpu-accelerated path rendering |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104520900A true CN104520900A (zh) | 2015-04-15 |
CN104520900B CN104520900B (zh) | 2017-12-08 |
Family
ID=50065865
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380041800.1A Expired - Fee Related CN104520900B (zh) | 2012-08-09 | 2013-07-09 | Gpu加速的路径再现 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9619853B2 (zh) |
KR (1) | KR20150041057A (zh) |
CN (1) | CN104520900B (zh) |
WO (1) | WO2014025483A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112414428A (zh) * | 2020-10-29 | 2021-02-26 | 汉海信息技术(上海)有限公司 | 导航信息的显示方法、装置、电子设备及存储介质 |
CN113052939A (zh) * | 2019-12-10 | 2021-06-29 | 辉达公司 | 对路径描边的补丁区段、顶端和连接统一编码 |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9275498B2 (en) | 2012-08-09 | 2016-03-01 | Qualcomm Incorporated | GPU-accelerated path rendering |
US9330495B2 (en) | 2012-08-09 | 2016-05-03 | Qualcomm Incorporated | Extending DX11 GPU for programmable vector graphics |
US9773341B2 (en) * | 2013-03-14 | 2017-09-26 | Nvidia Corporation | Rendering cover geometry without internal edges |
US9779534B2 (en) | 2013-08-28 | 2017-10-03 | Qualcomm Incorporated | Prefixed summed length in graphics processing |
US9679347B2 (en) * | 2014-02-18 | 2017-06-13 | Qualcomm Incorporated | Shader pipeline with shared data channels |
WO2015141260A1 (ja) * | 2014-03-17 | 2015-09-24 | 株式会社河合楽器製作所 | 手書き音楽記号認識装置およびプログラム |
KR20160030426A (ko) * | 2014-09-10 | 2016-03-18 | 삼성전자주식회사 | 서브디바이더를 포함하는 그래픽스 프로세싱 유닛과 이를 포함하는 장치 |
CN107077754B (zh) | 2014-11-07 | 2020-10-16 | 三星电子株式会社 | 显示装置和控制显示装置的方法 |
US9836874B2 (en) | 2015-01-27 | 2017-12-05 | Splunk Inc. | Efficient polygon-clipping technique to reduce data transfer requirements for a viewport |
US10026204B2 (en) | 2015-01-27 | 2018-07-17 | Splunk Inc. | Efficient point-in-polygon indexing technique for processing queries over geographic data sets |
US9767122B2 (en) | 2015-01-27 | 2017-09-19 | Splunk Inc. | Efficient point-in-polygon indexing technique to facilitate displaying geographic data |
US9916326B2 (en) | 2015-01-27 | 2018-03-13 | Splunk, Inc. | Efficient point-in-polygon indexing technique for facilitating geofencing operations |
KR102354989B1 (ko) * | 2015-04-14 | 2022-01-24 | 삼성전자주식회사 | 경로 렌더링을 위한 타일 비닝을 수행하는 방법 및 장치. |
KR102443697B1 (ko) | 2015-09-11 | 2022-09-15 | 삼성전자주식회사 | 경로 스트로크를 수행하는 방법 및 장치 |
US10685473B2 (en) * | 2017-05-31 | 2020-06-16 | Vmware, Inc. | Emulation of geometry shaders and stream output using compute shaders |
US11164372B2 (en) * | 2019-12-10 | 2021-11-02 | Nvidia Corporation | Polar stroking for vector graphics |
DE102020130293A1 (de) | 2019-12-10 | 2021-06-10 | Nvidia Corporation | Polar stroking für vektorgrafiken |
US11257253B2 (en) | 2019-12-10 | 2022-02-22 | Nvidia Corporation | Method and system for unified encoding of path segments, caps, and joins for path stroking |
CN111932689B (zh) * | 2020-07-03 | 2023-11-14 | 北京庚图科技有限公司 | 一种采用id像素图的三维对象快速选取方法 |
CN114581596A (zh) * | 2022-02-25 | 2022-06-03 | 北京构力科技有限公司 | 基于图形处理单元gpu驱动的几何形体快速渲染的方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101114380A (zh) * | 2006-03-10 | 2008-01-30 | 株式会社东芝 | 图像处理装置和图像处理方法 |
CN101689306A (zh) * | 2007-02-16 | 2010-03-31 | 高通股份有限公司 | 有效的二维及三维图形处理 |
CN101978393A (zh) * | 2008-03-20 | 2011-02-16 | 高通股份有限公司 | 用于图形渲染的多阶段细分 |
WO2011080776A1 (en) * | 2009-12-30 | 2011-07-07 | Telecom Italia S.P.A. . | Method for the calculation of the bounding box of vectorial graphic shapes |
US20110285724A1 (en) * | 2010-05-21 | 2011-11-24 | Kilgard Mark J | Conversion of dashed strokes into quadratic bèzier segment sequences |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7190367B2 (en) | 2003-03-25 | 2007-03-13 | Mitsubishi Electric Research Laboratories, Inc. | Method, apparatus, and system for rendering using a progressive cache |
US7109987B2 (en) | 2004-03-02 | 2006-09-19 | Ati Technologies Inc. | Method and apparatus for dual pass adaptive tessellation |
US7639252B2 (en) | 2004-08-11 | 2009-12-29 | Ati Technologies Ulc | Unified tessellation circuit and method therefor |
US7589730B1 (en) | 2005-05-20 | 2009-09-15 | Adobe Systems Incorporated | System and method for drawing a dashed path |
US7684641B1 (en) | 2005-12-13 | 2010-03-23 | Nvidia Corporation | Inside testing for paths using a derivative mask |
US8044955B1 (en) | 2007-08-31 | 2011-10-25 | Adobe Systems Incorporated | Dynamic tessellation spreading for resolution-independent GPU anti-aliasing and rendering |
WO2009093956A1 (en) | 2008-01-23 | 2009-07-30 | Swiftfoot Graphics Ab | Method, apparatus, and computer program product for improved graphics performance |
EP2107528B1 (en) | 2008-04-01 | 2012-12-26 | Telefonaktiebolaget L M Ericsson (PUBL) | Method of and arrangement for rendering a path |
US8773432B2 (en) * | 2008-04-18 | 2014-07-08 | Adobe Systems Incorporated | Triangulation for accelerated multi-resolution rendering of stroked paths |
US8243070B1 (en) | 2008-04-18 | 2012-08-14 | Adobe Systems Incorporated | Triangulation for accelerated rendering of polygons |
US8373702B2 (en) | 2009-05-15 | 2013-02-12 | Stmicroelectronics S.R.L. | System and method for adaptive tessellation of a curve |
US8884957B2 (en) | 2009-09-09 | 2014-11-11 | Advanced Micro Devices, Inc. | Tessellation engine and applications thereof |
JP2011128713A (ja) | 2009-12-15 | 2011-06-30 | Toshiba Corp | 画像処理装置および画像処理プログラム |
US8144147B2 (en) | 2010-04-07 | 2012-03-27 | Intel Corporation | Hierarchical bounding of displaced parametric surfaces |
US20110310102A1 (en) | 2010-06-17 | 2011-12-22 | Via Technologies, Inc. | Systems and methods for subdividing and storing vertex data |
US8624899B2 (en) | 2010-09-27 | 2014-01-07 | Microsoft Corporation | Arc spline GPU rasterization for cubic Bezier drawing |
US8791945B2 (en) | 2011-05-18 | 2014-07-29 | Intel Corporation | Rendering tessellated geometry with motion and defocus blur |
US8854374B2 (en) | 2011-12-23 | 2014-10-07 | Advanced Micro Devices, Inc. | Tessellation patterns |
US9275498B2 (en) | 2012-08-09 | 2016-03-01 | Qualcomm Incorporated | GPU-accelerated path rendering |
US9330495B2 (en) | 2012-08-09 | 2016-05-03 | Qualcomm Incorporated | Extending DX11 GPU for programmable vector graphics |
-
2013
- 2013-03-06 US US13/787,363 patent/US9619853B2/en active Active
- 2013-07-09 CN CN201380041800.1A patent/CN104520900B/zh not_active Expired - Fee Related
- 2013-07-09 WO PCT/US2013/049775 patent/WO2014025483A1/en active Application Filing
- 2013-07-09 KR KR1020157005793A patent/KR20150041057A/ko not_active Application Discontinuation
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101114380A (zh) * | 2006-03-10 | 2008-01-30 | 株式会社东芝 | 图像处理装置和图像处理方法 |
CN101689306A (zh) * | 2007-02-16 | 2010-03-31 | 高通股份有限公司 | 有效的二维及三维图形处理 |
CN101978393A (zh) * | 2008-03-20 | 2011-02-16 | 高通股份有限公司 | 用于图形渲染的多阶段细分 |
WO2011080776A1 (en) * | 2009-12-30 | 2011-07-07 | Telecom Italia S.P.A. . | Method for the calculation of the bounding box of vectorial graphic shapes |
US20110285724A1 (en) * | 2010-05-21 | 2011-11-24 | Kilgard Mark J | Conversion of dashed strokes into quadratic bèzier segment sequences |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113052939A (zh) * | 2019-12-10 | 2021-06-29 | 辉达公司 | 对路径描边的补丁区段、顶端和连接统一编码 |
CN113052939B (zh) * | 2019-12-10 | 2024-03-08 | 辉达公司 | 对路径描边的补丁区段、顶端和连接统一编码 |
CN112414428A (zh) * | 2020-10-29 | 2021-02-26 | 汉海信息技术(上海)有限公司 | 导航信息的显示方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104520900B (zh) | 2017-12-08 |
KR20150041057A (ko) | 2015-04-15 |
US9619853B2 (en) | 2017-04-11 |
WO2014025483A1 (en) | 2014-02-13 |
US20140043341A1 (en) | 2014-02-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104520900A (zh) | Gpu加速的路径再现 | |
CN104541305B (zh) | Gpu加速的路径再现 | |
CN104520901B (zh) | 用于路径再现的方法及装置 | |
KR101776547B1 (ko) | Gpu-가속된 패스 렌더링 | |
CN105493150B (zh) | 图形处理中的目标独立模板印刷 | |
CN102227752B (zh) | 使用三维图形硬件的二维图形渲染期间的顶点丢弃 | |
US10176626B2 (en) | Systems and methods for computer-based visualization, rendering, and representation of surfaces using point clouds | |
CN101116111B (zh) | 使用3d光栅化算法的2d/3d线条渲染 | |
US9177351B2 (en) | Multi-primitive graphics rendering pipeline | |
US8379025B1 (en) | Methods and apparatus for rendering vector art on graphics hardware | |
EP2831848B1 (en) | Method for estimating the opacity level in a scene and corresponding device | |
TWI434226B (zh) | 影像處理技術 | |
Strugar | Continuous distance-dependent level of detail for rendering heightmaps | |
US10140736B2 (en) | Graphics processing systems | |
JP2008500625A (ja) | タイルベース・グラフィック・レンダリング | |
Schneider et al. | Real-time rendering of complex vector data on 3d terrain models | |
US9858708B2 (en) | Convex polygon clipping during rendering | |
CN111091620A (zh) | 基于图形学的地图动态路网处理方法及系统、计算机设备 | |
Nah et al. | MobiRT: an implementation of OpenGL ES-based CPU-GPU hybrid ray tracer for mobile devices | |
Rössler | Rendering interactive maps on mobile devices using graphics hardware | |
Mahsman | Projective grid mapping for planetary terrain | |
KR102585220B1 (ko) | 타일 기반 렌더링을 수행하는 방법 및 장치 | |
Novo Rodríguez | High performance visualization through graphics hardware and integration issues in an electric power grid Computer-Aided-Design application |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20171208 Termination date: 20190709 |