用于执行路径描边的方法和设备与流程

文档序号:12126599阅读:334来源:国知局
用于执行路径描边的方法和设备与流程

技术领域

本公开涉及一种用于执行路径描边的方法和设备。



背景技术:

对关于用于在向量图形或路径渲染正在进行时提高图形处理单元(GPU)的加速性能的方法的研究正在进行。在路径渲染的情况下,输入数据不是由三角形组成,而是由命令和顶点的组合组成。因此,很难在路径渲染的期间提高GPU的加速性能。



技术实现要素:

提供本发明内容来以简化的形式介绍在以下的具体实施方式中被进一步描述的构思的选择。本发明内容不意图识别要求的主题的关键特征或本质特征,也不意图用于帮助确定要求的主题的范围。

在一个总的方面,一种执行路径描边的方法包括:使用关于路径的数据确定是否将出现基于包括在路径中的图元的走样;基于确定的结果产生将用于执行路径描边的纹理;沿图元的边缘对纹理进行映射。

确定的步骤可包括:基于使用路径数据计算的图元的斜率确定是否将发生走样。

确定的步骤可包括:响应于图元的斜率具有值0或无限值,确定将不发生走样;响应于图元的斜率既不具有值0也不具有无限值,确定将发生走样。

产生的步骤可包括:响应于确定的结果为将不发生走样,使用描边颜色产生第一纹理;响应于确定的结果为将发生走样,使用描边颜色和通过向描边颜色施加渐变效果而得到的颜色产生第二纹理。

产生的步骤可包括:响应于确定的结果为将不发生走样,产生与描边宽度对应的第一纹理;响应于确定的结果为将发生走样,产生比描边宽度长的第二纹理。

产生第二纹理的步骤可包括:基于与图元的斜率对应的角度和描边宽度产生第二纹理。

产生第二纹理的步骤可包括:通过向第二纹理的与描边宽度对应的部分施加描边颜色产生第二纹理,并向第二纹理的超出描边宽度的部分施加通过向描边颜色施加渐变效果而得到的颜色。

映射的步骤可包括:将纹理顺序地映射到基于包括在图元中的每个像素而设置的特定区域。

特定区域包括基于包括在图元中的像素的具有与纹理的宽度对应的宽度的区域。

映射的步骤可包括:在基于图元的斜率而确定的方向上对纹理进行映射。

在基于图元的斜率而确定的方向上对纹理进行映射的步骤可包括:响应于图元的斜率具有值0或无穷值,在垂直于图元的方向上对纹理进行映射;响应于图元的斜率具有大于0且小于1的绝对值,在水平方向上对纹理进行映射;响应于图元的斜率既不具有值0也不具有无穷值并且具有等于或大于1的绝对值,在垂直方向上对纹理进行映射。

要求保护的方法还可包括:响应于路径为曲线,将路径划分成多个图元;确定的步骤可包括:确定是否将发生基于所述多个图元中的每个图元的走样。

