首页 / 专利库 / 软件 / 软件解决方案 / 软件组件 / 规则引擎 / 用于路径再现的方法及装置

用于路径再现的方法及装置

阅读:1018发布:2020-09-06

专利汇可以提供用于路径再现的方法及装置专利检索,专利查询,专利分析的服务。并且本 发明 提供路径再现,包含以 图形处理单元 GPU接收指示待再现路径的路径 片段 的数据。系统和方法通过执行所述路径片段的填充而再现所述路径片段,所述填充包含将所述路径片段棋盘形布置为第一多个基元,每基元包含三 角 形,将第一多个基元存储在模板 缓冲器 中,以及绘制所述路径片段的限界框且在启用模板测试的情况下再现所述限界框。所述系统和方法还来回划动所述路径片段,包含将所述路径棋盘形布置为第二多个基元,再棋盘形布置所述第二多个基元,根据虚线模式切割所述第二多个基元,在切割的 位置 处产生盖,以及产生来回划线的三角测量且基于所述三角测量光栅化所述来回划线。,下面是用于路径再现的方法及装置专利的具体信息内容。

1.一种路径再现的方法,其包括:
图形处理单元GPU接收指示待再现路径的路径片段的数据;及
以所述GPU再现所述路径片段,其中再现所述路径片段包括填充所述路径片段及来回划动所述路径片段,其中填充所述路径片段包含:
使用所述GPU将所述路径片段棋盘形布置为第一多个基元,每基元包含三形,将所述第一多个基元存储在模板缓冲器中,以及
绘制所述路径片段的限界框且在启用模板测试的情况下针对存储在所述模板缓冲器中的所述第一多个基元再现所述限界框;以及
其中来回划动所述路径片段,包含:
使用所述GPU将所述路径棋盘形布置为第二多个基元,
确定所述第二多个基元中的至少两个法线之间的角度差比最大角度偏差阈值宽,响应于确定所述第二多个基元中的所述至少两个法线之间的所述角度差比所述最大角度偏差阈值宽,使用所述GPU再棋盘形布置所述第二多个基元,
使用所述GPU根据虚线模式切割所述第二多个基元,
使用所述GPU在切割的位置处产生盖,以及
使用所述GPU产生来回划线的三角测量且基于所述三角测量光栅化所述来回划线。
2.根据权利要求1所述的方法,其中绘制所述限界框包括使用填充颜色绘制所述路径片段的所述限界框。
3.根据权利要求1所述的方法,其中在无需使用中央处理单元CPU的情况下再现所述路径片段。
4.根据权利要求1所述的方法,其中所述多个基元包括多个线段。
5.根据权利要求1所述的方法,其中指示所述路径片段的所述数据包括线、椭圆形弧、二次贝塞尔曲线和三次贝塞尔曲线中的一者。
6.根据权利要求1所述的方法,其进一步包括:确定将如何基于奇偶规则填充包含所述路径片段且具有一个以上闭合轮廓的图形形状。
7.根据权利要求6所述的方法,其中所述奇偶规则通过以下方法确定点是否应被视为在内部:绘制在任何方向中从所述点到无限远处的射线且对所述射线交叉的来自给定形状的路径片段的数目进行计数,如果所述路径片段的数目是奇数则所述点视为在曲线内部,如果所述路径片段的数目是偶数则所述点视为在所述曲线外部。
8.根据权利要求1所述的方法,其进一步包括:确定将如何基于非零规则填充包含所述路径片段且具有一个以上闭合轮廓的图形形状。
9.根据权利要求8所述的方法,其中非零规则确定用于曲线的每一部分的来回划线的方向,对于给定曲线C和给定点P,所述非零规则通过以下方法确定点是否应被视为在内部:
(1)构造在任何方向中从P出来朝向无限远处的直线,(2)找到C与此射线的全部交叉点,以及(3)将卷绕数目记分并且其中将所述卷绕数目记分包含:(1)对于每个顺时针交叉点,如从P查看,所述曲线从左到右穿过所述射线,减去1,(2)对于每个逆时针交叉点,如从P查看,所述曲线从右到左穿过,增加1,如果总卷绕数目是零,则P在C外部,否则,P在C内部。
10.根据权利要求1所述的方法,其中指示路径片段的所述数据包括线,且来回划动包括通过在垂直于所述线的两个方向中加粗所述线而加宽所述线。
11.根据权利要求1所述的方法,其中指示路径片段的所述数据包括曲线,且来回划动进一步包括:
将所述曲线分裂为线段;
确定来回划线宽度;以及
产生经定位以加宽所述线段中的至少一者的一对三角形条带。
12.根据权利要求1所述的方法,其中所述GPU实施用于处置图形任务的DirectX11应用程序编程接口
13.根据权利要求12所述的方法,其中所述GPU进一步实施经配置以处理许多索引和路径片段类型的绘制调用功能。
14.根据权利要求13所述的方法,其中所述GPU进一步实施信息基元类型以允许产生用于来回划线的三角形和用于填充的线。
15.根据权利要求1所述的方法,其中棋盘形布置所述路径片段包括使用所述GPU的固定功能棋盘形布置引擎和在所述GPU的着色器单元上执行的域着色器程序来棋盘形布置所述路径片段。
16.一种经配置以执行图形处理的设备,其包括:
存储器单元,其经配置以存储指示了待再现路径的路径片段的数据;及
图形处理单元GPU,其经配置以:
接收指示了所述待再现路径的所述路径片段的所述数据;以及
而再现所述路径片段,其中为再现所述路径片段,所述GPU经配置以填充所述路径片段并来回划动所述路径片段,其中为填充所述路径片段,所述GPU经配置以:
将所述路径片段棋盘形布置为第一多个基元,每基元包含三角形,
将所述第一多个基元存储在模板缓冲器中,以及
绘制所述路径片段的限界框且在启用模板测试的情况下针对存储在所述模板缓冲器中的所述第一多个基元再现所述限界框;以及
其中为来回划动所述路径片段,所述GPU经配置以:
将所述路径棋盘形布置为第二多个基元,
确定所述第二多个基元中的至少两个法线之间的角度差比最大角度偏差阈值宽,响应于确定所述第二多个基元中的所述至少两个法线之间的所述角度差比所述最大角度偏差阈值宽,再棋盘形布置所述第二多个基元,
根据虚线模式切割所述第二多个基元,
在切割的位置处产生盖,
产生来回划线的三角测量且基于所述三角测量光栅化所述来回划线。
17.根据权利要求16所述的设备,所述图形处理单元进一步经配置以使用填充颜色绘制所述路径片段的限界框。
18.根据权利要求16所述的设备,所述图形处理单元进一步经配置以在无需使用中央处理单元CPU的情况下再现所述路径片段。
19.根据权利要求16所述的设备,其中所述多个基元包括多个线段。
20.根据权利要求16所述的设备,其中所述路径片段包括线、椭圆形弧、二次贝塞尔曲线和三次贝塞尔曲线中的一者。
21.根据权利要求16所述的设备,所述图形处理单元进一步经配置以确定将如何基于奇偶规则填充包含所述路径片段且具有一个以上闭合轮廓的图形形状。
22.根据权利要求21所述的设备,其中所述奇偶规则通过以下方法确定点是否应被视为在内部:绘制在任何方向中从所述点到无限远处的射线且对所述射线交叉的来自给定形状的路径片段的数目进行计数,如果所述路径片段的数目是奇数则所述点视为在曲线内部,如果所述路径片段的数目是偶数则所述点视为在所述曲线外部。
23.根据权利要求16所述的设备,所述图形处理单元进一步经配置以确定将如何基于非零规则填充包含所述路径片段且具有一个以上闭合轮廓的图形形状。
24.根据权利要求16所述的设备,其中非零规则确定用于曲线的每一部分的来回划线的方向,对于给定曲线C和给定点P,所述非零规则通过以下方法确定点是否应被视为在内部:(1)构造在任何方向中从P出来朝向无限远处的直线,(2)找到C与此射线的全部交叉点,以及(3)将卷绕数目记分并且其中将所述卷绕数目记分包含:(1)对于每个顺时针交叉点,如从P查看,所述曲线从左到右穿过所述射线,减去1,(2)对于每个逆时针交叉点,如从P查看,所述曲线从右到左穿过,增加1,如果总卷绕数目是零,则P在C外部,否则,P在C内部。
25.根据权利要求16所述的设备,其中指示所述路径片段的所述数据包括线,且来回划动包括通过在垂直于所述线的两个方向中加粗所述线而加宽所述线。
26.根据权利要求16所述的设备,其中所述路径片段包括曲线,且所述图形处理单元进一步经配置以通过以下方法来回划线:
将所述曲线分裂为线段;
确定来回划线宽度;以及
产生经定位以加宽所述线段中的至少一者的一对三角形条带。
27.根据权利要求16所述的设备,其中所述图形处理单元进一步经配置以实施用于处置图形任务的DirectX11应用程序编程接口
28.根据权利要求27所述的设备,所述图形处理单元进一步经配置以实施经配置以处理许多索引和路径片段类型的绘制调用功能。
29.根据权利要求28所述的设备,所述图形处理单元进一步经配置以实施信息基元类型以允许产生用于来回划线的三角形和用于填充的线。
30.根据权利要求16所述的设备,所述图形处理单元进一步经配置以使用所述GPU的固定功能棋盘形布置引擎和在所述GPU的着色器单元上执行的域着色器程序来棋盘形布置所述路径片段。
31.一种设备,其包括图形处理单元GPU,所述GPU包括:
用于接收指示待再现路径的路径片段的数据的装置;及
用于再现所述路径片段的装置,用于再现所述路径片段的装置包括用于填充所述路径片段的装置及用于来回划动所述路径片段的装置,其中用于填充所述路径片段的装置包含:
用于使用所述GPU将所述路径片段棋盘形布置为第一多个基元的装置,每基元包含三角形,
用于将所述第一多个基元存储在模板缓冲器中的装置,以及
用于绘制所述路径片段的限界框的装置以及用于在启用模板测试的情况下针对存储在所述模板缓冲器中的所述第一多个基元再现所述限界框的装置;以及
其中所述用于来回划动所述路径片段的装置包含:
用于将所述路径棋盘形布置为第二多个基元的装置,
用于确定所述第二多个基元中的至少两个法线之间的角度差比最大角度偏差阈值宽的装置,
用于响应于确定所述第二多个基元中的所述至少两个法线之间的所述角度差比所述最大角度偏差阈值宽,再棋盘形布置所述第二多个基元的装置,
用于根据虚线模式切割所述第二多个基元的装置,
用于在切割的位置处产生盖的装置,以及
用于产生来回划线的三角测量且基于所述三角测量光栅化所述来回划线的装置。
32.根据权利要求31所述的设备,其中用于绘制所述限界框的装置包括用于使用填充颜色绘制所述路径片段的限界框的装置。
33.根据权利要求31所述的设备,其中在无需使用中央处理单元CPU的情况下再现所述路径片段。
34.根据权利要求31所述的设备,其中所述多个基元包括多个线段。
35.根据权利要求31所述的设备,其中指示所述路径片段的所述数据包括线、椭圆形弧、二次贝塞尔曲线和三次贝塞尔曲线中的一者。
36.根据权利要求31所述的设备,其进一步包括用于确定将如何基于奇偶规则填充包含所述路径片段且具有一个以上闭合轮廓的图形形状的装置。

说明书全文

用于路径再现的方法及装置

[0001] 本申请案主张2012年8月9日申请的第61/681,498号美国临时申请案、2012年10月12日申请的第61/713,377号美国临时申请案、2012年11月6日申请的第61/723,274号美国临时申请案、2013年1月22日申请的第61/755,312号美国临时申请案、2013年1月22日申请的第61/755,359号美国临时申请案以及2013年1月22日申请的第61/755,391号美国临时申请案的权益,以上申请案中的每一者的整个内容以引用的方式并入本文中。

技术领域

[0002] 本发明涉及用于图形处理的技术,且更具体地说,涉及用于以图形处理单元进行路径再现的技术。

背景技术

[0003] 用于显示的视觉内容可使用用于向量图形的路径再现技术来产生。路径再现可指代二维(2D)向量图形路径(可替代地在本文中被称作“路径”)的再现,所述路径中的每一者可包含一或多个路径片段。当路径包含两个或两个以上路径片段时,个别路径片段可具有相同类型或不同类型。路径片段的类型可包含(例如)线、椭圆形弧、二次贝塞尔曲线和三次贝塞尔曲线。在一些实例中,路径片段类型可根据例如开放向量图形(OpenVG)API等标准向量图形应用程序编程接口(API)来界定。
[0004] 路径再现通常由中央处理单元(CPU)实施。然而,此方法可为CPU密集的,且因此可限制可用于其它CPU任务的CPU处理循环的量。包含路径再现的用于向量图形的常规技术可完全在CPU中或部分地在CPU中且部分地在GPU中实施。

发明内容

[0005] 本发明提供用于路径再现的系统和方法,包含绘制路径片段、填充路径片段,包含(1)将路径棋盘形布置为线段,(2)使用单元缓冲器进行光栅化和扫描填充,以及(3)使用填充颜色和来自单元缓冲器的模板绘制路径的限界框;以及来回划动路径片段,包含(1)将路径棋盘形布置为线段,(2)根据虚线模式切割线段,以及(3)产生来回划线的三测量且光栅化所述来回划线。
[0006] 在一个实例中,本发明描述一种方法,其包含:以图形处理单元(GPU)接收指示待再现路径的路径片段的数据;以所述GPU通过执行所述路径片段的填充而再现所述路径片段,填充所述路径片段包含:将所述路径片段棋盘形布置为第一多个基元,每基元包含三角形,将第一多个基元存储在模板缓冲器中,以及绘制所述路径片段的限界框且在启用模板测试的情况下再现所述限界框;以及来回划动所述路径片段,包含:将所述路径棋盘形布置为第二多个基元,再棋盘形布置所述第二多个基元,根据虚线模式切割所述第二多个基元,在切割的位置处产生盖,以及产生来回划线的三角测量且基于所述三角测量光栅化所述来回划线。
[0007] 在另一实例中,本发明是一种经配置以执行图形处理的设备,其包含:图形处理单元,经配置以:接收指示待再现路径的路径片段的数据;以及通过执行所述路径片段的填充而再现所述路径片段,所述填充包含:将所述路径片段棋盘形布置为第一多个基元,每基元包含三角形,将第一多个基元存储在模板缓冲器中,以及绘制所述路径片段的限界框且在启用模板测试的情况下再现所述限界框;以及来回划动所述路径片段,包含:将所述路径棋盘形布置为第二多个基元,再棋盘形布置所述第二多个基元,根据虚线模式切割所述第二多个基元,在切割的位置处产生盖,产生来回划线的三角测量且基于所述三角测量光栅化所述来回划线。
[0008] 在另一实例中,本发明描述一种设备,其包含:用于接收指示待再现路径的路径片段的数据的装置;用于通过执行所述路径片段的填充而再现所述路径片段的装置,所述用于填充所述路径片段的装置包含:用于将所述路径片段棋盘形布置为第一多个基元的装置,每基元包含三角形,用于将第一多个基元存储在模板缓冲器中的装置,以及用于绘制所述路径片段的限界框的装置以及用于在启用模板测试的情况下再现所述限界框的装置;以及用于来回划动所述路径片段的装置,包含:用于将所述路径棋盘形布置为第二多个基元的装置,用于再棋盘形布置所述第二多个基元的装置,用于根据虚线模式切割所述第二多个基元的装置,用于在切割的位置处产生盖的装置,以及用于产生来回划线的三角测量且基于所述三角测量光栅化所述来回划线的装置。
[0009] 在另一实例中,本发明描述一种计算机可读存储媒体。所述计算机可读存储媒体具有存储于其上的指令,所述指令在执行后即刻致使一或多个处理器:接收指示待再现路径的路径片段的数据;以及通过执行所述路径片段的填充而再现所述路径片段,所述填充包含:将所述路径片段棋盘形布置为第一多个基元,每基元包含三角形,将第一多个基元存储在模板缓冲器中,以及绘制所述路径片段的限界框且在启用模板测试的情况下再现所述限界框;以及将所述路径棋盘形布置为第二多个基元,再棋盘形布置所述第二多个基元,根据虚线模式切割所述第二多个基元,在切割的位置处产生盖,以及产生来回划线的三角测量且基于所述三角测量光栅化所述来回划线。
[0010] 在一个实例中,本发明描述一种方法,其包含:以图形处理单元(GPU)接收指示待再现路径的路径片段的数据;以及以所述GPU通过执行所述路径片段的填充而再现所述路径片段,填充所述路径片段包含:将所述路径片段棋盘形布置为第一多个基元,使用单元缓冲器基于所述第一多个基元而光栅化且扫描填充所述路径片段,以及绘制所述路径片段的限界框和来自所述单元缓冲器的模板。
[0011] 在以下附图及描述中阐述一或多个实例的细节。其它特征、目标及优点将从所述描述及附图以及权利要求书中显而易见。

附图说明

