direct2d - Direct2D:在绘制之前检查图像是否在可见区域之外?
问题描述
如果图像最终会超出可见区域,那么省略对 ID2D1HwndRenderTarget::DrawBitmap() 的调用是否是一个合理的优化?如果我在应用程序中实现检查逻辑会消耗一些性能,那么如果 D2D 做的第一件事是进行相同的检查,那么我宁愿不这样做。
解决方案
我对我的应用程序进行了测试,该应用程序使用 Direct2D(并附加了 renderdoc)呈现了一些 UI 部分,似乎有点随机。
我使用位图画笔(应该等同于您的 DrawBitmap 调用)呈现矩形、文本、路径几何(贝塞尔曲线)和矩形的混合。
然后我捕获所有这些对象可见的帧,另一个平移我的 UI(使用变换),使对象不可见。
从那里可以检查是否绘制了什么:
- 文本总是被剔除
- 不剔除纯色矩形
- 大多数时候路径几何被剔除,但有时不会。
- 永远不会剔除带有位图画笔的矩形
因此,Direct2D 似乎会根据您计划绘制的元素类型做出不同的决定。
由于矩形很容易成批并且绘制起来很便宜,因此似乎无论如何都只是绘制它们。
位图矩形和文本需要更多的工作,所以看起来它们被有效地剔除。
路径几何正在寻找取决于几何被细分为多少多边形(我有一条路径转换为 26 个图元但未被剔除,另一条转换为 120 并被剔除)。
因此,您可以相信 Direct2D 会执行该优化,但我会亲自实施快速矩形到矩形检查以防万一(它不会损害您的性能,因为它是一个非常简单的操作)。
推荐阅读
- if-statement - Transact SQL - 选择语句中的枢轴
- javascript - 带有苗条的简单全屏 Mapbox 地图
- jinja2 - jinja2:如何仅加载包含(不渲染标签)?
- python - 在更改分隔符时保持数据中的逗号
- vba - 基于 CALL 命令脚本的 VBA 进度条
- c# - 将 Outlook 项目传递给 C# 中 Ribbon xml 的 onAction 属性中提到的函数
- php - 单击链接时将隐藏的 ID 传递到下一页
- javascript - 在数组Javascript中的元素中插入新元素
- statistics - 将数据集划分为具有一致内部行为的段,使用分段算法和度量来保持一致性
- r - UseMethod 中的错误:没有适用于 R-Shiny 中“响应”类对象的“内容”方法