我有一个用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函数)。
答案 0 :(得分:1)
如果您的几何图形是静态的(不会每帧都更改),请查看使用geometry realizations。这应该大大降低渲染大量基元的CPU成本。如果您需要更高的性能,还可以尝试使用sprite batch;这可能是渲染大量形状的最快方法,前提是您可以将形状存储在位图中,而不需要每个基元的抗锯齿。
答案 1 :(得分:0)
在我的类似测试应用程序中。我通过计时器每20毫秒调用一次重绘。在paint事件中,我使用线性渐变画笔和位图绘制1000个矩形。
结果:每帧超过20ms,CPU使用率超过10-13%。
回答:我认为这很正常。