[0012] 图1是说明可用以实施本发明的路径再现技术的实例计算装置的框图
[0013] 图2是进一步详细说明图1中的计算装置的CPU、GPU和存储器的框图。
[0014] 图3是说明使用棋盘形布置的实例图形管线的框图。
[0015] 图4是说明根据本发明中描述的一或多个实例的使用棋盘形布置的实例图形管线的框图。
[0016] 图5是说明根据本发明中描述的一或多个实例的来回划动的实例的图,所述来回划动可包含通过在垂直于线的两个方向中加粗所述线而加宽所述线。
[0017] 图6是说明根据本发明中描述的一或多个实例的来回划动的实例的图,其中可定位一对三角形条带以加宽线段中的至少一者。
[0018] 图7是说明根据本发明中描述的一或多个实例的接合作为斜边、圆形或斜接的路径片段的实例的图。
[0019] 图8是说明根据本发明中描述的一或多个实例的接合作为斜边的路径片段的实例的图。
[0020] 图9是说明根据本发明中描述的一或多个实例的接合作为斜接的路径片段的实例的图。
[0021] 图10是说明根据本发明中描述的一或多个实例的接合作为圆形的路径片段的实例的图。
[0022] 图11是说明将使用本发明的路径填充技术填充的实例多边形的概念图
[0023] 图12是说明其中法向量的交叉点在来回划线区域的内部的实例来回划线区域配置的概念图。
[0024] 图13是说明其中法向量的交叉点在来回划线区域外部的实例来回划线区域配置的概念图。
[0025] 图14是说明可在形成来回划线区域的两个三角形之间形成的实例T接头的概念图。
[0026] 图15是说明分裂为十六乘十六子像素栅格的像素的实例的图。
[0027] 图16是说明分裂为四个十六乘十六子像素栅格的四个相邻像素的实例的图。
[0028] 图17是说明边缘取样的实例的图。
[0029] 图18A和18B是说明根据本发明中描述的一或多个实例的实例方法的流程图
[0030] 图19是说明实例填充过程的图。
[0031] 图20A到20Z是说明根据本发明中描述的一或多个实例的逐步实例的图。
[0032] 图21A到20D是说明根据本发明中描述的一或多个实例的另一实例的图。
[0033] 图22A到22B是说明根据本发明中描述的一或多个实例的另一实例的图。
[0034] 图23A到23C是说明根据本发明中描述的一或多个实例的另一实例的图。
[0035] 图24是说明根据本发明中描述的一或多个实例的实例曲线的图。
[0036] 图25是说明根据本发明中描述的一或多个实例的实例曲线的图。
[0037] 图26A到26C是说明根据本发明中描述的一或多个实例处理的实例曲线的图。
[0038] 图23A到23C是说明根据本发明中描述的一或多个实例的另一实例的图。
[0039] 图27是说明根据本发明中描述的一或多个实例的实例的图。
[0040] 图28是说明根据本发明中描述的一或多个实例的实例曲线的图。
[0041] 图29是说明根据本发明中描述的一或多个实例的实例曲线的图。
[0042] 图30是说明根据本发明中描述的一或多个实例的实例曲线的图。
[0043] 图31是说明根据本发明中描述的一或多个实例的实例输出的图。
[0044] 图32是说明根据本发明中描述的一或多个实例的实例线段的图。
[0045] 图33是说明根据本发明中描述的一或多个实例的实例线段的图。
[0046] 图34是说明根据本发明中描述的一或多个实例的实例线段的图。
[0047] 图35为说明根据本发明中所描述的一或多个实例的实例方法的流程图。
[0048] 图36是说明根据本发明中描述的一或多个实例的实例方法的流程图。

具体实施方式

