c++ - Direct2D 渲染 CPU 使用率

标签 c++ performance directx rendering direct2d

我有一个用 C++ 编写的 Direct2D native 应用程序。渲染函数每秒调用大约 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,即使更新函数,例如,总是被调用)。

最佳答案

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

关于c++ - Direct2D 渲染 CPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36371596/

相关文章:

c++ - 如何在我指向的andress上动态分配内存?

c++ - LNK2005 - 在 .hpp 文件中声明函数时出错

c++ - HLSL 缓冲区步幅和线程 - 这里发生了什么?

node.js - 将 DirectX Hwnd 嵌入到 NodeJS 中?

graphics - DirectDraw 叠加

c++ - 无法将 SQLINTEGER* 转换为 SQLLEN* (x64)

c++ - 使用 for Qt 制作无边框窗口

c# - 第三方库中麻烦的 GC.collect() 调用

arrays - 当查找映射到小整数的常量时,使用 case 语句还是常量数组更快?

C/C++ 局部变量的细微差别