微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Direct2D:在绘制之前检查图像是否在可见区域之外?

如何解决Direct2D:在绘制之前检查图像是否在可见区域之外?

如果图像最终超出可见区域,则省略对 ID2D1Hwndrendertarget::DrawBitmap() 的调用是否是合理的优化?如果我在应用程序中实现检查逻辑会消耗一些性能,那么如果 D2D 做的第一件事就是做同样的检查,那么我宁愿不这样做。

解决方法

我对我的应用程序进行了测试,该应用程序使用 Direct2D(并附加了 renderdoc)渲染了一些 UI 部分,似乎有点随机。

我使用位图画笔(应该相当于您的 DrawBitmap 调用)渲染了矩形、文本、路径几何图形(贝塞尔曲线)和矩形的混合。

然后我捕获一个帧,其中所有这些对象都可见,另一个帧平移我的 UI(使用变换),因此对象不可见。

从那里可以检查是否绘制了什么:

  • 文本总是被剔除
  • 纯色矩形不会被剔除
  • 大多数情况下都会剔除路径几何图形,但有时不会。
  • 永远不会剔除带有位图画笔的矩形

因此,Direct2D 似乎正在根据您计划绘制的元素类型做出不同的决定。

由于矩形易于批量化且绘制成本低,因此它们似乎只是随便绘制的。

位图矩形和文本需要更多的工作,所以看起来它们被有效地剔除。

路径几何体希望取决于几何体细分为多少个多边形(我有一条路径转换为 ​​26 个基元但没有被剔除,另一个转换为 120 并被剔除)。

因此,您可以相信 Direct2D 会执行该优化,但我个人会实施一个快速的矩形到矩形检查以防万一(它不会影响您的性能,因为它的操作非常简单)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。