划分的步骤可包括:基于德卡斯特里奥算法(De Casteljau's algorithm)将作为曲线的路径划分成所述多个图元。

在另一总的方面,一种存储指令的非暂时性计算机可读存储介质,当由处理器运行所述指令时,使得处理器执行以上描述的方法。

在另一总的方面,一种用于执行路径描边的设备包括:产生器,被配置为使用关于路径的数据确定是否将发生基于包括在路径中的图元的走样,并基于确定的结果产生将用于执行路径描边的纹理;映射器,被配置为沿图元的边缘对纹理进行映射。

产生器还可被配置为基于使用路径数据计算的图元的斜率确定是否将发生走样。

产生器还可被配置为:响应于图元的斜率具有值0或无穷值,确定将不发生走样,并响应于图元的斜率既不具有值0也不具有无穷值,确定将发生走样。

产生器还可被配置为:响应于确定的结果为将不发生走样,使用描边颜色产生第一纹理,并响应于确定的结果为将发生走样,使用描边颜色和通过向描边颜色施加渐变效果而得到的颜色产生第二纹理。

产生器还可被配置为:响应于确定的结果为将不发生走样,产生与描边宽度对应的第一纹理,并响应于确定的结果为将发生走样,产生比描边宽度长的第二纹理。

产生器还可被配置为:基于与图元的斜率对应的角度和描边宽度产生第二纹理。

产生器还可被配置为:通过向第二纹理的与描边宽度对应的部分施加描边颜色产生第二纹理,并向第二纹理的超出描边宽度的部分施加通过向描边颜色施加渐变效果而得到的颜色。

映射器还可被配置为:将纹理顺序地映射到基于包括在图元中的每个像素而设置的特定区域。

特定区域包括基于包括在图元中的像素的具有与纹理的宽度对应的宽度的区域。

映射器还可被配置为:在基于图元的斜率而确定的方向上对纹理进行映射。

映射器还可被配置为:响应于图元的斜率具有值0或无穷值,在垂直于图元的方向上对纹理进行映射;响应于图元的斜率具有大于0且小于1的绝对值,在水平方向上对纹理进行映射;响应于图元的斜率既不具有值0也不具有无穷值并且具有等于或大于1的绝对值,在垂直方向上对纹理进行映射。

所述设备还可包括:划分器,被配置为响应于路径为曲线将路径划分成多个图元;产生器还可被配置为确定是否将发生基于所述多个图元中的每个图元的走样。

划分器还可被配置为基于德卡斯特里奥算法将作为曲线的路径划分成所述多个图元。

在另一总的方面,一种连接到图形处理单元(GPU)的中央处理单元(CPU),所述CPU被配置为:使用关于路径的数据确定是否将发生基于包括在路径中的图元的走样;基于确定的结果请求所述GPU产生纹理;从所述GPU接收纹理;沿图元的边缘对纹理进行映射;所述GPU被配置为从所述CPU接收产生纹理的请求,并响应于所述请求产生纹理。

所述CPU还可被配置为将纹理存储在所述CPU中。

所述GPU还可被配置为将纹理存储在所述GPU中。

在另一总的方面,图形处理单元(GPU)连接到中央处理单元(CPU),所述GPU还被配置为:使用关于路径的数据确定是否将发生基于包括在路径中的图元的走样;基于确定的结果产生纹理;沿图元的边缘对纹理进行映射。

所述CPU还可被配置为将关于路径的数据存储在所述CPU中;所述GPU还可被配置为从所述CPU接收关于路径的数据。

在另一总的方面,一种用于执行路径描边的设备包括:产生器,被配置为使用关于包括图元的路径的数据产生能有效抵消在沿图元进行描边期间发生的任何走样的纹理;映射器,被配置为通过沿图元对纹理进行映射来执行描边。

产生器还可被配置为:使用关于路径的数据确定在描边期间是否将发生走样;响应于确定的结果为在描边期间将不发生走样,产生不包括反走样部分的第一纹理;响应于确定的结果为在描边期间将发生走样,产生包括反走样部分的第二纹理;映射器还可被配置为通过对已沿图元产生的第一纹理和第二纹理之一进行映射来执行描边。

产生器还可被配置为:通过向第一纹理的具有等于描边宽度的长度的部分施加描边颜色来产生第一纹理,第一纹理不包括任何其他部分;通过向第二纹理的具有等于描边宽度的长度的第一部分施加描边颜色来产生第二纹理,并向第二纹理的第二部分施加通过向描边颜色施加渐变效果而得到的颜色。

映射器还可被配置为:通过沿图元对纹理进行映射来执行描边,以使得纹理的一端在图元上并且纹理远离图元而延伸。

映射器还可被配置为:通过沿图元对纹理进行映射来执行描边,以使得纹理的一端在图元上并且纹理在相反方向上远离图元的延伸以获取等于纹理的宽度的二倍的最终描边宽度。

其他特征和方面将从以下详细描述、附图和权利要求而清楚。

附图说明

图1是示出描边设备的示例的配置的示图。

图2A和图2B是示出描边和填充的示例的示图。

图3是示出由描边设备执行的路径渲染的方法的示例的流程图。

图4是示出产生器确定是否将发生走样并产生纹理的示例的流程图。

图5是示出图元的斜率和走样的发生之间的相关性的示例的示图。

图6是示出第一纹理的示例的示图。

图7是示出第二纹理的示例的示图。

图8是示出产生器确定是否将发生走样并产生纹理的另一示例的流程图。

图9是示出产生器产生第二纹理的示例的示图。

图10是示出产生器产生第三纹理的示例的示图。

图11是示出产生器产生第四纹理的示例的示图。

图12是示出映射器的操作的示例的示图。

图13A和图13B是示出映射器的操作的其他示例的示图。

图14是示出描边设备的另一示例的配置的示图。

图15A至图15D是示出划分器的操作的示例的示图。

图16和图17是示出执行路径描边的方法的示例的流程图。

图18至图21是示出在中央处理单元(CPU)或图形处理单元(GPU)中实现执行路径描边的方法的示例的示图。

贯穿附图和详细描述,相同的参考标号表示相同的元件。附图可不按照比例,并且为了清楚、说明和方便,附图中的元件的相对大小、比例和描绘可被夸大。

具体实施方式

提供下面的详细描述以帮助读者获得对这里描述的方法、设备和/或系统的全面理解。然而,这里描述的系统、设备和/或方法的各种改变、修改和等同物对于本领域的普通技术人员将是明显的。这里描述的操作的顺序仅为示例,不限于这里阐述的顺序,除了有必要按照特定次序发生的操作以外,可如对于本领域的普通技术人员将是明显的那样被改变。另外,为了更清楚和简洁,可省略本领域的普通技术人员公知的功能和构造的描述。

这里描述的特征可被以不同的形式实现,并将不被解释为限于这里描述的示例。相反,已提供这里描述的示例,使得本公开将是全面且完整的,并且将向本领域的普通技术人员传达本公开的全部范围。

在本说明书中使用的术语中,考虑到本说明书中描述的功能而尽可能选择当前广泛使用的一般术语,但是可根据本领域普通技术人员的意图、法律先例、新技术的出现以及其他因素而改变。一些术语可被任意选择,在这种情况下,这些术语的具体含义已在相应描述中陈述。因此,在本说明书中使用的术语将基于术语的含义与贯穿本说明书的描述一起被限定,而不是被术语的简单的名称被限定。

贯穿本说明书,当部分“包括”元件时,除非另外描述,否则还可包括另一元件,而不是排除其他元件的存在。

图1是示出描边设备的示例的配置的示图。

参照图1,描边设备100包括产生器110和映射器120。在图1中示出的描边设备100中,仅示出与本示例有关的组件。因此,除了图1中示出的组件之外,还可包括执行渲染所涉及的其他通用组件。此外,描边设备100可被实现为中央处理器(CPU)、图形处理单元(GPU)或硬件加速器(HWA)。

路径是构成作为渲染的目标的对象的元素。换言之,对象可包括闭合多边形或通过连接至少一条路径而形成的闭合路径。例如,路径可对应于线或曲线。图元是用于渲染的元素,表示对象或路径的具体单元。在一些情况下,路径和图元可表示相同的事物。

输入到描边设备100的路径数据包括与包括在路径中的多个顶点中的每个的坐标和用于通过组合顶点来配置路径的命令有关的信息。顶点可包括与路径的起始位置对应的顶点和与路径的结束位置对应的顶点,并且还可包括在曲线情况下用于控制中间位置的控制点。

例如,当从包括在帧中的像素之中的第一像素至第二像素的线被假设为路径时,顶点表示与第一像素和第二像素中的每个对应的点。因此,路径数据可包括与第一像素对应的第一顶点的坐标、与第二像素对应的第二顶点的坐标和从第一顶点至第二顶点绘制线的命令。

为此,参照路径数据,能够获取关于路径的位置和前进方向的信息以及关于组成该路径的每个顶点的坐标的信息。当假定路径为线时,还能够基于路径数据获取关于线的斜率的信息。此外,路径数据还可包括关于将针对每个像素被设置的颜色值的信息。

输入到描边设备100的描边数据包括描边宽度、描边颜色和背景颜色之中的至少一条信息。描边表示对与对象的轮廓对应的像素进行上色的处理。

由于对象由至少一条路径或至少一个图元组成,所以描边表示对与路径或图元对应的像素进行上色的处理。因此,当描边设备100接收描边数据时,在与描边宽度对应的像素中显示描边颜色。以下参照图2A至图2B描述描边。

图2A和图2B是示出描边和填充的示例的示图。

图2A示出由描边设备100对对象210执行的描边的示例,图2B示出由描边设备100对对象220执行的填充的示例。

参照图2A,对象210的轮廓被显示为一种颜色。换言之,在对象210的轮廓中示出特定颜色,使得对象210与背景区分。描边设备100以描边颜色显示与轮廓对应的图元。描边设备100通过将描边颜色输入到与图元对应的像素来执行描边。

同时,参照图2B,对象220的内部区域被显示为单一颜色。对象220的轮廓与背景是相同颜色。换言之,描边设备100通过将特定颜色输入到与对象220的内部区域对应的像素来执行填充。

返回参照图1,产生器110基于确定结果产生纹理。纹理是描边设备100用来执行描边的图像。当产生器110产生纹理时,映射器120将纹理映射到包括在特定区域中的像素。

产生器110使用路径数据确定是否将发生基于包括在路径中的图元的走样(aliasing)。例如,产生器110使用路径数据计算图元的斜率,并基于计算的斜率确定是否将发生走样。

例如,当确定将不发生走样时,产生器110使用描边颜色产生纹理。另一方面,当确定将发生走样时,产生器110使用描边颜色和通过向描边颜色施加渐变效果而得到的颜色(以下被称为“渐变颜色”)产生纹理。

换言之,产生器110针对将不发生走样的图元产生不具有颜色改变的纹理,并且针对将发生走样的图元产生具有颜色改变的纹理。

映射器120沿图元的边缘对纹理进行映射。例如,映射器120顺序地将产生的纹理映射到基于包括在图元中的每个像素而设置的特定区域。特定区域是基于包括在图元中的像素的具有与纹理的区域对应的区域的区域。

如上所述,针对将发生走样的图元产生具有颜色改变的纹理。具有颜色改变的纹理的部分是用于提供反走样效果的部分。因此,映射器120对具有颜色改变的纹理进行映射,使得已执行反走样和描边的结果被输出。换言之,由于描边设备100同时执行描边操作和反走样操作,因此描边设备100的操作所必需的计算量减少,使得能够以高速执行渲染。

以下参照图3详细描述描边设备100的操作的示例。

图3是示出由描边设备执行的执行路径渲染的方法的示例的流程图。

参照图3,执行路径渲染的方法包括在图1所示的描边设备100中顺序执行的操作。因此,以上提供的图1所示的描边设备100的描述即使在以下被省略,也可应用于图3中示出的执行路径渲染的方法。

在操作310,产生器110使用路径数据确定是否将发生基于包括在路径中的图元的走样。例如,产生器110基于图元的斜率确定是否将发生走样。

在操作320,产生器110基于确定的结果产生将被用于执行路径描边的纹理。产生器110根据是否将发生走样使用包括在描边数据中的信息产生纹理。可将产生的纹理存储在描边设备100的存储器(未示出)中。

在一个示例中,当确定将不发生走样时,产生器110使用描边颜色产生纹理。另一方面,当确定将发生走样时,产生器110使用描边颜色和渐变颜色产生纹理。

在另一示例中,当确定将不发生走样时,产生器110产生与描边宽度对应的纹理。另一方面,当确定将发生走样时,产生器110产生比描边宽度长的纹理。

以下参照图4至图6描述产生器110确定是否将发生走样并产生纹理的示例。

图4是示出产生器确定是否将发生走样并产生纹理的示例的流程图。

在操作410,产生器110确定图元的斜率是否具有值0或无穷大值。具有值0或无穷大值的图元的斜率指示不发生基于图元的走样。例如,假设图元为线,具有值0的线的斜率指示已经以水平方向绘制该线。此外,具有无穷大值的线的斜率指示已经以垂直方向绘制该线。水平方向和垂直方向表示在帧中绘制线的方向。

另一方面,既不具有值0也不具有无穷大值的图元的斜率指示将发生基于图元的走样。例如,假设图元为线,当在帧中已经以对角线方向绘制该线时,线的斜率既不具有值0也不具有无穷大值。

例如,产生器110参照路径数据计算图元的斜率。路径数据包括关于包括在路径中的多个顶点中的每个的坐标以及用于通过组合顶点来构造路径的命令的信息。因此,产生器110参照路径数据确定图元的起始顶点和结束顶点,并确定图元是线还是曲线。当图元是线时,产生器110计算线的斜率。简言之,参照路径数据,产生器110确定图元的斜率是具有值0还是无穷大值。当图元的斜率具有值0或无穷大值时,处理前往操作420。否则,处理前往操作430。以下描述操作420和430。

以下参照图5描述图元的斜率和走样的发生之间的相关性的示例。

图5是示出图元的斜率和走样的发生之间的相关性的示例的示图。

图5示出在帧510中绘制的对象520的示例。帧510由多个像素511组成。例如,可将1024×768个像素布置成矩阵形式来构成帧510。然而,包括在帧510中的像素的数量不限于1024×768个。

当描边设备100执行对象520的渲染时,针对与图元对应的像素设置颜色。因此,在帧510中输出已经过渲染的对象520的形状。

以下描述假设帧510的横向方向为水平方向并且帧510的纵向方向为垂直方向。然而,可根据观看帧510的方向而互换水平方向和垂直方向。

可以以水平方向或垂直方向绘制构成对象520的一些图元(诸如,图5的图元521)。因此,当针对包括在帧510中的多个像素511之中的对应于图元521的像素设置颜色时,在帧510中不失真地输出图元521的形状。

当帧510的水平方向被指定为x轴方向并且垂直方向被指定为y轴方向以设置坐标时,图元521的斜率为0。另一方面,当帧510的垂直方向被指定为x轴方向并且水平方向被指定为y轴方向以设置坐标时,图元521的斜率为无穷。换言之,图元521被形成为布置像素511的方向。因此,当针对与图元521对应的像素设置颜色时,图元521的形状被不失真地表示。

简言之,当图元521的斜率为0或无穷大时,在帧510中不失真地输出图元521。因此,不发生基于图元521的走样。

同时,构成对象520的其他图元(诸如,图5的图元522)可被绘制为对角线。如上所述,帧510中的像素511被布置成矩阵形式。因此,当针对与图元522对应的像素设置颜色时,在帧510中以变形的状态输出图元522的形状(图元522的轮廓)。

当使用帧510的水平方向和垂直方向作为轴来设置坐标时,图元522的斜率既不为0也不为无穷值。简言之,当图元522的斜率既不为0也不为无穷值时,图元522变形并且在帧510中被输出。因此,发生基于图元522的走样。

产生器110根据是否将发生走样产生不同的纹理。具体地,当确定在图元522中将发生走样时,产生器110使用描边颜色和渐变颜色产生纹理。因此,当映射器120将纹理映射到包括图元522的区域时,描边操作和反走样操作被同时执行。

由产生器110针对图元522产生的纹理可被映射到具有图元522中的所有像素作为起始点并且在垂直于图元522的方向上的存在于1/2的描边宽度处的点作为结束点的直线。这是因为由用户定义的描边宽度和路径描边颜色在同一图元中是不变的。例如,当由用户定义的描边宽度为10时,具有描边宽度5的纹理被产生并被映射到下述直线上:具有图元上的任意点作为起始点,在垂直于图元的两个方向上按照宽度5远离图元的点作为结束点。

当由用户定义的描边宽度为2W时,在一个方向上距垂直于图元的图元的宽度(即,“描边宽度”)为W。以下参照的描边宽度W表示在垂直于图元的一个方向上的宽度。

返回参照图4,在操作420,产生器110使用描边颜色产生第一纹理。例如,产生器110产生整个区域被设置为描边颜色的第一纹理。

产生器110参照描边数据检查描边宽度。然后,产生器110产生第一纹理,使得针对与描边宽度对应的像素设置描边颜色。换言之,产生第一纹理以使得针对包括在第一纹理中的所有像素设置相同颜色。以下参照图6描述第一纹理的示例。

图6是示出第一纹理的示例的示图。

在图6中,示出第一纹理610的示例。产生器110从描边数据获取关于描边颜色和描边宽度W的信息并针对与描边宽度W对应的像素设置描边颜色,从而产生第一纹理610。

第一纹理610的高度对应于单个像素的高度。换言之,第一纹理610具有按一条具有与描边宽度W对应的长度的线布置的像素的形式。例如,假设描边宽度为10并且描边颜色为黑色,产生器110将第一纹理610产生为从像素P至像素P1的10个像素被设置为黑色并被布置为一条线的形式。像素P是包括在图元中的像素,并且像素P1右边的区域对应于背景BG。

返回参照图4,在操作430,产生器使用描边颜色和渐变颜色产生第二纹理。例如,产生器110产生局部区域被设置为描边颜色并且剩余区域被设置为渐变颜色的第二纹理。

产生器110参照描边数据检查描边宽度。然后,产生器110产生第二纹理的局部区域以使得与描边宽度对应的像素被设置为描边颜色。此外,产生器110产生第二纹理的剩余区域以使得与特定宽度对应的像素被设置为渐变颜色。换言之,产生第二纹理以使得针对包括在第二纹理中的像素设置两个或更多个颜色。以下参照图7描述第二纹理的示例。

图7是示出第二纹理的示例的示图。

在图7中,示出第二纹理710的示例。产生器110从描边数据获取关于描边颜色和描边宽度W的信息。然后,产生器110针对与描边宽度W对应的像素设置描边颜色,并针对与反走样宽度W_AA对应的像素设置渐变颜色,从而产生第二纹理710。

第二纹理710的高度对应于单个像素的高度。换言之,第二纹理710具有按一条具有与描边宽度W和反走样宽度W_AA对应的长度的线来布置的像素的形式。例如,假设描边宽度为10,反走样宽度W_AA为1,描边颜色为黑色,背景颜色为白色,产生器110将从像素P至像素P1的10个分别的像素设置为黑色并将像素P1’设置为从黑色到白色逐渐改变的渐变颜色。然后,产生器110以被布置为一条线的11个像素的形式来产生第二纹理710。像素P是包括在图元中的像素,并且像素P1’右边的区域对应于背景BG。

由产生器110如以下参照图8和图9所描述的来计算反走样宽度W_AA。

图8是示出产生器确定是否将出现走样并产生纹理的另一示例的流程图。

图8的操作810对应于图4的操作410。因此,以下省略操作810的详细描述。

在操作820,产生器110产生与描边宽度对应的第一纹理。

在操作830,产生器110产生比描边宽度长的第二纹理。在一个示例中,产生器110基于与图元的斜率对应的角度和描边宽度来产生第二纹理。换言之,产生器110根据与图元的斜率对应的角度和描边宽度分别计算将设置描边颜色的区域(与图7的W对应的区域)的宽度和将设置渐变颜色的区域(与图7的W_AA对应的区域)的宽度。以下参照图9描述产生器110基于与图元的斜率对应的角度和描边宽度产生第二纹理的示例。

图9是示出产生器产生第二纹理的示例的示图。

在图9中,示出图元910的示例和第二纹理920的示例。产生器110基于与图元910的斜率对应的角度θ和描边宽度W计算第一宽度L和第二宽度L_AA。第一宽度L表示将设置描边颜色的区域的宽度,第二宽度L_AA表示将设置渐变颜色的区域的宽度。

在一个示例中,产生器110根据以下等式1计算第一宽度L。

在等式1中,L表示第一宽度,W表示描边宽度,θ表示与图元910的斜率对应的角度,90-θ是以度数表示的角度θ的余角。

此外,产生器110根据以下等式2计算第二宽度L_AA。

在等式2中,L_AA表示第二宽度,W_AA表示反走样宽度,L表示第一宽度,W表示描边宽度。

一般地,反走样宽度W_AA可被设置为1。假设反走样宽度W_AA为1,将等式1代入等式2得到以下等式3。

参照上述等式1至等式3,随着图元910的斜率变小(随着θ变小),第一宽度L变大,并且第二宽度L_AA也与第一宽度L成比例变大。在等式3中,90-θ是以度数表示的角度θ的余角。

产生器110根据等式1和等式3计算第一宽度L和第二宽度L_AA,从描边数据获取关于描边颜色的信息,并基于第一宽度L、第二宽度L_AA和关于描边颜色的信息产生第二纹理920。

对象可由不同路径或不同图元的组合构成。因此,可产生不同图元重叠的区域(以下被称为“重叠区域”)。在一个示例中,除了上述第一纹理和第二纹理之外,产生器110还产生将被映射到重叠区域的第三纹理,并产生将被映射到图元端部的第四纹理。以下参照图10和图11描述产生器110分别产生第三纹理和第四纹理的示例。

图10是示出产生器产生第三纹理的示例的示图。

在图10中,示出由四个不同图元1011、1012、1013和1014形成的对象1020的示例。图10的对象1020被示出为通过组合四个不同图元1011、1012、1013和1014并对图元1011、1012、1013和1014执行描边操作而产生的矩形。然而,对象的形状不限于矩形,可根据多个图元的组合产生具有不同形状的对象。

当对图元1011、1012、1013和1014执行描边操作时,产生四个不同的重叠区域1021、1022、1023和1024。除了上述第一纹理或第二纹理之外,产生器110还产生将被映射到重叠区域1021、1022、1023和1024中的每个的第三纹理1030。

例如,产生器110将第三纹理1030产生为圆形。如同第二纹理一样,第三纹理1030被产生为描边颜色和渐变颜色的组合。当第三纹理1030为圆形时,第三纹理1030的轮廓不是被仅被布置为帧的水平或垂直方向的像素所实现。换言之,当第三纹理1030为圆形时,将发生基于具有与第三纹理1030对应的形状的图元的走样。

因此,产生器110基于描边颜色和渐变颜色产生第三纹理1030。产生器110将描边颜色施加到包括在距中心点1031的半径r的区域。半径r等于以上结合图5参照的由用户定义的描边宽度2W。此外,产生器110将渐变颜色施加到与施加描边颜色的区域相邻的特定区域。基于反走样宽度W_AA确定特定区域。产生的第三纹理1030可被存储在描边设备100的存储器(未示出)中。

以下描述的映射器120将第三纹理1030映射到重叠区域1021、1022、1023和1024中的每个。例如,映射器120通过将第三纹理1030的中心点1031的坐标(x,y)设置为通过对图元1011和1014执行描边操作而形成的重叠区域1021的内角处的点1051来将第三纹理1030的一部分(例如,第三纹理1030的四分之一部分)映射到重叠区域1021。用于产生将被映射到通过对两个图元执行的描边操作而形成的重叠区域的第三纹理1030的一部分(例如,1041)的角度等于由这两个图元形成的外角(180度-内角)。例如,两个图元1011和1014的外角为90度,因此第三纹理1030的一部分(90度,即,四分之一部分)被映射到重叠区域1021。因此,输出第三纹理1030的一部分被映射到重叠区域1021的结果1041。

图11是示出产生器产生第四纹理的示例的示图。

在图11中,示出由图元1110形成的对象1120的示例。图11的对象1120被示出为通过对图元1110执行描边操作而产生的线。

当对图元1110执行描边操作时,产生两个端部区域1121和1122。除了上述第一纹理和第二纹理之外,产生器110还产生将被映射到端部区域1121和1122中的每个的第四纹理1130。

例如,产生器110将第四纹理1130产生为圆形。在这个示例中,第四纹理1130与图10的第三纹理1030相同,除了在第四纹理1130中距施加描边颜色的区域的中心点1131的半径r等于图11所示的描边宽度W而不是图10所示的由用户定义的描边宽度2W以外。因此,将不描述产生器110产生第四纹理1130的详细过程。产生的第四纹理1130可被存储在描边设备100的存储器(未示出)中。

以下描述的映射器120将第四纹理1130映射到端部区域1121和1122中的每个。例如,映射器120通过将第四纹理1130的中心点1131的坐标(x,y)设置为图元1110的端点来将第四纹理1130的一部分(例如,第四纹理1130的一半部分)映射到端部区域1121。因此,输出第四纹理1130的一部分被映射到端部区域1121的结果1141。

返回参照图3,在操作330,映射器120沿图元的边缘对纹理进行映射。映射器120将纹理顺序地映射到基于包括在图元中的每个像素而设置的特定区域。

具体地,映射器120基于图元的斜率确定方向,并且在确定的方向上沿图元的边缘对纹理进行映射。在一个示例中,当图元的斜率具有值0或无穷大值时,映射器120在垂直于图元的方向上对纹理进行映射。在另一示例中,当图元的斜率的绝对值大于0并小于1时,映射器120在帧的水平方向上对纹理进行映射。在另一示例中,当图元的斜率的绝对值等于或大于1且不为无穷大时,映射器120在帧的垂直方向上对纹理进行映射。

以下参照图12至图13B描述映射器120沿图元的边缘对纹理进行映射的示例。

图12是示出映射器的操作的示例的示图。

在图12中,示出图元1210的示例。在图12中,假设图元1210是线,并且图元1210的斜率具有无穷大值(即,以帧的垂直方向绘制图元1210)。

当图元1210的斜率具有值0或无穷大值时,映射器120在垂直于图元1210的方向上对纹理1220和1230进行映射。在图12中,图元1210的斜率具有无穷大值,因此映射器120在帧的水平方向上对纹理1220和1230进行映射。

映射器120将纹理1220和1230顺序地映射到基于包括在图元1210中的像素1211、1212、1213、1214和1215而设置的特定区域。可选地,映射器120针对图元1210中的各个像素1211、1212、1213、1214和1215的位置将相同的纹理映射到彼此对称的特定区域。特定区域表示与纹理1220和1230的完整宽度对应的区域。在第一纹理的情况下,特定区域表示与描边宽度W对应的区域,在第二纹理的情况下,特定区域表示与第一宽度L和第二宽度L_AA的总和对应的区域。由于描边宽度在一个图元的特定区域中是不变的,所以可将相同的纹理重复地映射到特定区域。

参照图12,映射器120针对像素1212在垂直于图元1210的方向(即,帧的水平方向)上对纹理1220进行映射。之后,映射器120针对像素1213在垂直于图元1210的方向上对纹理1230进行映射。以这种方式,映射器120将纹理顺序地映射到直至像素1214的像素。此外,映射器120根据参照图11描述的方法将纹理映射到图元1210的端部像素1211和1215二者。

图13A和图13B是示出映射器的操作的其他示例的示图。

在图13A和图13B中,示出图元1310和1330的示例。图13A中示出的图元1310的斜率具有大于0且小于1的绝对值,图13B中示出的图元1330的斜率具有大于1的绝对值。

参照图13A,当图元1310的斜率的绝对值大于0且小于1时,映射器120在帧的垂直方向上对纹理进行映射。映射器120在帧的垂直方向上将纹理1322映射到包括在图元1310中的除了图元1310的两个端部像素之外的像素。此外,映射器120根据参照图11描述的方法将纹理1321映射到图元1310的两个端部像素。

参照图13B,当图元1330的斜率的绝对值大于1时,映射器120在帧的水平方向上对纹理进行映射。映射器120在帧的水平方向上将纹理1342映射到包括在图元1330中的除了图元1330的两个端部像素之外的像素。此外,映射器120根据参照图11描述的方法将纹理1341映射到图元1330的两个端部像素。

根据以上描述,描边设备100根据图元的特性(例如,图元的斜率)适应性地产生纹理并存储纹理。此外,通过将存储在具有高处理速度的本地存储器中的纹理映射到图元,描边设备100在短时间内执行描边操作。此外,通过将产生的纹理映射到图元上,描边设备100同时执行反走样操作和描边操作。

图14是示出描边设备的另一示例的配置的示图。

参照图14,描边设备101不仅包括产生器110和映射器120,还包括划分器130。在图14的描边设备101中,仅示出与本示例有关的组件。因此,除了图14中示出的组件之外,执行渲染所涉及的其他通用组件也可包括在内。

图14所示的描边设备101的产生器110和映射器120的操作与以上参照图1至图13B描述的描边设备100的产生器110和映射器120的操作相同。因此,以下省略产生器110和映射器120的具体描述。

划分器130将对应于曲线的路径划分为多个图元。例如,划分器130使用德卡斯特里奥算法(De Casteljau's algorithm)将曲线划分为多个图元。每个划分的图元表示线。

如以上参照图1所述,曲线可被包括在路径中。当路径为曲线时,划分器130将曲线划分为多个图元,并且产生器110针对每个图元产生纹理。划分器130可产生线图元以接近曲线。换言之,由划分器130产生的线图元的集可具有与曲线类似的形状。以下参照图15A至图15D描述划分器130的操作的示例。

图15A至图15D是示出划分器的操作的示例的示图。

在图15A中,示出作为曲线的路径1510的示例。当路径1510为曲线时,路径数据包括关于用于表示路径1510的三个控制点V1、V2和V3的信息。换言之,描边设备100可基于控制点V1、V2和V3来配置路径1510。

同时,通过组合控制点V1、V2和V3,可产生两条线。换言之,可产生连接控制点V1和控制点V2的第一线以及连接控制点V2和控制点V3的第二线。如图15A所示,彼此连接的第一线和第二线的形状与路径1510的形状明显不同。

在图15B中,示出路径1510被划分为两条子路径1511和1512的示例。换言之,图15B示出一条曲线被划分为两条曲线的示例。例如,可基于德卡斯特里奥算法来划分路径1510。

如以上参照图15A所述,第一子路径1511可由三个控制点V1、V4和V5组成,第二子路径1512可由三个控制点V5、V6和V3组成。因此,通过组合子路径1511和1512的控制点V1、V4、V5、V6和V3,可产生四条线。

当将图15A和图15B相互比较时,图15B中所示的彼此连接的四条线的形状比图15A中彼此连接的两条线的形状更类似于路径1510的形状。图15C示出路径1510被划分为四条子路径的示例,图15D示出路径1510被划分为八条子路径的示例。简言之,随着路径1510的划分数量增加,已使用控制点产生的连接线的形状逐渐变得更类似于路径1510的形状。

划分器130将路径1510划分为多条子路径。然后,划分器130通过组合与每条子路径对应的控制点来构造多个图元(即,线)。因此,划分器130可将路径1510划分为多个图元。可通过描边设备101的计算来确定划分器130划分路径1510的次数,并且可通过用户的输入来改变之前确定的次数。

图16和图17是示出执行路径描边的方法的示例的流程图。

参照图16和图17,执行路径描边的方法的示例包括在图1和图14中示出的描边设备100和101中执行的操作。因此,以上提供的图1和图14所示的描边设备100和101的描述即使在以下被省略,也可应用于图16和图17中示出的执行路径描边的方法。

参照图16,在操作1810,产生器110从外部设备接收路径数据。路径数据包括关于包括在路径中的多个顶点中的每个的坐标和用于通过组合顶点来构造路径的命令的信息。此外,产生器110从外部设备接收描边数据。描边数据可包括描边宽度、描边颜色和背景颜色之中的至少一条信息。

在操作1820,产生器110确定是否存在预产生的纹理。例如,产生器110可通过检查在纹理单元中是否存储纹理来确定是否存在预产生的纹理。当存在预产生的纹理时,处理前往操作1830。否则,处理前往操作1840。

在操作1830,产生器110从纹理单元读出纹理。然后,产生器110将读出的纹理发送到映射器120。可选地,产生器110可请求映射器120读出纹理,并且映射器120可根据请求读出来自纹理单元的纹理。

在操作1840,产生器110产生纹理。例如,产生器110可确定是否将发生基于图元的走样,并基于确定的结果产生将用于执行路径描边的纹理。产生器110可使用路径数据计算图元的斜率,并基于计算的斜率确定是否将发生走样。然后,产生器可根据是否将发生走样适应性地产生纹理。以上参照图6至图11描述了产生器110产生纹理的示例。

在操作1850,产生器110将产生的纹理存储在纹理单元中。

针对包括在图元中的每个像素执行操作1860至操作1885。换言之,映射器120对包括在图元中的每个像素执行操作1860至操作1885。

在操作1860,映射器120确定图元的斜率是否具有值0或无穷大值。例如,映射器120可使用由产生器110计算的图元的斜率来执行操作1860。当图元的斜率具有值0或无穷大值时,处理前往操作1881。否则,处理前往操作1870。

在操作1870,映射器120确定图元的斜率的绝对值是否大于0且小于1。当图元的斜率的绝对值大于0且小于1时,处理前往操作1883。否则,处理前往操作1885。

在操作1881,映射器120在垂直于图元的方向上对纹理进行映射。以上参照图12描述了映射器120在垂直于图元的方向上对纹理进行映射的示例。

在操作1883,映射器120在水平方向上对纹理进行映射。水平方向是帧的水平方向。以上参照图13B描述了映射器120在水平方向上对纹理进行映射的示例。

在操作1885,映射器120在垂直方向上对纹理进行映射。垂直方向是帧的垂直方向。以上参照图13A描述了映射器120在垂直方向上对纹理进行映射的示例。

当图16中示出的流程图和图17中示出的流程图相互比较时,图16示出在操作1850将产生的纹理存储在纹理单元中,而图17示出在操作1950将产生的纹理存储在CPU的高速缓存中。在图17中示出的操作1910至操作1985之中,除了操作1950之外的操作与图16中示出的除了操作1850之外的操作1810至操作1885相同。

图18至图21是示出在CPU或GPU中实现执行路径描边的方法的示例的示图。

在图18至图21中,示出CPU 2000以及GPU 2100和2300。例如,CPU2000和GPU 2100或2300可通过图形语言(GL)应用编程接口(API)彼此通信。具体地,图21所示的GPU 2300与图18至图20所示的GPU 2100区别在于,GPU 2300还包括描边单元2310。图18至图21所示的CPU 2000可被实现为HWA。

包括在GPU 2100中的组件通常操作的示例如下。

输入装配器2110从存储器(内存)读出关于构成路径的至少一个顶点的数据,并将读出的数据发送到顶点着色器2120。顶点着色器2120针对该顶点执行由用户写入的顶点着色器程序。顶点着色器程序表示产生一维(1D)纹理中的所有像素的坐标的程序。已经产生坐标的像素被传送到片元着色器2160并被用作由用户定义的片元着色器程序的输入。

片元着色器2160产生纹理并将产生的纹理存储在纹理单元2170中。此外,片元着色器2160针对包括在帧中的每个像素设置颜色值。片元着色器2160可使用存储在纹理单元2170中的纹理针对每个像素设置颜色值。

渲染输出单元2180记录当片元着色器2160在缓冲器(未示出)中操作时产生的数据(例如,关于像素的颜色的信息)。换言之,片元着色器2160确定包括在帧中的每个像素的颜色,渲染输出单元2180合并关于像素的颜色的信息并在缓冲器(未示出)中记录合并的信息。

由于图元装配器2130、镶嵌器(tessellator)2140和光栅化器2150执行如传统GPU中的相同组件的相同功能,因此它们的详细描述已被省略。

参照图18,CPU或HWA 2000请求GPU 2100使用着色器程序产生纹理,并且GPU 2100产生纹理。换言之,在由描边设备100或101执行的操作之中,可由GPU 2100执行纹理产生操作,并且可由CPU或HWA 2000执行其他操作。

CPU或HWA 2000使用存储在本地存储器2010中的路径数据确定是否将出现基于图元的走样。当路径为曲线时,CPU或HWA 2000通过对曲线进行划分(3010)产生图元,并确定是否将出现走样。此外,CPU或HWA2000请求GPU 2100产生纹理,从GPU 2100接收纹理,并将纹理存储在本地存储器2010中(3020)。GPU 2100的片元着色器2160产生纹理。

此外,CPU或HWA2000产生图元的起始顶点和结束顶点,并将关于起始顶点和结束顶点的信息存储在本地存储器2010中(3030)。然后,CPU或HWA2000使用纹理和关于存储在本地存储器中的起始顶点和结束顶点的信息对纹理进行映射,从而执行描边操作(3040)。

当图18和图19相互比较时,图19所示的CPU或HWA2000与图18所示的CPU或HWA2000的区别在于它自己产生纹理并将产生的纹理发送到GPU 2100(3050)。GPU 2100将接收的纹理存储在纹理单元2170中。

一般地,纹理单元2170包括高速缓冲存储器。因此,当在描边操作期间重复使用纹理时,可高速读出该纹理。

当图18和图20相互比较时,图20所示的CPU或HWA 2000与图18所示的CPU或HWA 2000的区别在于,它请求GPU 2100产生纹理并且不接收产生的纹理(3060)。GPU 2100的片元着色器2160产生纹理并将产生的纹理存储在纹理单元2170中。

当当图18和图21相互比较时,图21所示的CPU或HWA 2000与图18所示的CPU或HWA 2000的区别在于,它请求GPU 2300执行由描边设备100和101执行的所有操作。

GPU 2300使用路径数据确定是否将出现基于图元的走样。当路径为曲线时,GPU 2300通过对曲线进行划分产生图元,并确定是否将出现走样。此外,GPU 2300产生将用于执行路径描边的纹理,并沿图元的边缘对纹理进行映射。包括在GPU 2300中的描边单元2310沿图元的边缘对纹理进行映射。

根据上述示例,描边设备100和101使用预产生的纹理执行描边操作。因此,描边操作所需的计算量减小,并且可在短时间内执行描边操作。

此外,描边设备100和101基于是否将发生走样适应性地产生纹理,以使得描边操作和反走样操作可被同时执行。

由硬件组件实现执行这里描述的操作的以下组件:图1中的描边设备100、产生器110、映射器120;图14中的描边设备101、产生器110、映射器120和划分器130;图18至图21中的CPU或HWA 2000和本地存储器2010;图18至图20中的GPU 2100;图21中的GPU 2300;图18至图21中的输入装配器、顶点着色器、图元装配器、镶嵌器、光栅化器、片元着色器、纹理单元和渲染输出单元;图21中的描边单元2310。硬件组件的示例包括控制器、传感器、产生器、驱动器、存储器、比较器、算术逻辑单元、加法器、减法器、乘法器、除法器、积分器和本领域普通技术人员公知的任何其他电子组件。在一个示例中,硬件组件由计算硬件(例如,由一个或更多个处理器或计算机)实现。处理器或计算机由一个或更多个处理元件(诸如逻辑门阵列、控制器和算术逻辑单元、数字信号处理器、微型计算机、可编程逻辑控制器、现场可编程门阵列、可编程逻辑阵列、微处理器)或本领域普通技术人员公知的任何其他装置或装置的组合实现,这些装置或装置的组合能够以限定的方式响应并执行指令以得到期望的结果。在一个示例中,处理器或计算机包括或连接到存储被处理器或计算机执行的指令或软件的一个或更多个存储器。由处理器或计算机实现的硬件组件执行指令或软件(诸如操作系统(OS)和在OS上运行以执行这里描述的操作的一个或更多个软件应用)。硬件组件还响应于指令或软件的执行来访问、操控、处理、创建和存储数据。为简单起见,在这里描述的示例的描述中使用单数术语“处理器”或“计算机”,但是在其他示例中,使用多个处理器或计算机,或者一个处理器或计算机包括多个处理元件或多种类型的处理元件,或者应用以上两种形式。在一个示例中,硬件组件包括多个处理器,而在另一示例中,硬件组件包括一个处理器和一个控制器。硬件组件具有不同的处理配置中的任意一个或多个,所述不同处理配置的示例包括单个处理器、独立处理器、并行处理器、单指令单数据(SISD)多处理、单指令多数据(SIMD)多处理、多指令单数据(MISD)多处理、以及多指令多数据(MIMD)多处理。

图3、图4、图8、图16和图17中示出的执行这里描述的操作的方法由以上描述的执行指令或软件的计算硬件(例如,由一个或更多个处理器或计算机)来执行,以执行这里描述的操作。

控制处理器或计算机以实现硬件组件并执行如上所述的方法的指令或软件被写为计算机程序、代码段、指令或它们的任意组合,用于单独或共同指示或配置处理器或者计算机作为机器或专用计算机操作,以执行由硬件组件执行的操作和如上所述的方法。在一个示例中,指令或软件包括被处理器或计算机直接执行的机器代码(诸如由编译器产生的机器代码)。在另一示例中,指令或软件包括被处理器或计算机使用解释器执行的高级代码。本领域普通技术程序员能够容易地基于附图中示出的框图和流程图以及说明书中的对应描述来编写指令或软件,这些框图和流程图以及说明书中的对应描述公开了用于执行由硬件组件执行的操作和如上所述的方法的算法。

控制处理器或计算机以实现硬件组件并执行如上所述的方法的指令或软件、以及任何关联数据、数据文件和数据结构被记录、存储或固定在一个或更多个非暂时性计算机可读存储介质中或介质上。非暂时性计算机可读存储介质的示例包括只读存储器(ROM)、随机存取存储器(RAM)、闪存、CD-ROM、CD-R、CD+R、CD-RW、CD+RW、DVD-ROM、DVD-R、DVD+R、DVD-RW、DVD+RW、DVD-RAM、BD-ROM、BD-R、BD-R LTH、BD-RE、磁带、软盘、磁光数据存储装置、光学数据存储装置、硬盘、固态盘以及本领域普通技术人员公知的任何装置,所述本领域普通技术人员公知的任何装置能够以非暂时性方式存储指令或软件以及任何关联数据、数据文件和数据结构,并能向处理器或计算机提供指令或软件以及任何关联数据、数据文件和数据结构,以使处理器或计算机能执行指令。在一个示例中,指令或软件以及任何关联数据、数据文件和数据结构被分布于联网的计算机系统上,以使指令和软件以及任何关联数据、数据文件和数据结构被处理器或计算机以分布方式存储、访问和执行。

虽然本公开包括具体示例,但是本领域普通技术人员将清楚,在不脱离权利要求及其等同物的精神和范围的情况下,可以对这些示例进行形式和细节上的各种改变。这里描述的示例被认为仅具有描述性意义,而不用于限制的目的。每个示例中的特征或方面的描述将被认为可适用于其他示例中的类似特征或方面。如果以不同的次序执行描述的技术和/或如果描述的系统、架构、装置或电路中的组件以不同的方式组合和/或被其他组件及其等同物替换或补充,则可得到合适的结果。因此,本公开的范围不是由具体实施方式限定,而是由权利要求及其等同物限定,并且权利要求及其等同物的范围内的所有变化将被解释为包括在本公开中。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1