Direct2D渲染CPU使用率

时间:2016-04-02 09:38:19

标签: c++ performance directx rendering direct2d

我有一个用Direct2D编写的C++本机应用程序。渲染函数每秒调用约60次,目的是显示大约1,000个图形几何(基本上是椭圆)。以下是渲染函数的代码:

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);
}

在开头创建画笔,椭圆和变换(entity construcor)。

我的问题是,使用这些参数是否正常,我的CPU总是大约8/9%。我预计值接近于0(如果我对渲染函数进行注释,CPU使用率会降至0,即使总是调用Update函数)。

2 个答案:

答案 0 :(得分:1)

如果您的几何图形是静态的(不会每帧都更改),请查看使用geometry realizations。这应该大大降低渲染大量基元的CPU成本。如果您需要更高的性能,还可以尝试使用sprite batch;这可能是渲染大量形状的最快方法,前提是您可以将形状存储在位图中,而不需要每个基元的抗锯齿。

答案 1 :(得分:0)

在我的类似测试应用程序中。我通过计时器每20毫秒调用一次重绘。在paint事件中,我使用线性渐变画笔和位图绘制1000个矩形。

结果:每帧超过20ms,CPU使用率超过10-13%。

回答:我认为这很正常。