【问题标题】:Direct2D rendering CPU usageDirect2D 渲染 CPU 使用率
【发布时间】:2016-07-22 03:52:27
【问题描述】:

我有一个用C++ 编写的Direct2D 本机应用程序。渲染函数每秒调用大约 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);
}

画笔、椭圆和变换在开始时创建(实体构造)。

我的问题是,使用这些参数我的 CPU 始终在 8/9% 左右是否正常。我本来期望一个接近 0 的值(如果我评论渲染函数,CPU 使用率下降到 0,即使总是调用更新函数)。

【问题讨论】:

    标签: c++ performance directx rendering direct2d


    【解决方案1】:

    如果您的几何图形是静态的(不会改变每一帧),请查看使用 geometry realizations。这应该会显着降低渲染大量图元的 CPU 成本。如果您需要更高的性能,也可以尝试使用sprite batch;这可能是渲染大量形状的最快方式,前提是您可以将形状存储在位图中并且不需要针对每个基元进行抗锯齿处理。

    【讨论】:

      【解决方案2】:

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

      结果:每帧绘制超过 20 毫秒,CPU 使用率超过 10-13%。

      回答:我觉得很正常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-28
        • 2013-10-11
        • 1970-01-01
        • 2016-02-11
        • 2011-12-07
        • 2012-12-11
        相关资源
        最近更新 更多