如何解决Direct2D:在绘制之前检查图像是否在可见区域之外?
如果图像最终超出可见区域,则省略对 ID2D1Hwndrendertarget::DrawBitmap() 的调用是否是合理的优化?如果我在应用程序中实现检查逻辑会消耗一些性能,那么如果 D2D 做的第一件事就是做同样的检查,那么我宁愿不这样做。
解决方法
我对我的应用程序进行了测试,该应用程序使用 Direct2D(并附加了 renderdoc)渲染了一些 UI 部分,似乎有点随机。
我使用位图画笔(应该相当于您的 DrawBitmap 调用)渲染了矩形、文本、路径几何图形(贝塞尔曲线)和矩形的混合。
然后我捕获一个帧,其中所有这些对象都可见,另一个帧平移我的 UI(使用变换),因此对象不可见。
从那里可以检查是否绘制了什么:
- 文本总是被剔除
- 纯色矩形不会被剔除
- 大多数情况下都会剔除路径几何图形,但有时不会。
- 永远不会剔除带有位图画笔的矩形
因此,Direct2D 似乎正在根据您计划绘制的元素类型做出不同的决定。
由于矩形易于批量化且绘制成本低,因此它们似乎只是随便绘制的。
位图矩形和文本需要更多的工作,所以看起来它们被有效地剔除。
路径几何体希望取决于几何体细分为多少个多边形(我有一条路径转换为 26 个基元但没有被剔除,另一个转换为 120 并被剔除)。
因此,您可以相信 Direct2D 会执行该优化,但我个人会实施一个快速的矩形到矩形检查以防万一(它不会影响您的性能,因为它的操作非常简单)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。