Direct2D 中层概述

http://msdn.microsoft.com/zh-cn/library/windows/apps/dd756654.aspx

什么是层?

层由 ID2D1Layer 对象表示,它使应用程序可以操作一组绘制操作。可通过将层“压入”呈现器目标的方式来使用层。呈现器目标执行的后续绘制操作将被指引到压入的层。在处理完该层之后,可从呈现器目标“弹出”该层,这可将该层的内容重新复合到呈现器目标中。

与画笔类似,层是由呈现器目标创建的与设备有关的资源。只要呈现器目标所处的资源域与包含创建层的呈现器目标的资源域相同,便可以在这些呈现器目标上使用层。然而,一个层资源一次只能由一个呈现目标使用。有关资源的更多信息,请参见资源概述

虽然层提供了一种用于产生有趣效果的强大呈现方法,但在应用程序中过多使用层可能会对其性能产生负面影响,因为管理层和层资源会产生各种成本。例如,填充或清除层然后重新混合便会产生成本,尤其是在较高端硬件上。因此,管理层资源存在成本问题。如果经常重新分配这些资源,则所形成的 GPU 延迟会成为最显著的问题。在设计应用程序时,请尽可能重用层资源

几何蒙板

几何蒙板是由 ID2D1Geometry 对象定义的剪辑或图样,用于在呈现器目标绘制层时对层进行蒙盖。可以使用 D2D1_LAYER_PARAMETERS 结构的 geometricMask 字段将结果蒙盖到几何对象上。例如,如果您要显示由印刷体字母“A”蒙盖的图像,则可以先创建表示印刷体字母“A”的几何对象,然后使用该几何对象作为层的几何蒙板。随后,您可以在压入层后绘制图像。弹出层会使图像剪辑为印刷体字母“A”形状。

下面的示例演示如何创建包含山地形状的 ID2D1PathGeometry,然后将该路径几何对象传递给 PushLayer。该示例随后绘制位图和正方形。如果层中只有一个位图要呈现,则使用带固定位图画笔的 FillGeometry 可提高效率。

层的替代方案

如前所述,层数过多可能会对应用程序的性能产生负面影响。为了提高性能,请尽可能避免使用层;而是改用其替代方案。下面的代码示例演示如何使用 PushAxisAlignedClipPopAxisAlignedClip 剪辑一个区域,以此作为使用带内容边界的层的替代方案。

在这个过程中, 所有的操作 被限定在了指定的区域。即使是清空呈现器为白色, 也只会影响该区域

 Direct2D 交流群:254876370

 

posted @ 2012-09-28 14:07  sinian  阅读(328)  评论(0编辑  收藏  举报