Direct2D渲染CPU使用率

Direct2D rendering CPU usage

本文关键字:使用率 CPU 渲染 Direct2D      更新时间:2023-10-16

我有一个用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%。

答案:我认为这很正常。