C++ Direct2D渲染CPU使用率

C++ Direct2D渲染CPU使用率,c++,performance,directx,rendering,direct2d,C++,Performance,Directx,Rendering,Direct2d,我有一个用C++编写的Direct2D本机应用程序。渲染函数每秒调用大约60次,其目标是显示大约1000个图形几何体(基本上是椭圆)。以下是渲染函数的代码: void Render() { pRenderTarget->BeginDraw(); pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::Black)); const auto transform = D2D1::Matrix3x2F::Identity()

我有一个用
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(如果我对render函数进行注释,CPU使用率将降至0,即使始终调用Update函数也是如此)。

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

结果:每个帧的绘制时间超过20ms,CPU使用率超过10-13%


回答:我认为这很正常。

如果您的几何图形是静态的(不会改变每一帧),请查看使用。这将大大降低渲染大量原语的CPU成本。如果您需要更高的性能,您也可以尝试使用;这可能是渲染大量形状的最快方法,前提是您可以将形状存储在位图中,并且不需要每个基本体消除混叠