[0049] 本发明是针对用于使用图形处理单元(GPU)执行路径再现的技术。路径再现可指代二维(2D)向量图形路径(可替代地在本文中被称作“路径”)的再现,所述路径中的每一者可包含一或多个路径片段。当路径包含两个或两个以上路径片段时,个别路径片段可具有相同类型或不同类型。路径片段的类型可包含(例如)线、椭圆形弧、二次贝塞尔曲线和三次贝塞尔曲线。在一些实例中,路径片段类型可根据例如开放向量图形(OpenVG)API等标准向量图形应用程序编程接口(API)来界定。
[0050] 如上文所论述,包含路径再现的用于向量图形的常规技术是完全在CPU中或部分地在CPU中且部分地在GPU中实施。这些实施方案中没有任一者允许GPU中的单个遍次。另外,没有任一实施方案完全从CPU卸载向量图形处理。一个是完全基于CPU,而另一者使用CPU和GPU两者。
[0051] 如所论述,在CPU中执行向量图形处理可为非所要的,因为此类处理可为处理器密集的且因此,可限制CPU中可用于执行其它功能的处理循环的数目。另外,在许多情况下,CPU可在与GPU相比时消耗更多功率。由于许多移动装置可为电池供电的,因此较低功率消耗可为有利的。此外,CPU可不允许许多的并行处理(例如,用于相当价格的GPU)。大体上,CPU在与GPU相比时也可能更昂贵。
[0052] 本文所描述的实例提供可(例如)通过修改本文所述的实例系统而应用于(例如)现有微软DirectX11顺应硬件(或等效硬件支持棋盘形布置)以允许可用于向量图形处理的路径再现的系统和方法。在一个实例中,本发明提供使用DirectX11管线级的单个遍次解决方案。此实例可完全从CPU卸载向量图形处理。另外,所揭示的技术提供如GPU中的现有着色器的可编程向量图形处理且可用以支持其它基元类型和接点/末端规则。
[0053] GPU通常实施三维(3D)图形管线,其经设计以与一或多个3D图形API顺应。因为当今在使用的流行的3D图形API并不需要顺应装置支持路径再现命令,所以现代的GPU常常提供极少到不提供用于路径再现命令的硬件加速。举例来说,现代的GPU中实施的典型3D图形管线可包含光栅化器,其经设计以光栅化低阶非弯曲3D图形基元(例如点、线和三角形),但不能够直接再现弯曲路径再现基元(例如,椭圆形弧和贝塞尔曲线)。
[0054] 用于路径再现的一个方法使用GPU管线来提供部分GPU硬件加速以用于路径再现命令的执行。一些实例可完全避免预处理。在一实例实施方案中,路径的第一顶点可用作用于填充的枢轴点。额外硬件可添加到设置引擎中的GPU以计算路径顶点的最小坐标和最大坐标。这些最小值和最大值可用以确定限界框形状。
[0055] 用于路径再现的一个方法使用现代的3D GPU管线来提供部分GPU硬件加速以用于路径再现命令的执行。此方法涉及以中央处理单元(CPU)预处理路径片段以便将所述路径片段转换为可由GPU光栅化的一或多个低阶非弯曲3D图形基元。举例来说,CPU可将弯曲路径片段(例如,椭圆弧或贝塞尔曲线)棋盘形布置为接近所述路径片段的曲率的相对较小三角形的集合,且可致使使用GPU再现所述三角形集合。然而,此方法可为CPU密集的,且因此可限制可用于其它CPU任务的CPU处理循环的量。此外,在某些情况下,可需要相对较大量的三角形来以所要细节平再现路径片段。相对较大量的三角形在存储数据时可消耗大量存储器存储空间,且在将数据传送到GPU时可消耗大量的存储器带宽。
[0056] 用于提供部分到全部GPU硬件加速以用于路径再现命令的执行的另一方法可涉及修改GPU的架构以支持专用硬件加速路径再现管线。然而,因为流行的3D图形API(例如,DirectX 11API)并不需要GPU架构包含专用路径再现管线,所以此方法并不得到将保证由与特定3D图形API(例如,DirectX(DX)11API)顺应的全部GPU支持的跨平台硬件加速路径再现解决方案。
[0057] 本发明中的路径再现技术可提供GPU硬件加速路径再现解决方案,其中GPU经配置以将路径片段的所接收指示棋盘形布置为多个线段且使用3D图形管线再现所述经棋盘形布置线段。通过使用GPU将路径片段棋盘形布置为线段,预处理路径片段的负担从CPU松开,进而释放处理资源以用于其它CPU任务。此外,在一些实例中,GPU可利用高度平行的现代GPU棋盘形布置架构来执行棋盘形布置操作,其在一些实例中可允许GPU以比CPU更高效的方式棋盘形布置路径片段。另外,因为棋盘形布置在GPU中发生而不是在CPU中发生,所以众多的经棋盘形布置基元不需要存储于系统存储器中且不需要从CPU传递到GPU,进而减少用于路径再现需要的存储器占据面积以及用于路径再现需要的存储器带宽。
[0058] 棋盘形布置路径片段可包含使用GPU的固定功能棋盘形布置引擎和在GPU的着色器单元上执行的域着色器程序来棋盘形布置路径片段。另外,在实例中,可使用单元缓冲器。所述单元缓冲器可为包含许多单元的存储器。举例来说,所述单元缓冲器可为十六乘十六子像素栅格。一个单元可表示最终图像中的一个像素。单元缓冲器可含有x*y单元的矩阵,其中一个单元表示最终图像中的一个像素,单元缓冲器中的每一单元存储卷绕计数器信息,并且其中单元缓冲器与缓冲器是相同大小。
[0059] 在一个实例中,单元缓冲器中的每一单元表示最终图像中的一个像素。每一单元可存储卷绕计数器信息。单元缓冲器大小可与帧缓冲器大小一样大,但存储器要求可限制一些实例。因此,帧缓冲器可分裂为数目(x*y)的像素瓦片,其中单元缓冲器大小为x*y单元。装置可一次绘制一个瓦片,且随后将关于最后列(最右)的卷绕计数器信息载运到下一瓦片(右边的一个瓦片)。如果当前瓦片是一行中的第一者,那么不存在先前瓦片,因此不存在载运。对于这些瓦片,可将光栅化线固定到第一列。
[0060] 在一些实例中,GPU可经配置以使用由例如DirectX 11API等特定3D图形API指定的图形架构来棋盘形布置且再现路径片段,而不需要任何额外硬件组件和/或对图形架构的修改。在此等实例中当执行路径再现时通过仅利用很可能或保证由特定3D图形API呈现的架构特征,可实现跨平台硬件加速路径再现解决方案,其能够在与3D图形API顺应的任何装置上实施。举例来说,在一些实例中,本发明的技术可提供能够在DirectX 11顺应图形硬件上使用的路径再现解决方案。在一些实例中,可停用一些路径再现技术(例如,划虚线和尖点处置)以便实施利用DirectX 11架构的DirectX 11路径再现解决方案而无需任何修改。
[0061] 路径再现可划分成两个主操作:(1)填充路径片段,和(2)来回划动路径片段。在一些实例中,可执行填充和来回划动操作中的一或两者以完全再现路径。填充操作可经配置以用指定填充颜色填充路径片段的内部区。来回划动操作可经配置以通过垂直于路径向外动作而“加宽”路径片段的边缘。除所述主操作之外,路径再现还可涉及将各种类型的末端盖应用于路径的末端,且应用路径的内部路径片段的端点之间的各种类型的接合以产生平滑路径。
[0062] 在路径片段已经棋盘形布置之后,实施本发明的路径再现技术的GPU可经配置以产生对应于所述经棋盘形布置路径片段的3D几何形状,其允许GPU再现用于路径片段的填充区域和用于路径片段的来回划动区域中的一或两者。3D几何形状可包含能够由现有3D光栅化引擎光栅化的低阶非弯曲3D图形基元(例如,三角形)。通过基于由GPU从近似于待再现路径的多个经棋盘形布置线段产生的3D几何形状而再现用于路径片段的填充区域和/或来回划动区域,3D GPU管线可用以提供用于填充和来回划动操作的执行的100%或几乎100%GPU解决方案。
[0063] 在一些实例中,(例如)在DirectX11管线架构或其它相似3D图形管线中实施这些方法可根据本发明的技术而修改以包含许多扩展。举例来说,可修改DirectX11管线以包含路径基元。路径基元可通过允许直接在实施DirectX11的GPU中的路径再现而无需使用单独的CPU,来允许DirectX11管线处理向量图形。举例来说,路径基元可允许使用在此所描述的方法的填充、来回划动或两者。
[0064] 图1是说明可用以实施本发明的路径再现技术的实例计算装置2的框图。计算装置2可包括个人计算机、桌上型计算机、膝上型计算机、计算机工作站、视频游戏平台或控制台、无线通信装置(例如,移动电话、蜂窝式电话、卫星电话和/或移动电话手持机)、陆线电话、因特网电话、手持式装置(例如,便携式视频游戏装置或个人数字助理(PDA))、个人音乐播放器、视频播放器、显示装置、电视、电视机顶盒、服务器、中间网络装置、主机计算机、或处理及/或显示图形数据的任何其它类型的装置。
[0065] 如图1的实例中所示,计算装置2包含用户接口4、CPU 6、存储器控制器8、存储器10、图形处理单元(GPU)12、GPU高速缓冲存储器14、显示接口16、显示器18和总线20。用户接口4、CPU 6、存储器控制器8、GPU 12和显示接口16可使用总线20彼此通信。应注意图1中图解说明的不同组件之间的总线和通信接口的特定配置仅是示范性的,且具有相同或不同组件的计算装置和/或其它图形处理系统的其它配置可用以实施本发明的技术。
[0066] CPU 6可包括控制计算装置2的操作的通用或专用处理器。用户可将输入提供到计算装置2以致使CPU 6执行一或多个软件应用程序。在CPU 6上执行的软件应用程序可包含(例如)操作系统、字处理器应用程序、电子邮件应用程序、电子数据表应用程序、媒体播放器应用程序、视频游戏应用程序、图形用户接口应用程序或另一程序。用户可经由一或多个输入装置(未图示)(例如,键盘鼠标、麦克、触摸垫或经由用户接口4耦合到计算装置2的另一输入装置)将输入提供到计算装置2。
[0067] 在CPU 6执行的软件应用程序可包含指示GPU 12致使图形数据到显示器18的再现的一或多个图形再现指令。在一些实例中,软件指令可符合图形应用程序编程接口(API),例如开放图形库 API、开放图形库嵌入系统(OpenGL ES)API、Direct3D API、DirectX API、RenderMan API、WebGL API或任何其它公众或专有标准图形API。为了处理图形再现指令,CPU 6可将一或多个图形再现命令发出到GPU 12以致使GPU 12执行图形数据的再现的一些或全部。在一些实例中,待再现的图形数据可包含图形基元列表,例如点、线、三角形、四边形、三角形条带、片等。在其它实例中,待再现的图形数据可包含一或多个路径再现基元,例如线段、椭圆形弧、二次贝塞尔曲线和三次贝塞尔曲线。
[0068] 本发明提供用于路径再现的系统和方法,包含绘制路径片段、填充路径片段,包含(1)将路径棋盘形布置为线段,(2)使用单元缓冲器进行光栅化和扫描填充,以及(3)使用来自单元缓冲器的填充颜色和模板绘制路径的限界框;以及来回划动路径片段,包含(1)将路径棋盘形布置为线段,(2)根据虚线模式切割线段,以及(3)产生来回划线的三角测量且光栅化所述来回划线。在一些实例中,这些功能中的一或多者可由GPU 12执行。举例来说,在各种实施方案中,这些功能中无任一者在CPU中执行。
[0069] 存储器控制器8促使数据进出存储器10的传送。举例来说,存储器控制器8可从CPU 6和/或GPU 12接收存储器读取请求和存储器写入请求,且相对于存储器10服务此类请求以便为计算装置2中的组件提供存储器服务。存储器控制器8通信地耦合到存储器10。虽然存储器控制器8在图1的实例计算装置2中图解说明为与CPU 6和存储器10两者分开的处理模,但在其它实例中,存储器控制器8的功能性的一些或全部可在CPU 6、GPU 12和存储器10中的一或多者上实施。
[0070] 存储器10可存储可存取以用于由CPU 6执行的程序模块和/或指令和/或用于由CPU 6上执行的程序使用的数据。举例来说,存储器10可存储用户应用程序和与所述应用程序相关联的图形数据。存储器10还可存储用于由计算装置2的其它组件使用和/或由其产生的信息。举例来说,存储器10可充当用于GPU 12的装置存储器且可存储将由GPU 12操作的数据以及由GPU 12执行的操作产生的数据。举例来说,存储器10可存储路径数据、路径片段数据、表面、纹理缓冲器、深度缓冲器、单元缓冲器、顶点缓冲器、帧缓冲器或类似者的任何组合。另外,存储器10可存储用于由GPU 12处理的命令流。举例来说,存储器10可存储路径再现命令、3D图形再现命令和/或通用GPU计算命令。存储器10可包含一或多个易失性或非易失性存储器或存储装置,例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、同步动态随机存取存储器(SDRAM)、只读存储器(ROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学存储媒体。
[0071] GPU 12可经配置以执行由CPU 6发出到GPU 12的命令。由GPU 12执行的命令可包含图形命令、绘制调用命令、GPU状态编程命令、存储器传送命令、通用计算命令、核心执行命令等。存储器传送命令可包含例如存储器复制命令、存储器组构命令和块传送(传图)命令。
[0072] 在一些实例中,GPU 12可经配置以执行图形操作以将一或多个图形基元再现到显示器18。在此等实例中,当在CPU 6上执行的软件应用程序之一需要图形处理时,CPU 6可将图形数据提供到GPU 12用于向显示器18再现且将一或多个图形命令发出到GPU 12。所述图形命令可包含例如绘制调用命令、GPU状态编程命令、存储器传送命令、传图命令等。所述图形数据可包含顶点缓冲器、纹理数据、表面数据等。在一些实例中,CPU 6可通过将命令和图形数据写入到可由GPU 12存取的存储器10而将命令和图形数据提供到GPU 12。
[0073] 在其它实例中,GPU 12可经配置以执行用于CPU 6上执行的应用程序的通用计算。在此等实例中,当CPU 6上执行的软件应用程序之一决定将计算任务卸载到GPU 12时,CPU 
6可将通用计算数据提供到GPU 12,且将一或多个通用计算命令发出到GPU 12。所述通用计算命令可包含例如核心执行命令、存储器传送命令等。在一些实例中,CPU 6可通过将命令和图形数据写入到可由GPU 12存取的存储器10而将命令和通用计算数据提供到GPU 12。
[0074] 在一些情况下,GPU 12可内置有高度并行的结构,其提供比CPU 6对向量操作的更有效的处理。举例来说,GPU 12可包含经配置而以并行方式对多个顶点、控制点、像素和/或其它数据操作的多个处理元件。在一些情况下,GPU 12的高度并行本质可允许GPU 12比使用CPU 6再现图像更快地将图形图像(例如,GUI和二维(2D)和/或三维(3D)图形场景)再现到显示器18上。另外,GPU 12的高度并行本质可允许GPU 12比CPU 6更快地处理某些类型的向量和矩阵运算以用于通用计算应用程序。
[0075] 在一些实例中,GPU 12可集成到计算装置2的母板中。在其它情况下,GPU 12可存在于安装在计算装置2的母板中的端口中的图形卡上或否则可并入在经配置以与计算装置2交互操作的外围装置内。在进一步例子中,GPU 12可与CPU 6位于同一微芯片上从而形成芯片上系统(SoC)。GPU 12可包含一或多个处理器,例如一或多个微处理器、专用集成电路(ASIC)、现场可编程阵列(FPGA)、数字信号处理器(DSP)或其它等效的集成或离散逻辑电路
[0076] 在一些实例中,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)、快闪存储器、磁性数据媒体或光学存储媒体。
[0077] CPU 6和/或GPU 12可将经再现图像数据存储在存储器10内分配的帧缓冲器中。经再现图像数据可包含用于待再现路径片段的经再现填充区域和来回划线区域。显示接口16可从帧缓冲器检索数据且配置显示器18以显示由经再现图像数据表示的图像。在一些实例中,显示接口16可包含数/模转换器(DAC),其经配置以将从帧缓冲器检索的数字值转换为可由显示器18消耗的模拟信号。在其它实例中,显示接口16可将数字值直接传递到显示器18以进行处理。
[0078] 显示器18可包含监视器、电视、投影装置、液晶显示器(LCD)、等离子显示器面板、发光二极管(LED)阵列、阴极射线管(CRT)显示器、电子纸、表面传导电子发射显示器(SED)、激光电视显示器、纳米晶体显示器或另一类型的显示单元。显示器18可集成在计算装置2内。举例来说,显示器18可为移动电话手持机或平板计算机的屏幕。或者,显示器18可为经由有线或无线通信链路而耦合到计算机装置2的独立装置。举例来说,显示器18可为经由电缆或无线链路而连接到个人计算机的计算机监视器或平板显示器。
[0079] 总线20可使用总线结构和总线协议的任何组合来实施,包含第一、第二和第三代总线结构和协议、共享总线结构和协议、点对点总线结构和协议、单向总线结构和协议以及双向总线结构和协议。可用以实施总线20的不同总线结构和协议的实例包含例如超传输总线、InfiniBand总线、高级图形端口总线、外围组件互连(PCI)总线、PCI高速总线、高级微控制器总线架构(AMBA)、高级高性能总线(AHB)、AMBA高级外围总线(APB),和AMBA高级eXentisible接口(AXI)总线。也可以使用其它类型的总线结构和协议。
[0080] 根据本发明,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可执行所述路径来回划动命令。
[0081] 在一些实例中,GPU 12可经配置以接收指示待再现的路径的路径片段的数据,将路径片段棋盘形布置为多个基元,且基于所述多个基元再现用于所述路径片段的填充区域和来回划线区域中的至少一者。GPU可当执行填充操作时再现用于路径片段的填充区域,且可当执行来回划线操作时再现用于路径片段的来回划线区域。在一些实例中,所述多个基元可为多个线段。
[0082] 在一些实例中,GPU 12可使用两遍次再现方法来执行路径填充操作。举例来说,作为第一再现遍次的一部分,GPU 12可接收指示待再现路径的路径片段的数据,将所述路径片段棋盘形布置为多个线段,且基于所述多个线段产生多个三角形基元。GPU 12可基于所述多个线段中的相应一者产生所述多个三角形基元中的每一者。GPU 12可将所述多个三角形基元中的每一者再现到单元缓冲器中以使得所述单元缓冲器存储指示哪些像素在用于路径片段的填充区域内部的数据。在将基元再现到共同单元缓冲器中之后,GPU 12可执行第二再现遍次。在第二再现遍次期间,GPU 12可基于存储于单元缓冲器中的数据和填充颜色而再现包含处于用于路径片段的填充区域内部的像素的一或多个基元以产生用于路径片段的填充区域的光栅化版本。以此方式,GPU 12可提供GPU硬件加速以用于路径填充操作的执行。
[0083] 为了产生所述多个三角形基元,在一些实例中,GPU 12可产生所述多个三角形基元以使得所述三角形基元中的每一者具有对用于路径片段的全部三角形基元为共同(即,相同)的共同顶点。在此等实例中,GPU 12可产生所述多个三角形基元以使得所述三角形基元中的每一者具有对应于所述多个线段中的相应一者的端点的两个额外顶点(即,除共同顶点之外的两个顶点)。每一额外顶点可对应于对应线段的端点中的相应一者。
[0084] 为了将所述多个三角形基元中的每一者再现到单元缓冲器中,GPU 12可使用以下技术中的一者。根据第一技术,GPU 12可针对所述多个三角形基元中的每一者反转模板缓冲器40中的对应于相应三角形基元的一或多个值。根据第二技术,GPU 12可针对所述多个三角形基元中的每一者在相应三角形基元的顶点次序是在顺时针方向中定向的情况下递增模板缓冲器40中的对应于相应三角形基元的一或多个值。
[0085] 在某些情况下,GPU 12可经配置以使用以下技术中的一者或两者来执行路径填充操作。根据第一技术,GPU 12可使用GPU 12的固定功能棋盘形布置引擎和在GPU 12的可编程着色器单元上执行的域着色器程序将路径片段棋盘形布置为多个线段。根据第二技术,GPU 12可使用在GPU 12的可编程着色器单元上执行的几何形状着色器程序产生多个三角形基元。使用GPU 12的棋盘形布置引擎、域着色器52和几何形状着色器中的一或多者执行路径填充操作可允许在一些实例中使用与芯片上具有棋盘形布置功能的3D图形API(例如,DX 11API)顺应的GPU执行路径填充操作,而无需API的修改或由API指定的图形架构的修改。
[0086] 在其它实例中,GPU 12可使用单个遍次再现方法执行路径来回划动操作。举例来说,GPU 12可接收指示待再现路径的路径片段的数据,将所述路径片段棋盘形布置为多个线段,且基于所述多个线段产生多个三角形基元。对于所述多个线段中的每一者,GPU 12可产生在空间上对应于用于相应线段的来回划线区域的一或多个基元(例如,三角形基元),且基于来回划线颜色再现用于相应线段的一或多个基元以产生用于路径片段的来回划线区域的光栅化版本。以此方式,GPU 12可提供GPU硬件加速以用于路径来回划动操作的执行。
[0087] 为了产生在空间上对应于用于相应线段的来回划线区域的一或多个基元(例如,三角形基元),在一些实例中,GPU 12可产生用于相应线段的多个法线顶点。法线顶点中的每一者可指示对应于沿着路径片段的多个点中的相应一者的法向量。沿着路径片段的所述多个点中的每一者可对应于相应线段的端点中的相应一者。GPU 12可基于所述多个法线顶点和来回划线宽度确定用于相应线段的来回划线区域的拐角点。GPU 12可基于来回划线区域的所述拐角点产生在空间上对应于用于相应线段的来回划线区域的一或多个基元。
[0088] 在某些情况下,GPU 12可使用以下技术中的一或多者来执行路径来回划动操作。根据第一技术,GPU 12可使用GPU 12的固定功能棋盘形布置引擎和在GPU 12的可编程着色器单元上执行的域着色器程序将路径片段棋盘形布置为多个线段。根据第二技术,GPU 12可使用在GPU 12的可编程着色器单元上执行的几何形状着色器程序产生所述一或多个基元。根据第三技术,GPU 12可使用在GPU 12的可编程着色器单元上执行的域着色器程序产生多个法线顶点。使用GPU 12的棋盘形布置引擎、域着色器52和几何形状着色器中的一或多者执行路径来回划动操作可允许在一些实例中使用与例如DX 11API等芯片上具有棋盘形布置功能的3D图形API顺应的GPU执行路径来回划动操作而无需API的修改或由API指定的图形架构的修改。
[0089] 本发明中描述的路径再现技术可在图1中图解说明的计算装置2中的组件中的任一者中实施,包含例如CPU 6、GPU 12和存储器10。在一些实例中,路径再现技术的全部或几乎全部可在GPU 12中(例如,GPU 12的图形管线中)实施。在额外实例中,CPU 6可实施用于配置图形管线的状态且将着色器程序绑定到图形管线以实施GPU 12中执行本发明的路径再现技术的路径再现管线的技术。在其它实例中,CPU 6可经配置以将指示待再现路径的数据放置到一或多个缓冲器(例如,一或多个顶点缓冲器)中,所述缓冲器可由GPU 12存取以再现一或多个路径。
[0090] 在一些实例中,GPU 12可经配置以用于(1)将路径棋盘形布置为线段,(2)使用单元缓冲器进行光栅化和扫描填充,以及(3)使用来自单元缓冲器的填充颜色和模板绘制所述路径的限界框;以及来回划动路径片段,包含(1)将路径棋盘形布置为线段,(2)根据虚线模式切割所述线段,以及(3)产生来回划线的三角测量且光栅化所述来回划线。
[0091] 在一些实例中,相对较大量的数据可需要传送到图形处理单元(GPU)以用所要细节水平再现路径片段。相对较大量的数据在存储数据时可消耗大量存储器存储空间,且在将数据传送到GPU时可消耗大量的存储器带宽。
[0092] 图2是进一步详细说明图1中的计算装置2的CPU 6、GPU 12和存储器10的框图。如图2中所示,CPU 6通信地耦合到GPU 12和存储器10,且GPU 12通信地耦合到CPU 6和存储器10。在一些实例中,GPU 12可与CPU 6集成到母板上。在额外实例中,GPU 12可实施在安装于包含CPU 6的母板的端口中的图形卡上。在其它实例中,GPU 12可并入在经配置以与CPU 6交互操作的外围装置内。在额外实例中,GPU 12可与CPU 6位于同一微芯片上从而形成芯片上系统(SoC)。
[0093] 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通信。
[0094] GPU 12包含命令引擎32和一或多个处理单元34。在一些实例中,所述一或多个处理单元34可形成和/或实施3D图形再现管线,例如DX 11图形再现管线(即,与DX 11图形API顺应的3D图形管线)。在根据本发明的一个实例中可包含GPU中支持的新基元类型(线、二次/三次贝塞尔曲线、椭圆形弧)。不同类型的基元应能够封装到同一顶点缓冲器中,因此在单个绘制调用中再现其全部。虚线模式可原样使用,新棋盘形布置器逻辑可用以处置预处理所述虚线模式。具有新基元类型且能够将不同类型的基元封装到单个绘制调用中将减少GPU输入大小,且由于顶点再使用而显著增加性能。在IA阶段产生接点/盖可需要一些硬件修改。所得接合点基元可由于潜在重复的结而使用许多索引。这还可需要作为不同着色器级中可用的系统产生值的基元类型。
[0095] 命令引擎32经配置以从CPU 6(例如,经由存储器10)接收命令且致使GPU 12执行命令。响应于接收到状态命令,命令引擎32可经配置以基于所述状态命令将GPU中的一或多个状态寄存器设定到特定值,和/或基于所述状态命令配置固定功能处理单元34中的一或多者。响应于接收到绘制调用命令,命令引擎32可经配置以致使处理单元34基于指示待再现路径的类型的数据而再现存储器10中由顶点表示的几何形状,所述数据可包含在待再现顶点缓冲器的顶点数据结构中。命令引擎32还可接收着色器程序绑定命令,且基于着色器程序绑定命令将特定着色器程序加载到可编程处理单元34中的一或多者中。
[0096] 处理单元34可包含一或多个处理单元,其中的每一者可为可编程处理单元或固定功能处理单元。可编程处理单元可包含(例如)可编程着色器单元,其经配置以执行从CPU 6下载到GPU 12上的一或多个着色器程序。在一些实例中,着色器程序可为以高级着色语言编写的程序的经编译版本,例如OpenGL着色语言(GLSL)、高级着色语言(HLSL)、用于图形的C(Cg)着色语言等。在一些实例中,可编程着色器单元可包含经配置以并行操作的多个处理单元,例如SIMD管线。可编程着色器单元可具有存储着色器程序指令的程序存储器和执行状态寄存器,例如指示程序存储器中正执行的当前指令或待提取的下一指令的程序计数器寄存器。处理单元34中的可编程着色器单元可包含(例如)顶点着色器单元、像素着色器单元、几何形状着色器单元、壳着色器单元、域着色器单元、计算着色器单元和/或统一着色器单元。
[0097] 固定功能处理单元可包含经硬连线以执行某些功能的硬件。虽然固定功能硬件可经由举例来说一或多个控制信号而配置以执行不同功能,但所述固定功能硬件通常并不包含能够接收用户编译程序的程序存储器。在一些实例中,处理单元34中的固定功能处理单元可包含(例如)执行光栅操作的处理单元,例如深度测试、剪刀测试、α掺合等。
[0098] 在一些实例中,模板缓冲器40可添加到(例如)实施DirectX11架构的GPU 12。在实例中,输出合并器级60可经配置以根据一或多个模板缓冲器填充技术填入模板缓冲器40以使得模板缓冲器40存储指示用于路径片段的填充区域的值。
[0099] 在其它实例中,可使用含有x*y单元的单元缓冲器。单元缓冲器可添加到(例如)实施DirectX11架构的GPU 12。单元缓冲器可为十六乘十六子像素栅格,例如x=y=16。一个单元可表示最终图像中的一个像素,但单元名称可用以区分单元和像素,因为它们存储不同信息。在实例中,单元缓冲器中的每一单元存储十六字节的卷绕计数器信息。单元缓冲器可为帧缓冲器的大小,但通常单元缓冲器的存储器要求将变为太大。因此帧缓冲器可分裂为x*y像素(和单元)的瓦片。此允许一次一个瓦片地绘制基元。
[0100] 存储器10可存储路径数据36和一或多个命令38。在一些实例中,路径数据36可作为多个顶点(或控制点)存储在存储器10中分配的一或多个顶点缓冲器中。在一些实例中,路径数据可存储于片列表数据结构(例如,四个控制点片列表)中。命令38可存储于一或多个命令缓冲器(例如,环缓冲器)中。CPU 6(例如,经由操作系统30的GPU驱动器28)可将路径数据36和命令38放置到存储器10中用于由GPU 12消耗。GPU 12(例如,命令引擎32)可检索且执行存储于存储器10中的命令38。
[0101] 在其中路径数据36存储为顶点的实例中,所述顶点可包含几何学上界定待再现的路径的一或多个属性。举例来说,对于线,片控制列表中的顶点可包含指示所述线的端点的坐标(例如,(x0,y0)和(x1,y1))的数据。对于三次贝塞尔曲线,片控制列表中的顶点可包含指示界定所述曲线的四个控制点的坐标(例如,(x0,y0)、(x1,y1)、(x2,y2)、(x3,y3))的数据。对于二次贝塞尔曲线,片控制列表中的顶点可包含指示三个控制点而非四个控制点的坐标的数据。对于椭圆形弧,片控制列表中的顶点可包含指示椭圆形弧的端点参数化的数据或指示椭圆形弧的中心参数化的数据。
[0102] CPU 6还可将指示待再现路径的类型的数据(即,“路径类型数据”)放置到顶点缓冲器中的一或多个原本未使用的顶点坐标中。在一些实例中,不同路径类型可对应于由向量图形API界定且可用于由软件应用程序24使用的一组路径类型。在一些实例中,不同路径类型可对应于由OpenVG API界定的一组路径类型。
[0103] 在某些情况下,几何学上界定待再现路径的一或多个属性可为分辨率独立的。换句话说,几何学上界定所述路径的属性可独立于将执行以再现路径片段的棋盘形布置的量和/或将产生以再现路径片段的顶点的量。
[0104] 命令38可包含一或多个状态命令和/或一或多个绘制调用命令。状态命令可指示GPU 12改变GPU 12中的状态变量中的一或多者,例如绘制颜色、填充颜色、来回划线颜色等。在一些实例中,状态命令可包含路径再现状态命令,其经配置以设定与再现路径相关联的一或多个状态变量。举例来说,状态命令可包含图画模式命令,其经配置以指示待再现路径是否将填充、来回划线或两者。作为另一实例,状态命令可包含指定将用于填充操作的颜色的填充颜色命令,和/或指定用于来回划动操作的颜色的来回划线颜色命令。作为另一实例,状态命令可指定用于来回划线操作的一或多个参数,例如来回划线宽度、末端盖样式(例如,对接、圆形、正方形)、线接合样式(例如,斜接、圆形、斜边)、斜接限制等。在一些实例中,除使用状态命令设定一或多个状态参数之外或代替于使用状态命令设定一或多个状态参数,所述状态参数中的一或多者可使用绘制调用命令中的一或多个参数值来设定。
[0105] 绘制调用命令可指示GPU 12再现由存储于存储器10中的一或多个顶点(例如,在顶点缓冲器中界定)的群组界定的几何形状。在一些实例中,绘制调用命令可调用GPU 12以再现存储于存储器10的经界定区段(例如,缓冲器)中的顶点的全部。换句话说,一旦GPU 12接收到绘制调用命令,便将控制传递到GPU 12以用于再现由存储器10的经界定区段(例如,缓冲器)中的顶点表示的几何形状和基元。
[0106] 绘制调用命令可包含3D绘制调用命令和路径再现绘制调用命令中的一者或两者。对于3D再现绘制调用命令,由顶点缓冲器中的一或多个顶点的群组界定的几何形状可对应于待再现的一或多个3D图形基元(例如,点、线、三角形、四边形、三角形条带、片等),且3D再现绘制调用命令可指示GPU 12再现所述一或多个3D图形基元。对于路径再现绘制调用命令,由顶点缓冲器中的一或多个顶点的群组界定的几何形状可对应于待再现的一或多个路径基元(例如,线段、椭圆形弧、二次贝塞尔曲线和三次贝塞尔曲线等),且路径再现绘制调用命令可指示GPU 12再现所述一或多个路径基元。
[0107] 在一些实例中,本发明中描述的路径再现技术可在图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存取以再现一或多个路径的一或多个缓冲器(例如,一或多个顶点缓冲器)中。在一些实例中,GPU 12可经配置以用于(1)将路径棋盘形布置为线段,(2)使用单元缓冲器进行光栅化和扫描填充,以及(3)使用来自单元缓冲器的填充颜色和模板绘制路径的限界框。
[0108] 图3是说明可执行本发明的路径再现技术的实例图形管线的概念图。在一些实例中,所述图形管线可对应于 DirectX(DX)11图形管线。如图3中所示,所述实例图形管线包含资源块42和多个处理级。所述多个处理级包含输入组装器(IA)级44、顶点着色器(VS)级46、壳着色器(HS)级48、棋盘形布置器级50、域着色器(DS)级52、几何形状着色器(GS)级54、光栅化器级56、像素着色器(PS)级58和输出合并器级60。HS级48、棋盘形布置器级50和域着色器级52可形成图形管线的棋盘形布置级62。
[0109] 如图3中所示,所述管线级中的许多也可以通信地耦合到资源块。资源块可包含例如缓冲器和纹理等存储器资源。剩余块指示管线级。具有笔直拐角的块表示固定功能管线级,且具有圆形拐角的块表示可编程级。可编程级中的每一者可经配置以执行特定类型的着色器程序。举例来说,顶点着色器46可经配置以执行顶点着色器程序,壳着色器48可经配置以执行壳着色器程序等。不同类型的着色器程序中的每一者可在GPU的共同着色器单元上或在专用于执行一或多个特定类型的着色器程序的一或多个专用着色器单元上执行。壳着色器级48、棋盘形布置器级50和域着色器级52可统称为棋盘形布置级62。
[0110] 关于DirectX  11图形管线的大体操作的额外背景信息可参见http://msdn.microsoft.com/en-us/library/windows/desktop/ff476882%28v=vs.85%
29.aspx,其从2012年11月26日起可用且以引用方式并入本文。关于DirectX 11图形管线的大体操作的进一步信息可参见辛克(Zink)等人的“以Direct3D 11进行的实际再现和计算”CRC出版社(2011年),其整个内容以引用的方式并入本文中。
[0111] 如图3中所示,在一些实例中,壳着色器48将椭圆形弧从端点表示转换到参数表示。输入组装(IA)级产生末端盖和接合点。IA可产生两个路径片段会合的接合基元。IA还可产生用于开放路径的起始和末端盖。开放路径是并不封闭区的路径。为了成功地产生接合点,可使用接合位置和两个路径片段在接合位置的切线。对于盖,可使用路径的第一和最后点处的位置和切线。可通过简单地减去控制点而发现路径片段的切线,然而,在重复的控制点的情况下,可处理全部控制点以确定端点切线。在实例中,IA可必须将两个路径片段的顶点放入接合点基元中。最差情况情境可为两个三次曲线会合,每一者具有4个顶点(控制点)(1个共享),因此从IA需要总共7个顶点用于接合点基元。
[0112] 如上文所论述,所述两个主路径再现操作是:(1)填充路径片段;以及(2)来回划动路径片段。现将描述用于以图形再现管线(例如,DirectX 11图形管线)执行这些操作中的每一者的解决方案。
[0113] 在实例中,路径片段包括线且来回划动包括通过在垂直于所述线的两个方向中加粗所述线而加宽所述线。或者,路径片段包括曲线且来回划动进一步可包含将所述曲线分裂为线段,确定来回划线宽度,且产生经定位以加宽所述线段中的至少一者的一对三角形条带。
[0114] 本发明的实例系统提供用于路径再现的近似100%GPU解决方案。使用当前GPU架构(例如,根据DirectX11操作的架构),这可为低效的。使用经修改GPU架构可提供用于路径再现的高效GPU解决方案。
[0115] 如本文所用,“路径”包括许多路径片段,其可(例如)为线、椭圆形弧、二次贝塞尔曲线或三次贝塞尔曲线。贝塞尔曲线是可无限地按比例缩放的一类参数曲线。另外,路径可或可不为“闭合的”。闭合路径是其中路径的最后顶点经由线连接到所述路径的第一顶点且形式闭合形状的路径。路径可自身重叠多次。
[0116] 路径再现可划分成两个主任务,(1)填充和(2)来回划动。在一些实例中,这些任务可单独地处置。填充路径经界定为通过填充颜色填充给定路径的内部区。来回划动路径包括使用保持垂直于路径的直线笔“加宽”所述路径的边缘。
[0117] 当填充路径时,给定路径的内部区可由颜色填充。路径的内部区可使用奇偶或非零填充规则中的任一者来界定。奇偶规则是在基于向量的图形软件中实施的算法,其确定将如何填充具有一个以上闭合轮廓的图形形状。奇偶规则通过绘制在任一方向中从点到无限远处的射线且对所述射线穿过的来自给定形状的路径片段的数目进行计数来确定所述点的“内部性(insideness)”。如果此数目是奇数,那么所述点视为在曲线内部且将被填充;如果为偶数,那么所述点视为在曲线外部且将不被填充。因此,曲线内部的区域是将经填充以形成形状的区域,且曲线外部的区域是将不经填充以形成形状(至少针对所述特定形状不填充)的区域。在二维计算机图形中,非零卷绕规则是确定给定点是否落在封闭曲线内的手段。
[0118] 一些实例可使用预处理,而其它实例可不包含预处理。预处理中的质心枢轴点可给出超过第一顶点枢轴点的填充性能的稍微增加。在GPU中确定限界框可需要一些硬件修改。这壳着色器48中将椭圆形弧转换到参数形式将导致所述转换在每一帧处完成。在一帧中椭圆形弧将需要通过壳着色器转换多达三次(弧自身和在弧端点处的两个接合点/盖)。
[0119] 顶点可界定由线段、三次片段、另一线段和二次片段组成的路径。其可为闭合路径(即封闭区)。一些实例可进行以下API绘制调用:(1)drawNonIndexedPrimType(numIndices=7,闭合=真),(2)基元类型将为以下列表:[线、三次、线、二次],(3)IA将开始基于基元类型产生基元。因为这是闭合路径,所以不存在盖。
[0120] 在实例中,输出可如下:(1)PrimType,索引;(2)线0、1;(3)Join_Line_Cubic 0、1、2、3、4;(4)三次1、2、3、4;(5)Join_Cubic_Line 1、2、3、4、5;(6)线4、5;(7)Join_Line_Quadratic4、5、6、0;(8)二次5、6、0;(9)Join_Quadratic_Line 5、6、0、1。因为我们具有4个不同类型的路径片段(线、二次、三次、椭圆形),所以我们具有4和不同盖类型和4x4=16个不同接合点基元类型。
[0121] 在实例中,填充路径意味着通过给定填充颜色填充给定路径的内部区。内部区可使用奇/偶或非零填充规则中的任一者来界定。处置填充路径的一个实例算法如下:(1)将给定路径棋盘形布置为线段,(2)使用几何形状着色器54通过将枢轴点连接到线段同时遵照卷绕次序而每线段产生三角形。随后将顺时针或逆时针三角形再现到模板缓冲器40。对于奇/偶填充,不管卷绕次序如何,每个三角形将翻转内部区的模板值。对于非零填充,顺时针三角形将增加内部区的模板值且逆时针三角形将减小内部区的模板值。对于两个规则,外部区保持不受影响。(3)遍次2:在模板测试启用的情况下再现限界框区域。模板传递条件是模板值>0,不管填充规则如何。随后将传递模板值复位到零(传递操作),因此留下全部零的新鲜模板缓冲器40。
[0122] 填充的一个实例可包含以下流程:(1)以每路径的填充颜色和枢轴点加载恒定缓冲器,(2)设定适当模板状态(奇偶或非零),以及(3)传递一个绘制调用[4控制点片]。传递一个绘制调用可包含使用顶点着色器46来变换顶点,使用壳着色器48[域:等值线,输出类型:线]来确定最优棋盘形布置水平,或使用固定水平棋盘形布置,使用域着色器52来计算经棋盘形布置顶点(仅位置),且使用几何形状着色器54来将输入线连接到来自恒定缓冲器的枢轴点坐标以产生顺时针和逆时针三角形。在一些实例中,像素着色器可为空。
[0123] 实例可包含覆盖模板状态的设定。第二遍次绘制调用可使用顶点着色器46绕过来自顶点着色器(VS)46的输出。在此实例中,来自VS 46的输出与输入相同,VS 46中没有操作正在进行。像素着色器可返回来自恒定缓冲器的填充颜色。另外,顶点着色器(VS)46可使用世界、视图和投影矩阵变换顶点。壳着色器(HS)48可通过使用接合点和盖、具有0.0f(丢失)的塌陷的三次曲线和退化的椭圆形以及线:1.0f来确定棋盘形布置水平。应注意棋盘形布置水平0指示基元丢失。举例来说,在某些情况下一些盖/接合点可丢失。对于线基元,可使用棋盘形布置水平=1。线并不需要经棋盘形布置为多个新线。
[0124] 在实例中,HS 48执行变换。对于弧,顶点信息的一部分是避免对其应用变换矩阵可为有利的椭圆参数。一些实例可计算用于三次曲线和椭圆形弧的最优棋盘形布置水平,或使用固定棋盘形布置。
[0125] 在一些实例中,棋盘形布置引擎可为Dx11棋盘形布置器单元,具有等值线域、整数分割、线输出。在实例中,域着色器52[v可忽略]。域着色器52可针对线、三次曲线和椭圆形弧评估经棋盘形布置顶点的位置。对于线,u为0.0f或1.0f。在实例中,棋盘形布置器可输出两个域坐标u和v。在一些实例中,坐标v可忽略且坐标u可用以棋盘形布置我们的基元。坐标u是从0.0到1.0的参数化。如果棋盘形布置因数是n,那么u将为0/n、1/n、2/n....n/n。
[0126] 端点可直接输出。对于曲线,u将以取决于棋盘形布置水平的相等增量从0.0f到1.0f变动。对于全部u,将使用曲线表示方程式发现位置。对于椭圆形弧,u将以取决于棋盘形布置水平的相等增量从0.0f到1.0f变动。对于全部u,将使用弧参数表示发现位置。在实例中,几何形状着色器54将输入线连接到来自恒定缓冲器的枢轴点坐标以产生三角形。卷绕次序将决定在非零填充模式是否增加或减小用于三角形覆盖范围的模板值。在奇偶填充模式中,三角形覆盖范围将翻转模板值,不管三角形卷绕如何。在实例中,顶点着色器46可被绕过且像素着色器可返回填充颜色。用于填充的一个实例2遍次流程是:
[0127] VS→HS→Tess→DS→GS
[0128] VS'→PS
[0129] 如果目标独立再现(TIR)可用以将模板缓冲器40直接解析到帧缓冲器,那么可消除对额外绕过顶点着色器46的需要。在预处理阶段可不再需要限界框计算。另外,可不需要用于“覆盖”遍次的额外模板状态,因为将不存在“覆盖”遍次。在一些实例中这可增加填充性能。实例流程如下:
[0130] VS→HS→Tess→DS→GS→PS
[0131] 路径的来回划动可包含沿着垂直于路径的直线“加宽”所述路径的边缘。一些实例棋盘形布置且评估路径,在每一评估点我们根据在所述点处的法线加宽所述点且产生三角测量以形成片段。全部片段的联合是来回划线。
[0132] 用于来回划动路径的实例算法如下,(1)以端点处的法线将路径棋盘形布置为线段,(2)如果启用再棋盘形布置,那么再棋盘形布置端点法线在方向上偏离太多的线段以产生新线段,(3)如果启用划虚线,那么根据虚线模式切断线段,(4)在切断位置处产生盖,棋盘形布置圆形接合点和盖,(5)产生三角测量以表示来回划线的线、盖和接合点,(5)在启用深度测试的情况下再现三角形。
[0133] 实例流程如下:(1)以来回划线颜色、来回划线宽度、斜接限制、接合点规则、盖规则虚线模式、圆形棋盘形布置因数的倒数(可恒定)更新恒定缓冲器,(2)启用深度测试,(3)第一遍次,(4)第二遍次。第一遍次可为对顶点着色器46的绘制调用以变换顶点,对壳着色器48的绘制调用以将塌陷的三次曲线和退化的椭圆转换为线(无预处理)且确定最优棋盘形布置水平,或使用固定水平棋盘形布置。在第一遍次中,域着色器52可确定经棋盘形布置顶点的位置且确定经棋盘形布置顶点的法线(转换到角度表示)。几何形状着色器54可流式产生用于第二再现遍次的线。在一些实例中可不使用像素着色器。
[0134] 第二遍次可为绕过使用顶点着色器46和使用壳着色器48来计算用于棋盘形布置差量、片段长度、长度的倒数和SV_PrimType的棋盘形布置器输入的绘制调用。实例可使用经修改棋盘形布置器来棋盘形布置接合点,切割/再棋盘形布置线段,以及在切割位置处产生盖棋盘形布置。域着色器52(SV_PrimType)可从原始线段/接合点线性内插位置和法线且将法线从角度形式转换到坐标。几何形状着色器54可增加线段的宽度,产生用于接合点/盖的三角形。像素着色器可返回来回划线颜色。
[0135] 在实例中,在确定单元缓冲器内容之后,如果填充规则是非零,那么采取所述内容的绝对值且将每个值固定到样本计数。对于奇偶填充,采取每个值的(2*样本计数)模数,且如果值大于样本计数,那么将其设定为距2*样本计数的距离。这在以下的代码摘录中说明:
[0136]
[0137] 不同于相似的奇偶规则,非零卷绕规则依赖于确定曲线的每一部分的来回划线的方向。对于给定曲线C和给定点P,非零卷绕规则如下确定:(1)构造在朝向无限远处的任何方向中从P出来的直线,(2)寻找具有此射线的C的全部交叉点,以及(3)将卷绕数目记分。对卷绕数目记分包含:(1)对于每个顺时针交叉点(从左到右穿过射线的曲线,如从P观看),减去1;(2)对于每个逆时针交叉点(从右到左穿过的曲线,如从P观看),增加1。如果总卷绕数目是零,那么P在C外部;否则,P在C内部。
[0138] 简单的非自交叉闭合路径将平面划分为两个区:有界的内部区和无界的外部区。应注意,知晓最外路径的定向(即,顺时针或逆时针)对于这内部与外部区之间进行区分是不必要的。
[0139] 自交叉或具有多个重叠子路径的路径需要额外信息以便界定内部区。OpenVG支持为由此类路径封闭的区域提供不同定义的两个规则,称为非零和偶/奇填充规则。为了确定平面中的任何点是否包含在内部区内,想象一下绘制在任一方向上从所述点向外指向到无线处的线,以使得所述线并不穿过所述路径的任何顶点。对于所述线穿过的每一边缘,如果所述边缘从左到右穿过(如沿着所述线朝向无限远处行进的观测器所见),那么对计数器增加1,且如果所述边缘从右到左穿过,那么减去1。以此方式,所述平面的每一区将接收整数值。
[0140] 非零填充规则表明如果所得总和不等于0那么点在形状的内部。偶/奇规则表明如果所得总和是奇的,那么点在形状的内部,不管正负号如何(例如,-7是奇的,0是偶的)。考虑下方图8中所示的以实线指示的星形路径。构成路径的线的定向以箭头指示。在所述星的中心区中起始的到无限远处的假想线展示为指向右的虚线。所述星的两个边缘穿过从左到右到无限远处的线,由向下指向的箭头指示。因此所述中心区具有计数+2。根据偶/奇规则,其在路径的外部,而根据非零规则其在路径的内部。实施方案必须能够处理沿着任何任何具有多达255个交叉点的路径。较复杂路径的行为是未界定的。
[0141] 在一个实例中,用于填充路径的算法如下:
[0142] 1.将所述路径棋盘形布置为线段
[0143] 2.使用单元缓冲器光栅化且扫描填充
[0144] 3.使用来自单元缓冲器的填充颜色和模板绘制所述路径的限界框
[0145] 在单元缓冲器光栅化的一实例中,在域着色器52中产生线段之后,将它们发送到单元缓冲器。来回划动路径包括使用保持垂直于路径的直线“笔”“加宽”所述路径的边缘。可随后棋盘形布置且评估所述路径。在每一评估点,可根据在所述点处的法线加宽所述点。
三角测量可用以形成如下文相对于图12所论述的片段。全部片段的联合是来回划线。
[0146] 在一个实例中,用于来回划动路径的算法如下:
[0147] 1.将所述路径棋盘形布置为线段
[0148] 2.根据虚线模式切割所述线段
[0149] 3.产生所述来回划线的三角测量且将其光栅化
[0150] (例如)在DirectX11管线架构或其它相似3D图形管线中实施这些方法可根据本发明的技术而修改以包含许多扩展。举例来说,可修改DirectX11管线以包含路径基元。路径基元可通过允许直接在实施DirectX11的GPU中的路径再现而无需使用单独的CPU,来允许DirectX11管线处理向量图形。举例来说,路径基元可允许使用在此所描述的方法的填充、来回划动或两者。
[0151] 在一些实例中,GPU实施用于处置图形任务的DirectX11应用程序编程接口。GPU进一步实施经配置以处理许多索引和路径片段类型的绘制调用功能。GPU还可进一步实施信息基元类型。
[0152] 对于第一遍次,CPU可将指示待再现路径片段的数据放置到顶点缓冲器的一或多个顶点中。用于顶点缓冲器中的顶点的基元拓扑可(例如)为片控制列表。对于线,片控制列表中的顶点可包含指示所述线的端点的坐标(例如,(x0,y0)和(x1,y1))的数据。对于三次贝塞尔曲线,片控制列表中的顶点可包含指示界定所述曲线的四个控制点的坐标(例如,(x0,y0)、(x1,y1)、(x2,y2)、(x3,y3))的数据。对于二次贝塞尔曲线,片控制列表中的顶点可包含指示三个控制点而非四个控制点的坐标的数据。对于椭圆形弧,片控制列表中的顶点可包含指示椭圆形弧的端点参数化的数据或指示椭圆形弧的中心参数化的数据。CPU还可将指示待再现路径的类型数据放置到原本未使用的顶点坐标中。
[0153] 现将描述用于再现路径基元的输入格式的一个实例。应理解,这仅是可如何将指示待再现路径的数据提供到GPU的一个实例且其它实例是可能的且在本发明的范围内。在此实例中,GPU接收每一路径片段作为四个(4)控制点片列表基元。在此实例中,路径列表中的顶点(例如,控制点)中的每一者包含三个(3)浮动向量,其界定相应顶点(例如,控制点)的属性。
[0154] 对于线路径片段,输入可采取以下形式或相似形式:
[0155] {XMFLOAT3(X0,Y0,2.0f)},
[0156] {XMFLOAT3(X1,Y1,1.0f)},
[0157] {XMFLOAT3(0.0f,0.0f,1.0f)},
[0158] {XMFLOAT3(0.0f,0.0f,1.0f)},
[0159] 在此实例中,每一线表示四个控制点片的顶点或控制点,且圆括号中的每一参数表示相应顶点或控制点的属性。在此实例中,第一控制点的最后属性存储指示待再现路径的类型的数据(即,“路径类型”或“基元类型修改符”)。具体来说,在此实例中所述基元类型修改符是2.0f,其意味着所述基元是线基元(即,线路径片段)。X0、Y0、X1、Y1是线的端点的坐标,其中(X0,Y0)表示第一端点且(X1,Y1)表示第二端点。在此实例中剩余顶点信息不用以表示实际数据。
[0160] 用于三次贝塞尔路径片段的输入可采取以下形式或相似形式:
[0161] {XMFLOAT3(X0,Y0,3.0f)},
[0162] {XMFLOAT3(X1,Y1,1.0f)},
[0163] {XMFLOAT3(X2,Y2,1.0f)},
[0164] {XMFLOAT3(X3,Y3,1.0f)},
[0165] 在此实例中,每一线表示四个控制点片的顶点或控制点,且圆括号中的每一参数表示相应顶点或控制点的属性。在此实例中,第一控制点的最后属性存储指示待再现路径的类型的数据(即,“路径类型”或“基元类型修改符”)。具体来说,在此实例中所述基元类型修改符是3.0f,其意味着所述基元是三次贝塞尔路径片段。X0-X3和Y0-Y3是用于三次贝塞尔路径片段的控制点的坐标,其中(X0,Y0)表示第一控制点,(X1,Y1)表示第二控制点等。在此实例中剩余顶点信息不用以表示实际数据。相似输入可用于二次贝塞尔路径片段,不同之处在于可提供三个控制点而非四个控制点,且基元类型修改符可为不同的以区分所述基元与三次贝塞尔路径片段。
[0166] 用于椭圆形弧路径片段的输入可采取以下形式或相似形式:
[0167] {XMFLOAT3(X0,Y0,4.0f)},
[0168] {XMFLOAT3(X1,Y1,1.0f)},
[0169] {XMFLOAT3(rH,rV,1.0f)},
[0170] {XMFLOAT3(angle,0.0f,1.0f)},
[0171] 在此实例中,每一线表示四个控制点片的顶点或控制点,且圆括号中的每一参数表示相应顶点或控制点的属性。在此实例中,第一控制点的最后属性存储指示待再现路径的类型的数据(即,“路径类型”或“基元类型修改符”)。在此实例中,基元类型修改符可为4.0、4.1、4.2或4.3中的任一者,其分别对应于大顺时针(LCW)椭圆形弧、大逆时针(LCCW)弧、小顺时针(SCW)椭圆形弧以及小逆时针(SCCW)椭圆形弧。X0、X1和Y0、Y1是端点坐标,其中(X0,Y0)表示第一端点且(X1,Y1)表示第二端点,rH和rV分别表示水平和垂直半径,且角度表示椭圆形弧的旋转角度。
[0172] 在一些实例中,来回划动操作可在顶点输入上使用3个额外字段来处置末端盖、接合点和开放路径。举例来说,某些顶点坐标可存储指示路径片段是否为新开放路径的开始、开放路径的末端以及基元是否可丢失的数据。以下是包含上述顶点坐标的实例模板:
[0173] {XMFLOAT3(X0,Y0,2.0f)},
[0174] {XMFLOAT3(X1,Y1,2.0f)},
[0175] {XMFLOAT3(0.0f,0.0f,2.0f)},
[0176] {XMFLOAT3(0.0f,0.0f,2.0f)},
[0177] 在此模板中,第二顶点的z坐标(即第三坐标或属性)上的2.0f指示所述路径片段是新开放路径的开始且可发信号到GPU以在所述路径片段的开始处放置起始盖。第三顶点的z坐标上的2.0f指示所述路径片段是开放路径的终止且可发信号到GPU以在所述路径片段的末端处放置末端盖。最后顶点的z坐标上的2.0f指示当前基元将丢失(例如,其是开放路径的闭合线)。
[0178] 输入组装器44从顶点缓冲器获得顶点且将顶点传递到顶点着色器级46用于处理。在一些实例中,顶点着色器级46可执行“穿通”着色器程序,其针对着色器程序的每一实例简单地输出输入顶点。在实例中,顶点着色器级46可使用世界、视图和投影矩阵来变换顶点。
[0179] 棋盘形布置器级62(即,壳着色器级48、棋盘形布置器级50和域着色器级52)可将由输入数据界定的路径片段棋盘形布置为多个线段。所述多个线段可近似待再现路径的曲率。一般来说,棋盘形布置器50可确定表示特定类型的路径片段的一或多个参数方程式应评估的值。域着色器52可在由棋盘形布置器50确定的值处评估参数方程式,且针对每一评估输出顶点。一些实例可使用Dx11棋盘形布置器单元,具有等值线域、整数分割、线输出。棋盘形布置器50可使用u坐标根据虚线模式和再棋盘形布置差量来切割线段。其可随后使用v坐标在每个切割位置处产生盖且将类型设定为盖或线段。
[0180] 域着色器52可以经排序序列输出顶点,其中邻近顶点的每一集合表示经棋盘形布置线段。线段可共同地近似在顶点缓冲器中界定的路径片段。举例来说,域着色器52可输出以下顶点集合{0,1,2,3,4,5},其界定以下线段:{0,1}、{1,2}、{2,3}、{3,4}、{4,5}。
[0181] 在一些实例中,棋盘形布置器级50和域着色器级52可经配置以根据以下技术均匀地将路径片段棋盘形布置为多个线段。具体来说,棋盘形布置器单元50可输出用于参数评估的坐标(例如,t=0/T、1/T、2/T...T/T,其中T是棋盘形布置因数)。取决于基元的类型,域着色器52可在由棋盘形布置器50输出的值处评估一或多个参数方程式。
[0182] 在另一实例中,域着色器52可评估用于线、三次曲线和椭圆形弧的经棋盘形布置顶点的位置和法线。域着色器52还可将法线转换到角度形式且将输出标记为线段。对于线,u为0.0f或1.0f。端点可直接输出。对于法线,即垂直会合的线,两者将从端点差异发现且将为相同的。对于曲线,u将以取决于棋盘形布置水平的相等增量从0.0f到1.0f变动。对于全部u,将使用曲线表示方程式发现位置。对于u=0.0f或1.0f,将通过控制点差发现法线(将检查重复的控制点);对于其它u值,将通过曲线方程式的导数发现法线。
[0183] 对于椭圆形弧,u将以取决于棋盘形布置水平的相等增量从0.0f到1.0f变动。对于全部的u,将分别使用弧参数表示及其导数来发现位置和法线。对于线性内插,用于盖和接合点的法线角度转换回到笛卡表示。适当地将输出标记为盖或接合点。圆形盖/接合点:u将以取决于圆形棋盘形布置水平的相等增量从0.0f到1.0f变动。位置将针对全部u值为相同的。当u=0.0f或1.0f时,我们采取端点切线的笛卡耳表示来计算法线。对于其它u值,角度切线将经线性插值以寻找新切线,且随后转换到法线。对于其它盖接合点,u将为0.0f或1.0f。两个情况下位置将为相同的。我们采取端点切线的笛卡耳表示来计算法线。
[0184] 未图示的另一域着色器(DS)可提供线段中的虚线和尖点。在棋盘形布置位置处的法线和位置的线性解译。域着色器58可将法线从角度形式转换回到笛卡耳形式。在一实例中,从点u到点v的线的u可用以线性内插位置和法线角度。点v可用以旋转法线角度(用以产生圆形盖)。如果不需要划虚线和再棋盘形布置,那么可使用以下一个再现遍次流程:VS→HS→Tess→DS→GS→PS
[0185] 如果需要划虚线或再棋盘形布置,那么将需要使用以下2遍次流程:VS→HS→MTess→DS→流式输出(现有棋盘布置器在此是足够的)。
[0186] 自动绘制→HS'→MTess→DS'→GS→PS
[0187] 在此实例中,在微小的棋盘形布置器硬件添加之上,仅需要两个额外着色器(标记有省略号)。
[0188] 对于线,在一些实例中,T可始终等于1。在此等实例中,域着色器52可不必需要执行任何评估来产生对应于线路径片段的顶点。
[0189] 对于三次贝塞尔曲线,域着色器级可根据以下参数方程式评估曲线且产生输出顶点:
[0190] C0*(1-t)3+C1*3*(1-t)2*t+C2*3*(1-t)*t2+C3*t3
[0191] 其中C0、C1、C2、C3对应于三次贝塞尔曲线的控制点,且t对应于由域着色器52提供以用于执行参数评估的坐标。
[0192] 或者,对于三次贝塞尔曲线,域着色器级52可根据以下参数方程式评估曲线且产生输出顶点:
[0193] X0*(1-t)3+X1*3*(1-t)2*t+X2*3*(1-t)*t2+X3*t3
[0194] Y0*(1-t)3+Y1*3*(1-t)2*t+Y2*3*(1-t)*t2+Y3*t3
[0195] 其中(X0,Y0)、(X1,Y1)、(X2,Y2)、(X3,Y3)对应于三次贝塞尔曲线的控制点,且t对应于由域着色器52提供以用于执行参数评估的坐标。
[0196] 对于二次贝塞尔曲线,域着色器级52可根据以下参数方程式评估曲线且产生输出顶点:
[0197] C0*(1-t)2+C1*2*(1-t)*t+C2*t2
[0198] 其中C0、C1、C2对应于二次贝塞尔曲线的控制点,且t对应于由域着色器52提供以用于执行参数评估的坐标。
[0199] 或者,对于二次贝塞尔曲线,域着色器级52可根据以下参数方程式评估曲线且产生输出顶点:
[0200] X0*(1-t)2+X1*(1-t)*t+X2*t2
[0201] Y0*(1-t)2+Y1*(1-t)*t+Y2*t2
[0202] 其中(X0,Y0)、(X1,Y1)、(X2,Y2)对应于二次贝塞尔曲线的控制点,且t对应于由域着色器52提供以用于执行参数评估的坐标。
[0203] 对于椭圆形弧路径片段,域着色器52级可根据以下参数方程式评估曲线且产生输出顶点:
[0204] x=Centerx+rhCos*cos(anglet)-rvSin*sin(anglet)
[0205] y=Centery+rhSin*cos(anglet)+rvCos*sin(anglet)
[0206] 其中参数化角度anglet是从棋盘形布置器输出t确定,其中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供用于针对椭圆形评估上文所述的参数方程式。
[0207] 如上文相对于椭圆形弧所论述,在一些实例中,片控制列表中的顶点可包含指示端点参数化的数据。在此等实例中,在GPU 12的着色器单元上执行的壳着色器程序48可用以将指示椭圆形弧的端点参数化的数据转换到指示椭圆形弧的中心参数化的数据。
[0208] 在一实例中,未图示的另一壳着色器程序(HS)可添加且可将圆形接合点和盖切线的角度表示保存到基元数据中且确定棋盘形布置水平。对于线、非圆形接合点和盖、塌陷的三次曲线和退化的椭圆:1.0f,计算用于三次曲线和椭圆形弧的最优棋盘形布置水平,或使用固定棋盘形布置,且计算用于圆形接合点和盖的最优棋盘形布置水平,或使用固定棋盘形布置。壳着色器程序48可计算棋盘形布置器输入,例如片段长度、再棋盘形布置差量、长度的倒数。在一实例中,片段长度是线段的长度。再棋盘形布置差量是线段的长度除以再棋盘形布置量。线段的最大长度由棋盘形布置器产生。长度的倒数是1.0f/片段长度。
[0209] 现在描述用于当将椭圆形弧的端点参数化转换到椭圆形弧的中心参数化时寻找椭圆的正确中心的实例技术。所述实例技术可基于由参数集合(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')的变换将所要椭圆映射到以原点为中心的单位圆中。
[0210] 为了确定穿过两个给定点(x0,y0)和(x1,y1)的具有共同半径和旋转角度的一对椭圆形的中心点,首先将平面变换到合适按比例缩放且旋转的坐标系中以使得每一椭圆的方程式变成(x'-cx')2+(y'-cy')2=1。随后可发现圆周穿过两个给定点的两个单位圆的中心(即,(cx0',cy0')和(cx1',cy1'))。最后,通过逆变换放置中心点以获得原始坐标系中的解。
[0211] 穿过点(x0,y0)和(x1,y1)的两个单位圆的中心点由(xm±Δy*d,ym Δx*d)给定,其中xm=(x0+x1)/2、ym=(y0+y1)/2、Δx=(x0-x1)、Δy=(y0-y1)且d=√(1/(Δx2+Δy2)-1/4.)。如果d是无限的或虚数,那么分别由于输入点一致或相隔太远而不存在解。通过寻找圆上的端点的斜率且计算反正切可发现角度θ1和θ2。
[0212] 以下伪码说明根据上述技术计算椭圆中心的过程。在原始椭圆参数的逆变换后findUnitCircles函数由findEllipses调用。
[0213]
[0214]
[0215]
[0216] 关于将椭圆形弧的端点参数化转换到椭圆形弧的中心参数化的进一步细节可参见2008年12月3日的“OpenVG规范,版本1.1”,其在http://www.khronos.org/registry/vg/specs/openvg-1.1.pdf可用且整个内容以引用的方式并入本文中。具体而言,OpenVG规范的章节18.4描述用于将椭圆形弧的端点参数化转换到椭圆形弧的中心参数化的技术,其通过引用结合在此。
[0217] 几何形状着色器54可针对由域着色器52产生的线段中的每一者调用一次。对于每一线段,几何形状着色器54可使用共同控制点作为三角形的第一顶点且使用相应线段的两个端点作为三角形的第二和第三顶点来产生三角形基元。举例来说,以上提供实例,其中域着色器52产生以下顶点集合{0,1,2,3,4,5},其界定以下线段:{0,1}、{1,2}、{2,3}、{3,4}、{4,5}。对于以上所列线段序列,几何形状着色器可产生以下三角形:{C,0,1}、{C,1,2}、{C,2,3}、{C,3,4}、{C,4,5}、{C,4,5},其中C为任一单个顶点。
[0218] 在一实例中,几何形状着色器54可在端点处在两个法线方向中增加线型片段的宽度以产生来回划线区域。在某些情况下这可导致方形,针对其我们输出两个三角形。在其中曲率与线长度相比较高和/或来回划线宽度较粗的一些其它情况中,可产生“蝶形”。蝶形需要两个三角形,但由于t接点而可能存在极少的渗出问题。为了消除t接点,可输出额外的三角形,其可使用三角形条带基元类型封装到8个顶点中。这是极少见的现象,因此是由编程者来决定使用两个三角形(maxvertices:6)还是4-三角形(maxvertices:8)方法。实例可(1)针对圆形盖/接合点(经棋盘形布置)和斜边接合点产生一个三角形,(2)针对正方形盖和斜接接合点产生两个三角形,以及(3)增加从恒定缓冲器到每个输出顶点的z坐标。
[0219] 在预处理路径且封装顶点数据的一实例中可在再现之前执行路径数据的最小预处理。在一些实例中,预处理每路径仅发生一次,且结果不受世界/用户/视角变换影响。可避免预处理,且在下一章节中阐释无预处理的替代的解决方案。
[0220] 实例可迭代通过路径的全部顶点,跟踪顶点的x和y坐标的总体、最大和最小值。当执行填充时全部顶点(质心)的平均值将用作枢轴点。在一些实例中,路径的全部顶点的质心是良好枢轴点。最大和最小坐标界定我们的路径的限界框。此限界框显著地加速填充过程。虽然不是极严格的一者,但这是找到路径的限界框的最快方式。取决于特定系统的需要,一些实例可实施不同的限界框(或任何其它形状)算法。
[0221] 实例可将椭圆形弧从端点表示转换到参数表示。表示弧的一种方法是端点表示:界定椭圆的端点、半径和旋转角度。此表示可需要在将路径数据发送到GPU之前转换到参数表示。实例还可需要在端点处寻找切线以找到对应于这些位置的接合点和盖。因此,为了能够预处理接合点和盖,同样需要预处理椭圆形弧。一些实例可产生用于开放路径的起始和末端盖以及路径片段会合的接合点。需要计算端点切线以产生盖和接合点基元。实例系统可避免寻找起始和末端盖,且当我们处置划虚线时可处置它们。这可以可忽略地增加经修改棋盘形布置器单元大小。
[0222] 实例可将数据封装为将由我们的DX11程序理解的格式,且按路径产生顶点缓冲器。这意味着将基元类型(线、二次曲线、三次曲线、椭圆形弧、盖/接合点)嵌入到第一顶点z坐标中。每个基元是4控制点片,不管全部4个控制点是否使用。以下是封装到4控制点片中的实例线基元。应注意界定基元类型的第一顶点的z坐标:
[0223]
[0224] 可调节每个基元为均匀的,即使它们在邻近基元之间共享顶点也是如此。因此是严格地4片基元类型导致无顶点再使用。可能需要预处理虚线模式以用于来回划线路径。系统可处置负的和零虚线模式条目,针对奇数的条目移除最后条目,基于虚线偏移找到当前虚线模式条目以及留下多少虚线。有时虽然可界定虚线模式,但不存在划虚线(全部零条目,或虚线模式中的单个条目)。此预处理可允许此类情况的确定且跳过划虚线。下方是实例虚线模式和偏移组合,其展示虚线模式预处理步骤。
[0225] 虚线模式:[10,0,20,-5,8,10,15]
[0226] 偏移:-120
[0227] 以上虚线模式具有7个条目。我们移除最后条目而得到具有偶数条目的虚线模式:
[0228] 虚线模式:[10,0,20,-5,8,10,]
[0229] 偏移:-120
[0230] 我们取负的条目的绝对值,且通过将以下条目添加到先前条目而移除零条目:
[0231] 虚线模式:[30,+5,8,10]
[0232] 偏移:-120
[0233] 实例系统可计算虚线模式长度,其为53,且将53增加到负的偏移值直到我们达到大于或等于0的偏移。偏移随后变成-120+53+53+53=39。现在实例系统可找到其指向何种条目。第一条目是30,其小于偏移值39。实例系统可前进到下一条目且从偏移减去30。新偏移是39-30=9。当前条目是5,其再次小于偏移值9。实例系统可前进到下一条目且从偏移减去5。新偏移是9-5=4。当前条目8大于偏移值4。偏移可从当前条目减去,其给出值8-4=4。值是8的条目的索引变成“虚线索引”,且所述条目上的余数值4变成“留下的虚线”。因此,预处理的结果如下:
[0234] 虚线模式:[30,5,8,10]
[0235] 虚线索引:2(指向值为8的条目)
[0236] 留下的虚线:4。
[0237] 光栅化器56可将三角形中的每一者光栅化到单元缓冲器(例如,存储于图3的资源块中的缓冲器)中。在第一遍次期间,像素着色器58可停用或设定成“穿通”模式以将输入像素直接传递到输出合并器级60。输出合并器级60可经配置以根据一或多个模板缓冲器填充技术填入模板缓冲器40以使得模板缓冲器40存储指示用于路径片段的填充区域的值。在各种实例中,根据本发明,可能使用单元缓冲器而不是模板缓冲器40,如图4中所示。大体上,如果使用模板缓冲器40,那么可需要具有限界框的第二再现遍次以使用模板数据再现路径填充。在一些实例中,使用单元缓冲器可允许单个遍次解决方案而不是需要多个遍次的解决方案。在一些实例中,单元缓冲器可为可允许1遍次再现的专用硬件单元。在一些实例中单元缓冲器可为光栅化器56的一部分。在一实例中,像素着色器58可返回来回划线颜色。
[0238] 根据第一模板缓冲器填充技术,对于光栅化基元中的每一者,输出合并器级可反转模板缓冲器40中的对应于由所述光栅化基元覆盖的像素的值。以此技术,在全部基元已经光栅化到模板缓冲器40之后,模板缓冲器40中的任何反转值可表示用于待再现路径片段的填充区域。
[0239] 根据第二模板缓冲器填充技术,对于光栅化基元中的每一者,输出合并器级可在光栅化基元的顶点次序在顺时针方向中定向的情况下递增模板缓冲器40中的对应于由光栅化基元覆盖的像素的值,且在光栅化基元的顶点次序在逆时针方向中定向的情况下递减模板缓冲器40中的对应于由光栅化基元覆盖的像素的值。以此技术,在全部基元已经光栅化到模板缓冲器40之后,模板缓冲器40中的任何非零值可表示用于待再现路径片段的填充区域。
[0240] 图4是说明经修改以执行根据本发明中描述的一或多个实例的路径再现的实例图形管线的框图。可经修改以执行根据本发明中描述的一或多个实例的路径再现的功能块以交叉影线图案指示。在一实例中,DirectX11或其它架构可包含延伸图形管线以支持新“路径”基元类型。此路径基元类型连同3D API中的其它着色器级可完全在GPU内实现路径的来回划动和/或填充,因此卸载CPU。在一些实例中这可为低功率解决方案,因为一些图形处理单元着色器可比CPU更为功率高效。这些还可允许使用本文所描述的末端盖类型、接点规则和基元类型的可编程路径再现。
[0241] DirectX11管线可包含绘制调用,其包含许多索引和许多路径片段类型。索引可用以(例如)用与顶点缓冲器相同的方式获取控制点。绘制调用可(例如)获取索引和路径片段类型两者。路径片段类型可包含线、二次曲线、三次曲线、弧等。在一些实例中可添加基元以允许例如在硬件着色器中计算棋盘形布置水平。另外,在一些实例中可添加也被称作产生基元类型的信息基元类型以允许(例如)在几何形状着色器54中的三角形(用于来回划线)和线(用于填充)的产生。
[0242] 因此,实施DirectX11的GPU中的硬件和本文所描述的系统和方法可包含硬件以处理路径和信息基元类型。另外,单元缓冲器可添加到实施DirectX11架构的GPU。在一实例中,所述单元缓冲器可为十六乘十六子像素栅格。
[0243] 图5是说明根据本发明中描述的一或多个实例的来回划动的实例的图,所述来回划动可包含通过在垂直于线的两个方向中加粗所述线而加宽所述线。举例来说,图5的图解说明的路径片段是线。来回划动线可包含通过在垂直于线的两个方向中将所述线加粗(例如)来回划线宽度“w”而加宽所述线。
[0244] 图6是说明根据本发明中描述的一或多个实例的来回划动的实例的图,其中可定位一对三角形条带以加宽线段中的至少一者。致图6的所说明的实例中,路径片段是曲线。所述曲线可分裂为线段。可确定来回划线宽度且可定位一对三角形条带以加宽线段中的至少一者,如图6中图解说明。给定线段可包含点p0、p1和在那些点处的归一化切线向量t0、t1。变量“w”是来回划线宽度,如图5和6中所示。为了寻找p`和p``点,产生三角形条带(p``
0,p`0,p``1,p`1)。首先通过以下方程式找到n0和n1:
[0245] n0.xy=(t0.y,-t0.x)且n1.xy=(t1.y,-t0.x)
[0246] 随后
[0247] p`0/p``0=p0+/-w*n0且
[0248] p`1/p``1=p1+/-w*n1
[0249] 为了找到p`和p``点,产生三角形条带(p``0,p`0,p``1,p`1)。
[0250] 首先通过以下方程式找到n0和n1:
[0251] n0.xy=(t0.y,-t0.x)且n1.xy=(t1.y,-t0.x)
[0252] 随后
[0253] p`0/p``0=p0+/-w*n0且
[0254] p`1/p``1=p1+/-w*n1
[0255] 图7是说明根据本发明中描述的一或多个实例的接合作为斜边、圆形或斜接的路径片段的实例的图。在路径片段会合处应用接合点。本文所描述的系统和方法可以许多方式处理两个路径片段之间的接合点。举例来说,如图7中所示,路径片段可作为斜边、圆形或斜接而接合。
[0256] 图8是说明根据本发明中描述的一或多个实例的接合作为斜边的路径片段的实例的图。用于处理接点的输入可包含p0、p1、p和接合点类型。图8中图解说明用于斜边的输入p0、p1和p。随后可计算切线为t0=p0-p,t1=p1-p。随后可将这些切线归一化。
[0257] 对于斜边三角形,如图8中所示可产生(p'0,p,p'1)。
[0258] n0=(t0.y,-t0.x)
[0259] n1=-(t1.y,t1.x)
[0260] p`0=w*n0+p
[0261] p`1=w*n1+p
[0262] 图9是说明根据本发明中描述的一或多个实例的接合作为斜接的路径片段的实例的图。对于斜接三角形,如图9中所示可产生(p`0,p,p`1)和(m,p`0,p`1)。
[0263] 找到如斜边接合点中的p`0和p`1。
[0264] 找到ta=(t0+t1)/2
[0265] f=ta.x2+ta.y2
[0266] c=-w/sqrt(f-f2)
[0267] m=c*ta+p
[0268] 图10是说明根据本发明中描述的一或多个实例的接合作为圆形的路径片段的实例的图。图10中图解说明圆形末端。N=片段的数目。
[0269] θ=acos(dot(t0,-t1))/N
[0270] start=n0*w
[0271] For i=1..N
[0272] If(i==N)
[0273] end=n1*w(针对密封性)
[0274] Else
[0275] end.x=start.x*cosθ-start.y*sinθ
[0276] end.y=start.x*sinθ+start.y*cosθ
[0277] Triangle(start+p,end+p,p)
[0278] 应认识到,取决于实例,本文中所描述的技术中的任一者的某些动作或事件可用不同顺序执行、可添加、合并或全部省略(例如,实践所述技术并不需要所有的所描述动作或事件)。此外,在某些实例中,可例如通过多线程处理、中断处理或多个处理器同时而非依序执行动作或事件。
[0279] 图11是说明将使用本发明的路径填充技术填充的实例多边形的概念图。在一些实例中,所述多边形可表示待填充的路径和/或路径片段。在一些实例中,可如下相对于图11中图解说明的多个连接的线段(p0p1、p1p2、p2、p3等)执行两遍次填充算法:
[0280] 遍次1
[0281] 1.清除模板缓冲器且停用对颜色缓冲器中的写入。拾取任意点C
[0282] 2.将所述多边形的边界打断为有向线段p0p1、p1p2、...的序列
[0283] 3.在C处构造三角形扇形中心:Cp0p1、Cp1p2、Cp2p3...
[0284] 4.绘制每个三角形且将模板操作设定为INVERT(偶/奇)或INCR(非零)
[0285] 遍次2
[0286] 1.绘制覆盖整个屏幕的大方形/三角形且绘制到其中模板值不是零的像素。
[0287] 在一些实例中,图11中图解说明的点p1可选择为用于产生三角形扇形的共同点(C),且可产生包含以下三角形的三角形扇形:{p1,p2,p3}、{p1,p3,p4}、{p1,p4,p5}、{p1,p5,p6}、{p1,p6,p7}。图11中图解说明的路径的目标填充区是区A、D和F的联合。
[0288] 如图11中所示,区A、D和F仅是在由所述三角形扇形形成的奇数三角形内的区。因此,如果这些三角形是根据其中模板缓冲器40中的对应于由光栅化基元覆盖的像素的值被反转的第一模板缓冲器填充技术而再现,那么在全部基元已经光栅化到模板缓冲器40之后,模板缓冲器40中的任何反转值可对应于区A、D和F的联合(即,用于待再现路径片段的填充区域)。
[0289] 另外,区A、D和F是在由三角形扇形形成的不平衡数目的顺时针和逆时针三角形内的仅有的区。在不平衡数目的顺时针和逆时针三角形内的区可指代其中所述区在其内部的三角形的总数不等于所述区在其外部的三角形的总数的区。因此,如果这些三角形是根据其中模板缓冲器40中的值取决于三角形是在顺时针或逆时针方向中定向而递增或递减的第二模板缓冲器填充技术而再现,那么在全部基元已经光栅化到模板缓冲器40之后,模板缓冲器40中的任何非零值可对应于区A、D和F的联合(即,用于待再现路径片段的填充区域)。
[0290] 关于使用模板缓冲器40来填充多边形的进一步细节可参见“OpenGL编程指南:学习OpenGL版本1.1的官方指南”,其在http://www.glprogramming.com/red/chapter14.html#name13可用且整个内容以引用的方式并入本文中。
[0291] 第一遍次在将由几何形状着色器54产生的全部基元再现到模板缓冲器40中之后完成。在第二遍次期间,在启用模板测试的情况下将包含填充区域的限界框(例如,由两个三角形基元形成)再现到再现目标(例如,帧缓冲器)中。模板缓冲器40中的数据可致使填充区域内部的像素以填充颜色(在第二再现遍次之前由CPU指定)点亮,且致使在填充区域之外的像素保持暗。在第二遍次期间,可停用棋盘形布置级和几何形状着色器54。顶点着色器可经配置以执行用于再现3D图形基元的标准顶点着色器操作(例如,变换)。像素着色器可经配置以执行标准操作和/或经配置以在“穿通”模式中操作。一旦第二遍次完成,再现目标(例如,帧缓冲器)便可存储用于路径片段的填充区域的光栅化版本。
[0292] 来回划动操作可利用单个遍次方法,其可大体上涉及以下步骤:
[0293] 1.将路径片段棋盘形布置为多个线段。
[0294] 2.计算线段的端点的法线。
[0295] 3.通过使用所述法线加宽所述线段而确定来回划线区域。
[0296] 4.产生对应于所述来回划线区域的基元。
[0297] 5.在启用深度测试的情况下将所述基元再现到再现目标。
[0298] 输入处理和棋盘形布置操作实质上类似于相对于填充操作描述的输入处理和棋盘形布置操作,并且因此将不进一步详细描述。
[0299] 除域着色器52评估参数方程式以产生顶点之外,如上文相对于填充操作所描述,域着色器52还可在来回划动操作期间产生线段的端点的法线。为了产生法线,域着色器52可针对由棋盘形布置器50产生的值中的每一者评估额外参数方程式,且针对每一评估输出法线顶点。法线顶点可指示路径片段上对应于由棋盘形布置器50产生的参数值的点的法向量。
[0300] 一般来说,用于曲线和椭圆形弧(可用以确定法线)的切线方程式是上文相对于产生曲线和弧的顶点描述的参数方程式的导数。举例来说,对于三次贝塞尔曲线,域着色器级52可根据以下参数方程式产生曲线的输出顶点的法线:
[0301] C0*-3*(1-t)2+C1*(-6*(1-t)*t+3*(1-t)2)+C2
[0302] *(-3*t2+6*(1-t)*t)+C3*3*t2
[0303] 其中C0、C1、C2、C3对应于三次贝塞尔曲线的控制点,且t对应于由域着色器52提供以用于执行参数评估的坐标。以上提供的用于二次贝塞尔曲线的参数方程式的导数可用以以类似方式产生用于二次贝塞尔曲线的法线。
[0304] 或者,对于三次贝塞尔曲线,域着色器级52可根据以下参数方程式产生曲线的输出顶点的法线:
[0305] X0*-3*(1-t)2+X1*(-6*(1-t)*t+3*(1-t)2)+X2
[0306] *(-3*t2+6*(1-t)*t)+X3*3*t2
[0307] Y0*-3*(1-t)2+Y1*(-6*(1-t)*t+3*(1-t)2)+Y2
[0308] *(-3*t2+6*(1-t)*t)+Y3*3*t2
[0309] 其中(X0,Y0)、(X1,Y1)、(X2,Y2)、(X3,Y3)对应于三次贝塞尔曲线的控制点,且t对应于由域着色器52提供以用于执行参数评估的坐标。以上提供的用于二次贝塞尔曲线的参数方程式的导数可用以以类似方式产生用于二次贝塞尔曲线的法线。
[0310] 对于椭圆形弧路径片段,域着色器级52可根据以下参数方程式产生曲线的输出顶点的法线:
[0311] Tanx=-rhCos*sin(anglet)-rvSin*cos(anglet)
[0312] Tany=-rhSin*sin(anglet)+rvCos*cos(anglet)
[0313] 其中参数化角度anglet是从棋盘形布置器输出t确定,其中rh表示未旋转椭园的水平半径,rv表示未旋转椭圆的垂直半径,rvCos、rvSin、rhCos和rhSin分别表示rv*Cos(角度)、rv*Sin(角度)、rh*Cos(角度)和rh*Sin(角度),且angle表示在通过(rh,rv)按比例缩放之前测量的椭圆相对于x轴线的逆时针角度。在一些实例中,壳着色器级可经配置以确定(例如,预计算)cos(角度)和sin(角度)和/或确定(例如,预计算)rvCos、rvSin、rhCos和rhSin值,且将这些值提供到域着色器级52供用于针对椭圆形评估上文所述的参数方程式。
[0314] 在找到切线之后,可根据以下方程式发现法向量:
[0315] 法线=归一化(-Tany,Tanx)。
[0316] 如上文相对于椭圆形弧所论述,在一些实例中,片控制列表中的顶点可包含指示端点参数化的数据。在此等实例中,在GPU的着色器单元上执行的壳着色器程序可用以将指示椭圆形弧的端点参数化的数据转换到指示椭圆形弧的中心参数化的数据。
[0317] 几何形状着色器54可接收由域着色器52产生的线段和法线,且产生在空间上对应于用于线段中的每一者的来回划线区域的基元(例如,三角形)。用于线段中的每一者的来回划线区域可共同地近似用于原始路径片段的来回划线区域。
[0318] 一般来说,每一线段可由路径上的两个连续点p0、p1以及分别在点中的每一者处的法线n0、n1界定。为了确定用于线段的来回划线区域,几何形状着色器54可根据以下方程式计算用于线段的来回划线区域的四个拐角点(u0,l0,u1,l1):
[0319] u0=p0+n0*StrokeWidth
[0320] l0=p0-n0*StrokeWidth
[0321] u1=p1+n1*StrokeWidth
[0322] l1=p1-n1*StrokeWidth
[0323] 其中p0和p1是正计算来回划线区域的线段的端点,n0是对应于p0的法向量,n1是对应于p1的法向量,且StrokeWidth是由用户应用程序界定且传递到GPU的来回划线宽度。
[0324] 图12和13图解说明用于给定线段的两个不同来回划线区域配置。取决于来回划线宽度的值,两个不同情况可适用于如图12和13中所示的来回划线区域的形状。点c界定为法向量交叉的点(即,由u0和l0形成的线与由u1和l1形成的线的交叉点),且可被称为交叉点。
[0325] 几何形状着色器54可确定所述交叉点是在来回划线区域之外(例如,图12)还是在来回划线区域内部(例如,图13),且基于所述确定产生在空间上对应于所述来回划线区域的一或多个基元。为了确定交叉点是否在来回划线区域之外,几何形状着色器54可确定是否来回划线宽度
[0326] 如果来回划线宽度足够小(来回划线宽度
[0327] 如果交叉点在来回划线区域之外(例如,图12),那么几何形状着色器54可产生两个三角形以形成在空间上对应于来回划线区域的方形。举例来说,几何形状着色器54可使用以下顶点组合{u0,u1,l1}和{l1,l0,u0}产生两个三角形。
[0328] 如果交叉点在来回划线区域的内部(例如,图13),那么几何形状着色器54可产生两个三角形以形成在空间上对应于来回划线区域的蝶形。举例来说,几何形状着色器54可在{u0,u1,c}三角形在顺时针方向中定向的情况下使用以下顶点组合{u0,u1,c}和{c,l0,l1}产生两个三角形,且在{u0,u1,c}三角形在逆时针方向中定向的情况下使用以下顶点组合{u0,u1,c}和{c,l1,l0}产生两个三角形。
[0329] 为了确定{u0,u1,c}三角形是否在顺时针方向中定向,几何形状着色器54可确定以下界定的方程式中是否sin(a0+a1)>0。如果sin(a0+a1)>0,那么几何形状着色器54可确定{u0,u1,c}三角形在顺时针方向中定向。否则,几何形状着色器54可确定{u0,u1,c}三角形在逆时针方向中定向。可用以确定方形的形状并且还找出中心点C的坐标的距离u0c和u1c可基于以下公式确定:
[0330] v=归一化(n1-n0)
[0331] sin(a0)=n0×v,cos(a0)=n0·v
[0332] sin(a1)=v×n1,cos(a1)=v·n1
[0333] sin(a0+a1)=sin(a0)cos(a1)+cos(a0)sin(a1)
[0334]
[0335] c=u0-n0·u0c
[0336] 其中n0是用于端点p0的法线,且n1是用于端点p1的法线。
[0337] 如果来回划线宽度
[0338] 如果来回划线宽度>min(u0c,u1c),那么存在2个情况。如果sin(a0+a1)>0,意味着三角形(u0,u1,c)为顺时针的,那么待绘制的三角形是(u0,u1,c)和(c,l0,l1)。如果sin(a0+a1)<0,那么待绘制三角形是(u1,u0,c)、(c,l1,l0)。
[0339] 在某些情况下,当(例如,由几何形状着色器54)产生对应于线段的来回划线区域的基元时,如果来回划线区域中的一者或两者形成蝶形形状(例如图13),那么相邻线段可形成T形接头。这是因为中心点C针对不同线段不在相同位置。
[0340] 图14是说明可在三角形(U0,U1,C1)与(U1,U2,C2)之间形成的实例T接头的概念图。所述T接头可致使最终再现结果中一或多个像素丢失(例如,不恰当地再现和/或堵塞)。在一些实例中,为了解决上述问题,GPU可绘制2个有帮助的三角形(C1,U0,L0)、(C1,U1,L1)。在一些实例中,为了确保所述两个三角形将不会由于背面剔除而被剔除,可停用或关闭GPU的(例如,光栅化器的)背面剔除特征。
[0341] 光栅化器可将由几何形状着色器54产生的基元中的每一者光栅化到再现目标(例如,帧缓冲器)中。在输出合并器级期间,由几何形状着色器54产生的基元覆盖的全部像素可以来回划线颜色(在再现遍次之前由CPU指定)点亮。像素着色器可经配置以在再现遍次期间执行标准操作和/或经配置以在“穿通”模式中操作。在再现由几何形状着色器54产生的全部基元之后单一再现遍次完成。一旦再现遍次完成,再现目标(例如,帧缓冲器)便可存储用于路径片段的来回划线区域的光栅化版本。
[0342] 除填充和来回划动的路径再现操作之外,本发明的技术可包含将各种类型末端盖应用到路径的末端,且应用路径的内部路径片段的端点之间的各种类型的接合点。在一些实例中,这些操作可能够在DX11管线上使用本发明的技术实施。
[0343] 现在描述用于再现接合点的技术。接合点可在不同路径片段会合处应用。在一些实例中,可存在三个不同类型的接合点:(1)斜边,(2)斜接,和(3)圆形。
[0344] 在一实例中,单元缓冲器含有x*y个单元。一个单元表示最终图像中的一个像素,但单元名称用以区分单元和像素,因为它们存储不同信息。单元缓冲器中的每一单元存储十六字节的卷绕计数器信息。单元缓冲器可为帧缓冲器的大小,但通常单元缓冲器的存储器要求将变为太大。因此帧缓冲器可分裂为x*y像素(和单元)的瓦片。此允许一次一个瓦片地绘制基元。
[0345] 图15是说明分裂为十六乘十六子像素栅格的像素的实例的图。在所说明的实例中,存在使用16皇后(16-Queens)规则定位到所述栅格中的十六个样本位置。所述规则定义是子16×16板上放置16个国际象棋皇后,以使得任一皇后都不可攻击另一者。存在许多不同解决方案,但为了我们的目的,最重要规则是对于任何水平或垂直子像素行/列仅存在一个样本。此性质给出用于几乎水平和几乎垂直边缘的抗混叠的全部十六个阴影,且这给出最明显的抗混叠改进。真实的16皇后规则针对45度边缘也适用。
[0346] 像素的十六个样本点中的每一者是八位计数器值。在一个实例中,所述计数器可为卷绕计数器。卷绕计数器值可在边缘绘制阶段期间递增或递减。一旦全部边缘已经绘制,填充过程便检查这些计数器值的值且计算用于抗混叠的像素覆盖范围值。最差情况存储要求是x*y*16字节,其中x和y是瓦片的尺寸。然而,存在减小存取卷绕计数器的所需带宽的方式,因为在大多数情况下卷绕计数器值是极小的(正的或负的)。此信息可用于例如通过将每一卷绕计数器的最低有效位(16位)存储为两个字节来压缩数据且具有内部每像素旗标以确定像素类型。像素类型可例如为:空的,负的16位,正的16位,完全扩展的16字节。在其它实例中,可添加更多压缩水平。
[0347] 图16是说明分裂为四个十六乘十六子像素栅格的四个相邻像素的实例的图。在一实例中,像素上的样本的分布将尽可能均匀。在一些实例中,如果确定较好的样本位置,那么可对实施方案改变样本位置。
[0348] 图17是说明在边缘250处的边缘取样的实例的图。由边缘遍历产生的子像素是在252处。精确落在样本点上的边缘子像素是在254处。不受影响的样本点大体上展示为在区域256中的边缘250的左边。在边缘交叉的某些情况下,像素将影响两个水平连续像素的卷绕计数器。实例可使用规则,例如如果样本点精确地在边缘子像素上或在边缘子像素的右边,那么其被视为设定用于当前像素。否则其是设定在右边的下一像素上。理解此情形的一种方法是考虑精确地在右边一个像素的边缘(展示在258处)的复制且这两个线之间的每个样本点经设定,例外的是仅原始边缘包含精确落在边缘250上的样本点。此规则可对于全部边缘通用。应注意相同信息可存储在所述一个像素内部但这将需要每样本一个以上位。可选择每样本一位用于存储卷绕计数器值的稍后的数据压缩目的。对于任何边缘250,存在针对其子像素行中的每一者产生的仅一个子像素样本。这意味着如果边缘在Y方向中是五个子像素但这X方向中是300个子像素,那么仍产生且取样仅五个样本。
[0349] 取样的结果收集为十六位值(例如,掩码)。内部地,存在以某些规则清出的左侧和右侧掩码。在掩码被清出时,意味着经设定位影响所述像素的对应卷绕计数器。如果边缘是向上的,那么递增卷绕计数器。如果边缘是向下的,那么递减卷绕计数器。在产生边缘子像素时,检查下一子像素是否在当前像素内、左边、右边或在不同像素行上。如果新子像素在不同像素行上,那么将左侧和右侧掩码清出。如果新子像素在当前像素的像素右边,那么清出左侧掩码且随后由右侧掩码替换。如果新子像素在当前像素的像素左边,那么清出右侧掩码且随后由左侧掩码替换。这可完成以减小清空的量。基本上,在以上实例中左侧和右侧掩码是彼此的倒数。在其它实例中,此情况可能并不始终为真。举例来说,极短边缘或几乎水平边缘在垂直方向中不覆盖整个像素。在那些实例中,左侧和右侧掩码不是彼此的倒数。
[0350] 图18A和18B是说明根据本发明中描述的一或多个实例的实例方法的流程图。如图18A和18B中所示,GPU 12处理当前瓦片的全部边缘(500)。可将一个边缘输入到GPU 12中,其中所述边缘具有点(x0,y0)和(x1,y1)(502)。GPU 12确定所述瓦片是否为最左边瓦片(504)。如果瓦片是最左边瓦片,那么GPU 12将剪切区设定为(-inf,ty0,tx1,ty1(506),其中tx0tx1ty0ty1是瓦片边界。如果瓦片不是最左边瓦片,那么GPU 12将剪切区设定为(tx0-
1,ty0,tx,ty1)(508)。GPU 12确定剪切检查是否可见(510,514),且如果是的话则剪切所述边缘(512)。如果不是则输入边缘(502)。
[0351] GPU 12产生边缘样本(516)且确定所述样本是否在当前像素中(518),如相对于图20A到20Z将论述。如果所述样本在当前中,那么GPU 12确定其是否为最左边瓦片(528),如果不是则GPU 12确定新像素是否在左边、右边或上方/下方(520)。如果新像素在右边则GPU 
12以左边样本掩码替代右边样本掩码且“清空”、例如删除左边样本掩码(522)。如果新像素在左边则GPU 12以右边样本掩码替代左边样本掩码且“清空”、例如删除右边样本掩码(524)。如果新像素在上方或下方则GPU 12清空且清除两个样本掩码(526)。
[0352] 如果新瓦片是最左边瓦片,则GPU 12可将所述样本固定在所述瓦片内部,其中x=max(x,tx0)(530)。如果不是,则GPU 12取样更新左边或右边掩码(532)。如果所述瓦片不是最左边瓦片(528)则也执行此操作(532)。
[0353] 如果边缘未完成,则GPU再次产生边缘样本(516),否则GPU 12确定是否全部边缘已完成(536)。当全部边缘完成时所述过程完结,即完成(538)。如果全部边缘未完成则输入一个边缘(502)。
[0354] 图19是说明实例填充过程的图。填充从瓦片602的左边缘600开始。在一实例中,填充过程具有十六个内部八位卷绕计数器。来自单元缓冲器的卷绕计数器值可添加到内部计数器。覆盖范围值可从内部计数器计算。存在两个支持的规则来将内部卷绕计数器值转换到覆盖范围:奇/偶和非零。关于奇/偶规则,具有奇数值(1,3,5,7,9…)的每个内部卷绕计数器递增像素覆盖范围。关于非零规则,具有非零值的每个内部卷绕计数器递增像素覆盖范围。
[0355] 所述图图解说明在一个向上边缘(以上边缘绘制实例)已绘制之后单元缓冲器的首先两个像素604、606。由于所述边缘是向上的,因此卷绕计数器在单元缓冲器中是正一,在标记为红的样本上。来自单元缓冲器的卷绕计数器可在覆盖范围计算之前添加到内部卷绕计数器。像素的左边缘上的列608、610展示在单元缓冲器卷绕计数器已经添加之后内部卷绕计数器的值。所说明的实例中的第一像素604具有十个样本,在其卷绕计数器中具有一。第一像素的最终覆盖范围值可为10/16。第二像素606具有六个样本,在其卷绕计数器中具有一。由于这些添加到内部卷绕计数器,因此可见现在全部十六个内部卷绕计数器是一,因此第二像素的最终覆盖范围是16/16(完全覆盖)。
[0356] 图20A到20Z是说明根据本发明中描述的一或多个实例的逐步实例的图。在图20A到20Z的图序列中,填充四顶点多边形。在此实例中瓦片大小是8乘8像素。当前作用中瓦片展示为包含边界612。总帧缓冲器大小是16乘16像素(展示为矩形614),因此具有总共四个瓦片要再现。多边形边缘展示为线616。在边缘处理期间产生的子像素展示为点618。受边缘影响的样本点展示为620、622。点620将递减对应样本点的卷绕计数器值。点622将递增对应样本点的卷绕计数器值。
[0357] 图20A图解说明绘制到单元缓冲器的第一边缘624。这是最左边瓦片648。在所说明的实例中,从左侧出来的子像素固定(x坐标强制)在瓦片648内部。此边缘是向下的,因此受影响样本点展示在620(负的),且它们递减对应样本点卷绕计数器。在第一边缘624之后,在任何像素的卷绕计数器中仅存在负的或零值。
[0358] 图20B图解说明第二边缘626是向上边缘且递增卷绕计数器。应注意坐标(4,6)上的像素现在具有存在于所述像素的十六个卷绕计数器中的正的、负的和零值,因为首先两个边缘624、626两者贡献于同一像素。
[0359] 图20C图解说明第三边缘628,其并不贡献于此瓦片648。换句话说,第三边缘628不在瓦片648内。如图20C中所示,第三边缘628在瓦片648的右边和下方。
[0360] 图20D图解说明第四边缘630类似于第一边缘624,但此处几个边缘子像素631固定在瓦片648内部。所述边缘是向上的且递增卷绕计数器。
[0361] 图20E图解说明在此实例中可处理的全部边缘624、626、628、630。所述图图解说明卷绕计数器的最终状态。具有正卷绕值的样本展示为点622,且负的卷绕值展示为点620。已使用像素(具有非零卷绕值)由边界638指示。坐标(4,6)中的像素展示为其具有正和负的值。此信息可用以压缩计数器值。
[0362] 图20F图解说明在对于此瓦片648的全部边缘经处理时填充过程可开始。所得水平跨度656图解说明为具有内部白色界限,因此更容易看见单独的跨度。
[0363] 图20G图解说明从最后瓦片648继承的计数器值。即从左边瓦片的转运。转运是来自最后列的计数器信息。这是此瓦片650的开始中卷绕计数器的起始情形。
[0364] 图20H图解说明在一些实例中,瓦片648、650可始终从左到右处理。对于此的原因是在最后瓦片650的右边缘上的卷绕计数器值可经继承用于下一瓦片。第一边缘624并不直接贡献于此瓦片650(间接地,以最后瓦片648的继承计数器值来贡献)。
[0365] 图20I图解说明第二边缘626是向上的且递增卷绕计数器。当前瓦片650不再是最左边瓦片,因此图解说明不将边缘子像素固定在瓦片650内部。对于右边的瓦片的全部其余部分,瓦片650的剪切边界可向左延伸一个像素。这可见为瓦片650外部的点618。这对于边缘的正确取样是必需的。然而,仅瓦片650内部的卷绕计数器受影响,因此剪切边界仅延伸用于取样目的。
[0366] 图20J图解说明第三边缘628是向下的且递减卷绕计数器。
[0367] 图20K图解说明第四边缘630并不贡献于此瓦片650。换句话说,没有边缘630的部分在瓦片650内。
[0368] 图20L图解说明恰在填充开始之前此瓦片650的全部卷绕计数器的状态。注意将构成跨度的左侧样本由于从最后瓦片648继承的计数器而开始完全覆盖。并且,注意两个像素636、638具有正和负的卷绕值。
[0369] 图20M图解说明对于此瓦片650的全部边缘经处理,填充过程可开始。图中图解说明所得单独的跨度665。
[0370] 图20N图解说明第一边缘624并不贡献于此瓦片652。换句话说,第一边缘624不在此瓦片652内。
[0371] 图20O图解说明第二边缘626并不贡献于此瓦片652。
[0372] 图20P图解说明第三边缘628是向下的且递减卷绕计数器。
[0373] 图20Q图解说明第四边缘630是向上的且递增卷绕计数器。注意边缘630并不穿过瓦片652的左边缘,因此不发生固定。
[0374] 图20R图解说明恰在填充开始之前此瓦片652的全部卷绕计数器的状态。
[0375] 图20S图解说明对于此瓦片652的边缘经处理且填充过程可开始。此处图解说明所得单独的跨度。
[0376] 图20T图解说明从最后瓦片652继承的计数器值。这是在此瓦片654的开始中卷绕计数器的起始情形。
[0377] 图20U图解说明第一边缘624并不贡献于此瓦片654。
[0378] 图20V图解说明第二边缘626并不贡献于此瓦片654。
[0379] 图20W图解说明第三边缘628是向下的且递减卷绕计数器。
[0380] 图20X图解说明第四边缘630并不贡献于此瓦片654。
[0381] 图20Y图解说明恰在填充开始之前此瓦片654的全部卷绕计数器的状态。
[0382] 图20Z图解说明对于此瓦片654的全部边缘经处理,填充过程可开始。此处展示所得单独的跨度。
[0383] 图21A到21D是说明使用三次加线输入的实例来回划线流程的图。在一实例中,预处理级可找到末端盖和接合点,且图21B中由箭头说明两个末端盖和接合点。根据控制点差可找到切线。这些基元(一个线,两个盖,一个接合点和一个三次曲线)将如下发送到GPU(仅x和y坐标起作用,且突出显示的第一顶点上的z坐标是基元类型标记):
[0384]
[0385]
[0386] 在一实例中,全部基元可为4路径类型且编程者进行drawAutoIndexed API调用。
[0387] 在无预处理的一实例中,如图21C中所示五个顶点可界定路径,基元类型如下:[线,三次曲线]。路径是不闭合的。实例过程可进行以下API调用:(1)
drawNonIndexedPrimType(numIndices=5,闭合=假),(2)IA将基于基元类型开始产生基元。因为这是开放路径,所以在路径的开始和末端处存在盖。
[0388] 在一实例中,输出如下:
[0389]
[0390] (应注意,索引对于末端盖呈相反次序)
[0391] 实例可具有四个不同类型的路径片段(线、二次曲线、三次曲线、椭圆形),我们具有4x4=16个接合点基元类型。在一实例中顶点着色器46可处理可能已应用适当世界/视图/投影的X和Y坐标。为简单起见,我们采用恒等变换,因此输入保持不变。控制点壳着色器可执行用于盖和接合点的以下过程:
[0392]
[0393]
[0394] 用于接合点的控制点1和2以及用于盖的控制点1含有切线数据。我们将这些切线转换到角度表示且将其保存在先前未使用的z坐标中。因此,到棋盘形布置器50的输入将如下:
[0395]
[0396]
[0397] 实例可包含恒定HS将确定棋盘形布置水平。举例来说,假定固定棋盘形布置,4x用于三次曲线,4x用于圆形盖/接合点且1x用于线。域着色器52可输出顶点位置、法线和类型且针对线、三次曲线和椭圆形弧评估经棋盘形布置顶点的位置和法线。域着色器52可将法线转换到角度形式且将输出标记为线段。对于曲线,域着色器52可重复控制点可能致使在曲线开始和末端位置具有零切线。为了在该处正确地确定切线,域着色器52可不同地处理u=0.0f和1.0f且线性内插中间值。用于盖和接合点的法线角度的线性内插转换回到笛卡耳表示。域着色器52可适当地将输出标记为盖或接合点。对于u=0.0f和1.0f,我们直接使用切线笛卡耳表示而非角度表示以确保密封性。再次,域着色器52可与中间值不同地处理u=0.0f和1.0f。
[0398] 对于u=0.0f,线:位置是第一顶点。法线是端点差。
[0399]
[0400] 在一实例中,输出位置可为-0.4f,0.8f(起始点),output.norm可为0.8f,0.0f,切线可为末端点-起始点,法线可为[-tan.y,tan.x],且输出类型可为线。对于曲线:位置可为第一控制点。法线可为首先两个不重复控制点的差。
[0401]
[0402]
[0403] 在一实例中,输出位置可为0.4f,0.8f(第一控制点),output.norm可为0.2f,0.2f,切线可为首先两个非相等控制点之间的差,法线可为[-tan.y,tan.x],且输出类型可为线。盖可为第一顶点的位置。法线可为逆时针旋转90度的切线向量的笛卡耳表示。
[0404]
[0405] 在另一实例中,输出位置可为-0.4f,0.8f(盖位置),output.norm可为0.0f,0.8f。实例可使用切线笛卡耳表示,法线=[-tan.y,tan.x]且输出类型可为盖。
[0406]
[0407] 在另一实例中,输出位置可为0.0f,0.0f(盖位置),output.norm可为0.2f,-0.6f。实例可使用切线笛卡耳表示,法线=[-tan.y,tan.x]且输出类型等于盖。对于接合点,位置是第一顶点。法线是逆时针旋转90度的第一切线向量的笛卡耳表示。
[0408]
[0409] 在另一实例中,输出位置可为0.4f,0.8f(接合点位置),output.norm可为0.0f,-0.8f且实例可使用第一切线笛卡耳表示,法线=[-tan.y,tan.x],输出类型=接合点。对于此实例u=1.0f,其中线在最后顶点的位置中。法线是端点差。
[0410]
[0411] 在另一实例中,输出位置可为0.4f,0.8f(末端点)且output.norm可为0.8f,0.0f。在实例中,切线可为末端点-起始点且法线可为[-tan.y,tan.x]。输出类型可为线。对于曲线,位置可为最后控制点。法线是最后两个非重复控制点的差。
[0412]
[0413] 在另一实例中,输出位置可为0.0f,0.0f(l最后控制点)且output.norm=0.2f,-0.6f。在实例中,切线可为首先两个非相等控制点之间差且法线=[-tan.y,tan.x]。输出类型可为线。盖位置可为第一顶点。法线可为顺时针旋转90度的切线向量的笛卡耳表示。
[0414]
[0415] 在另一实例中,输出位置可为-0.4f,0.8f(盖位置),output.norm可为0.0f,-0.8f且实例可使用切线笛卡耳表示,其中法线=[tan.y,-tan.x]且输出类型可为盖。
[0416]
[0417] 在另一实例中,输出位置可为0.0f,0.0f(盖位置),其中output.norm为-0.2f,0.6f且使用切线笛卡耳表示,法线=[tan.y,-tan.x]且输出类型为盖。对于接合点,位置是第一顶点。法线是逆时针旋转90度的第二切线向量的笛卡耳表示。
[0418]
[0419] 在另一实例中,输出位置可为0.4f,0.8f(接合点位置),其中output.norm为0.2f,0.2f。实例可使用第二切线笛卡耳表示,其中法线为[-tan.y,tan.x]且输出类型为类型接合点。
[0420] 在实例中,u=i/T(中间值),线可不具有用于线的中间棋盘形布置值且可使用以下方程式找到曲线的位置C0(1-u)3+3C1(1-u)2u+3C2(1-u).u2+C3u3
[0421] 使用位置方程式的导数找到切线:
[0422] -3C0(1-u)2-6C1(1-u)u+3C1(1-u)2-3C2u2+6C2(1-u)u+3C3u2
[0423]
[0424] 在另一实例中output.pos可使用三次贝塞尔公式且output.norm可使用三次贝塞尔公式导数来寻找切线。法线可为[-tan.y,tan.x]且输出类型可为线。盖(仅圆形)可不具有用于正方形盖的中间值。对于圆形盖,位置可为第一顶点。法线可通过首先线性内插角度切线与其相反方向(增加PI)随后逆时针旋转90度而找到。
[0425]
[0426] 在另一实例中,输出位置可为-0.4f,0.8f(盖位置)。output.norm可为-sin(lerpedAngle),cos(lerpedAngle),线性插值angle与(angle+PI)(1-u)*angle+u*(angle+PI),切线=cos(lerpedAngle),sin(lerpedAngle),法线=[-tan.y,tan.x],且输出类型=盖。
[0427]
[0428] 在另一实例中,输出位置可为可盖位置),output.norm可为-sin(lerpedAngle),cos(lerpedAngle),线性插值angle与(angle+PI)(1-u)*angle+u*(angle+PI),切线=cos(lerpedAngle),sin(lerpedAngle),法线=[-tan.y,tan.x],且输出类型=盖。对于接合点,位置可为第一顶点。法线可为逆时针旋转90度的第二切线向量的笛卡耳表示。
[0429]
[0430] 在另一实例中,输出位置可为0.4f,0.8f(接合点位置),output.norm可为-sin(lerpedAngle),cos(lerpedAngle),线性插值第一切线角度与第二切线角度(1-u)*firstAngle+u*secondAngle,切线可为=cos(lerpedAngle),sin(lerpedAngle),=且法线[-tan.y,tan.x]。输出类型可为接合点。
[0431] 图21D的实例可具有图解说明的线段、盖和接合点以馈送到几何形状着色器54中。在无需划虚线且其中不需要再棋盘形布置/尖点的实例中可使用单个遍次方法且下文论述的输入可发送到几何形状着色器54:
[0432] 在此实例中,输入坐标仍是二维的。输出将为4维的(SV_Position)。如图22A到22B中所示可加粗在端点处在两个法线方向中的线类型片段以产生来回划线区域。在一些实例中,可确定方形,其输出可为两个三角形。在其中曲率与线长度相比较高和/或来回划线宽度较粗的一些其它实例中,可确定“蝶形”,如图22B中所示。在实例中,来回划线宽度不会过高而造成蝶形。在蝶形情况中,中心c,且可找到发送两个三角形(u0,u1,c)和(l0,l1,c)。可存在由于t接头的极少渗出问题。为了消除t接头,可输出两个额外三角形:(u0,l0,c)和(u1,l1,c)。这四个三角形可使用三角形条带基元类型封装到八个顶点中。其可为极少的现象。一些实例可使用两个三角形(maxvertices:6),而其它实例可使用4-三角形(maxvertices:8)方法。
[0433] 图23A到23C图解说明用于产生用于圆形盖/接合点(经棋盘形布置)的一个三角形的实例。以下盖/接合点中的每一者将具有四个不同几何形状着色器54例子,因此展示四个三角形。如果盖是正方形,那么它们将看上去类似于图23B的所说明的实例。在一实例中斜边和斜接接合点将看上去类似于图23C的实例(一个gs实例)。在实例中可添加从恒定缓冲器到每个输出顶点的z坐标。
[0434] 在一实例中,像素着色器可返回来回划线颜色。结果可(使用圆形盖/接合点)如图24中所示。对于像素着色器,在单个遍次解决方案上,结果可为可能不准确匹配图24的切割位置,如图25中所示。
[0435] 图26A到26C图解说明划虚线和处置尖点情况。实例可不使用GS,且将以下各者从域着色器52流式输出到第二遍次壳着色器。(HS)虚线/尖点壳着色器(1)计算棋盘形布置器输入:片段长度、再棋盘形布置差量、长度的倒数、SV_PrimType。片段长度是线段的长度。其对于盖/接合点将为零。再棋盘形布置差量是线段的长度除以再棋盘形布置量。线段的最大长度由棋盘形布置器产生。再棋盘形布置量等于法线之间的角度/RETESSELLATION_ANGLE(固定)。差量是长度除以再棋盘形布置量。长度的倒数是1.0f/片段长度。不用于盖/接合点。
[0436] 在一实例中,可使用经修改棋盘形布置器。来自第一再现遍次的盖在第二遍次上将基本上绕过棋盘形布置。它们不变地直接到达GS。接合点将丢失或不变地发送,取决于它们是否着陆在空白空间上的虚线上。在实例中,我们具有的仅有接合点着陆在虚线上因此其得以保持。经修改棋盘形布置器可使用u坐标根据虚线模式和再棋盘形布置差量来切割线段。切割位置标记有点,如图27中所示。将发送到域着色器52的u坐标将为从起始点的切割位置距离除以片段长度的比率。如果虚线切割碰巧长于再棋盘形布置差量,那么我们将首先在再棋盘形布置差量长度处切割。换句话说,没有新线段可长于其母代片段的再棋盘形布置差量。将基元类型设定为线。
[0437] 经修改棋盘形布置器可随后使用v坐标在每个切割位置处产生盖。将以类似于来自第一再现遍次的圆形盖的方式产生圆形盖。经修改棋盘形布置器可使用v坐标来处置盖位置处的法线旋转。以下图解说明第一切割位置上的圆形盖。每个虚线切割位置将具有盖。再棋盘形布置切割将不具有虚线,如图27中所示。
[0438] 在一实例中可使用(DS)虚线/尖点域着色器(线段,u,v)。在棋盘形布置位置处的法线和位置的线性解译可由虚线/尖点域着色器执行。虚线/尖点域着色器可将法线从角度形式转换回到笛卡耳形式,其中u用以线性插值位置和法线角度且v坐标用以旋转法线,以便产生如图27中所示的圆形盖棋盘形布置。几何形状着色器54可使用单个遍次解决方案。像素着色器可使用单个遍次解决方案。结果可为可不准确匹配以上说明的切割位置,其仅是实例。
[0439] 图28图解说明寻找最佳棋盘形布置因数的实例。举例来说,用于椭圆形弧的棋盘形布置因数可通过首先寻找用于圆的最佳棋盘形布置因数来找到。为了确定棋盘形布置因数,可找到最大角度以使得线近似与弧之间的差小于一半像素。线与弧之间的差是:
[0440]
[0441] 因此:
[0442] 其中p是像素大小。
[0443] 棋盘形布置因数是α/θ,其中α是弧的角度。
[0444] 对于椭圆,参数化的方程式是:
[0445] (x,y)=(a·sin(θ),b·cos(θ)),假定b>a
[0446] 其可视为沿着x方向以小于1的因数a/b按比例缩放的圆。因此可以肯定地说,经棋盘形布置椭圆的误差将小于使用同一棋盘形布置因数的半径b的经棋盘形布置圆的误差。因此可使用弧的同一公式:
[0447]
[0448] 其中r=max(a,b)
[0449] 在另一实例中,可找到用于三次和二次贝塞尔曲线的棋盘形布置因数。二次曲线可在处理之前转换到三次曲线。称为可细分线性高效多样性封闭(SLEVE)的技术可用以估计如图29中所示的三次曲线的棋盘形布置因数。
[0450] 给定多顶式函数和片段的数目(棋盘形布置因数),SLEVE可以均匀的结有效计算曲线的分段线性界限。因此通过SLEVE我们可估计曲线的分段线性近似的误差。另外,SLEVE保证在棋盘形布置因数增加时,限界宽度(误差)将以二次方式减小。因此给定所需的误差,我们可估计安全棋盘形布置因数。整个算法如下:
[0451] 1.对于输入曲线,以初始棋盘形布置因数t0(例如6)计算其SLEVE。
[0452] 2.针对此初始SLEVE获得最大误差w。
[0453] 3.给定所需的误差e,使用此公式计算最终棋盘形布置因数:
[0454]
[0455] 关于SLEVE及其误差的计算的更多细节请参见这2个论文:弯曲表面的高效像素准确再现(杨荣(Young In Yeo)、李汉斌(Lihan Bin)和约克·彼得 I3D 2012),以及,链接弯曲和线性几何形状的可细分线性高效函数封闭体的中间结构(PETERS,J.2004,SIAM会议的会议记录,2003年11月西雅图),其中的每一者以引用的方式并入本文中。
[0456] 用于弧和椭圆的来回划线的棋盘形布置因数可简单地将来回划线宽度增加到半径以计算棋盘形布置因数。对于三次曲线,来回划线不再是多顶式曲线。其具有平方根及其有理函数。因此我们可不再使用SLEVE来对其界限。实际上,理论上可不存在用于三次曲线的足够大棋盘形布置因数。想象具有尖锐尖点的三次曲线,其中法线不再连续通过曲线。对于此情况,无论我们设定的棋盘形布置因数如何,误差都将为大的。在我们的实施方案中,为了解决此问题,如果我们发现在片段的端点处的两个法线太不同,那么我们再棋盘形布置曲线且内插法线。我们认为即使我们不具有安全棋盘形布置因数这在其它情况中也将有帮助,因此对于来回划线我们使用与填充相同的棋盘形布置因数。
[0457] 将最佳棋盘形布置与参考实施方案进行比较,在符合性测试中,参考实施方案使用固定棋盘形布置因数256用于全部曲线,考虑到全部测试情况小于64乘64像素,所述因数是极高的。在我们的实施方案中,固定棋盘形布置因数64可通过全部测试。
[0458] 在以等于一半像素大小的所需误差应用以上优化棋盘形布置因数估计之后,计算在大部分符合性测试中小得多的棋盘形布置因数。在某些情况下,所述测试可失败,因为较小有界的误差不保证输出精确相同。其仅可保证差沿着边界将不超过1个像素。考虑图30的图示。
[0459] 对于右下方像素,像素的中心恰好位于真实曲线与经棋盘形布置曲线之间。因此输出将具有1像素差。我们尝试将所需误差从一半像素减小到1/8像素且我们通过几乎全部测试情况(仅对于一个测试情况我们失败一个像素)。
[0460] 除较小棋盘形布置因数之外,经优化棋盘形布置因数可自适应地改变以保证当使用放大时的再现质量,其无法由固定棋盘形布置因数实现。因此如果存在需要超过256个经棋盘形布置线段为像素准确的曲线,那么我们将实际上胜过参考实施方案。
[0461] 图31到34图解说明再棋盘形布置和切割的实例。来自第一再现遍次的线段可具有法线方向中的太多偏差。如果曲线在某些部分具有较高曲率,那么这些部分在棋盘形布置之后将具有此类线段。不管我们的棋盘形布置水平多高,我们仍将得到具有宽相隔法线的线段。简单地来回划动这些线段将导致视觉假象,如图31中所示。
[0462] 如图32中说明,实例可包含在这些线段上的再棋盘形布置以校正此问题。在实例中,法线中的最大角度偏差确定再棋盘形布置水平。随后可将线长度除以此再棋盘形布置水平以找到所要再经棋盘形布置线的长度(tessDelta)。通过线性内插端点法线的角度表示,随后转换回到笛卡耳表示而找到新法线。
[0463] 在实例中线段也可以根据虚线模式,如图33中所示。通过根据虚线模式开始切割,但如果新线段大于“tessDelta”,那么其也在“tessDelta”处切割,如图34中所示。
[0464] 图35为说明根据本发明中所描述的一或多个实例的实例方法的流程图。在所说明的实例中,GPU 12接收指示待再现路径的路径片段的数据(1000)。在所说明的实例中,GPU 12通过执行路径片段的填充而再现路径片段(1002)。在所说明的实例中,填充路径片段的GPU 12包含将路径片段棋盘形布置为第一多个基元(1004)。在所说明的实例中,GPU 12使用单元缓冲器基于所述第一多个基元光栅化且扫描填充所述路径片段(1006)。在所说明的实例中,GPU 12绘制路径片段的限界框和来自单元缓冲器的模板(1008)。另外,在一些实例中,可再现路径片段而无需使用中央处理单元(CPU)。
[0465] 在一些实例中,所述第一多个基元和所述第二多个基元可为相同基元。所述多个基元可包含多个线段。另外,所述路径片段包括线、椭圆形弧、二次贝塞尔曲线和三次贝塞尔曲线中的一者。
[0466] 在一实例中,GPU 12可进一步经配置以确定将如何基于奇偶规则填充具有一个以上闭合轮廓的图形形状。奇偶规则通过以下方式确定点是否应被视为在内部:在任何方向中绘制从所述点到无限远处的射线,且对所述射线交叉的来自给定形状的路径片段的数目进行计数,如果路径片段的数目是奇数则所述点视为在曲线内部,如果路径片段的数目是偶数则所述点视为在曲线外部。
[0467] GPU 12可确定将如何基于非零规则填充具有一个以上闭合轮廓的图形形状。非零卷绕规则确定用于曲线的每一部分的来回划线的方向,对于给定曲线C和给定点P,非零卷绕规则通过以下方法确定点是否应被视为在内部:(1)构造在任何方向中从P出来朝向无限远处的直线,(2)找到C与此射线的全部交叉点,以及(3)将卷绕数目记分并且其中将卷绕数目记分包含:(1)对于每个顺时针交叉点,如从P查看,曲线从左到右穿过射线,减去1,(2)对于每个逆时针交叉点,如从P查看,曲线从右到左穿过,增加1,如果总卷绕数目是零,则P在C外部,否则,P在C内部。
[0468] 图36是说明根据本发明中描述的一或多个实例的实例方法的流程图。GPU 12来回划动路径片段(1050)。举例来说,GPU 12可将路径棋盘形布置为第二多个基元(1052)。另外,GPU 12可根据虚线模式切割所述第二多个基元(1054)。GPU 12可产生来回划线的三角测量且基于所述三角测量光栅化所述来回划线(1056)。
[0469] 本发明中所描述的技术可至少部分实施于硬件、软件、固件或其任何组合中。举例而言,所描述的技术的各种方面可实施于一或多个处理器中,包含一或多个微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA),或任何其它等效的集成或离散逻辑电路,以及此些组件的任何组合。术语“处理器”或“处理电路”可大体上指前述逻辑电路中的任一者(单独或结合其它逻辑电路)或例如执行处理的离散硬件的任何其它等效电路。
[0470] 此硬件、软件和固件可实施于相同装置内或单独装置内以支持本发明中所描述的各种操作和功能。另外,所描述单元、模块或组件中的任一者可一起或单独作为离散但可互操作逻辑装置而实施。将不同特征描述为模块或单元意图强调不同功能方面且未必暗示此等模块或单元必须由单独硬件或软件组件实现。替代地,与一或多个模块或单元相关联的功能性可由单独硬件、固件和/或软件组件执行,或集成到共同或单独硬件或软件组件内。
[0471] 本发明中所描述的技术也可存储、体现或编码于计算机可读媒体(例如,存储指令的计算机可读存储媒体)中。嵌入或编码于计算机可读媒体中的指令可导致一或多个处理器执行本文中所描述的技术(例如,当由一或多个处理器执行指令时)。计算机可读存储媒体可包含随机存取存储器(RAM)、只读存储器(ROM)、可编程只读存储(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、快闪存储器、硬盘、CD-ROM、软盘、卡盒、磁性媒体、光学媒体或其它有形计算机可读存储媒体。
[0472] 计算机可读媒体可包含计算机可读存储媒体,其对应于例如上文所列的那些的有形存储媒体。计算机可读媒体也可包括通信媒体,其包含促进计算机程序从一个地点到另一地点的传送(例如,根据通信协议)的任何媒体。以此方式,短语“计算机可读媒体”大体上可对应于(1)非暂时性有形计算机可读存储媒体和(2)例如暂时性信号或载波的非有形计算机可读通信媒体。
[0473] 已描述各种方面和实例。然而,可在不脱离所附权利要求的范围的情况下对本发明的结构或技术作出修改。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