Direct2D渲染CPU使用率
Direct2D rendering CPU usage
我有一个用C++
编写的Direct2D
本机应用程序。渲染函数每秒调用约60次,其目标是显示约1000个图形几何图形(基本上是椭圆)。以下是渲染函数的代码:
void Render()
{
pRenderTarget->BeginDraw();
pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::Black));
const auto transform = D2D1::Matrix3x2F::Identity();
pRenderTarget->SetTransform(transform);
// draw all entities
for (auto& e : entities)
{
if (e)
e->Draw(pRenderTarget, transform);
}
pRenderTarget->EndDraw();
}
void Entity::Draw(ID2D1RenderTarget* pTarget, const D2D1_MATRIX_3X2_F& worldTransform) const
{
pTarget->SetTransform(transform * worldTransform);
pTarget->FillEllipse(ellipse, pBrush);
pTarget->SetTransform(worldTransform);
}
笔刷、椭圆和变换都是在一开始创建的(实体构造)。
我的问题是,如果有这些参数,我的CPU总是在8/9%左右,这是否正常。我本来期望一个接近0的值(如果我对渲染函数进行注释,则CPU使用率将降至0,例如,即使总是调用Update函数)。
如果您的几何体是静态的(不会每帧都发生变化),请查看使用几何体实现。这将大大降低渲染大量基元的CPU成本。如果你需要更高的性能,你也可以尝试使用精灵批次;这可能是渲染大量形状的最快方法,前提是您可以将形状存储在位图中,并且不需要逐基元抗锯齿。
在我的类似测试应用程序中。我通过计时器每20毫秒调用一次重新绘制。在绘制事件中,我用线性渐变笔刷和位图绘制了1000个矩形。
结果:每帧绘制时间超过20ms,CPU使用率超过10-13%。
答案:我认为这很正常。
相关文章:
- 编写一个函数以使用 n 百分比的 CPU 使用率
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- 如何降低应用程序的 CPU 使用率?
- 如何以编程方式获取任务管理器进程CPU使用率(不是PerfMon API)
- 一段时间后 CPU 使用率高
- 高CPU使用率,在API桌面复制中获取帧之间具有不同的超时间隔
- GetDC ReleaseDC 在特定上下文中的高 CPU 使用率
- 从 C++11 代码中获取系统内存和 CPU 使用率
- 在 Visual Studio 中记录 CPU 使用率
- C++如何允许等待而不会过多的 CPU 使用率
- Qtcreator 冻结,CPU 使用率为 100%
- 使用 fgets() c++ 读取大型 txt 文件时的 CPU 使用率为 99%
- OpenCL 的 CPU 使用率意外
- Loop Wregex始终返回false和高CPU使用率约50%
- 简单的C++SFML程序高CPU使用率
- 使用 PID 获取内存和 CPU 使用率
- 如何在TCP端口上实时传输数据期间减少CPU使用率
- WinAPI:在WM_PAINT省略 BeginPaint 和 EndPaint 会导致 100% 的 CPU 使用率
- 当CPU使用率高时,OpenCV会堆积内存吗
- 如何在运行SDL程序时降低CPU使用率