【发布时间】:2014-06-26 12:00:20
【问题描述】:
序言
好吧...我知道这个问题可能涉及多个主题,但我对 DirectX 以及多线程以及我到目前为止阅读的 Stackoverflow+MSDN 文章完全没有帮助。因此,我非常感谢 每条 将我推向正确方向的评论。
前提
几周前我开始编写一个Direct2D 渲染器,它绘制了我放入其中的一些矩阵并在单个窗口中绘制它(顺便说一句,效果很好)。
我试图加快计算速度并得到使用openMP 的提示。使用 pragma 语句时,我的程序使用 3 个线程而不是 1 个线程 - 我猜这很好。但我没有注意到任何加速。然而,这不是最重要的部分。绘图调用占用的时间比我计算矩阵的时间要多 很多。而且我不知道如何加快速度。
问题
请告诉我应该注意什么或如何加快/多线程我的绘图调用。
注意:我使用的是 STL、Windows 和 DirectX 标头,但没有 .NET、MFC/ATL 或类似库。
代码示例
vector<dot> set computeMatrix(ushort x, ushort y)
{
// init set
#pragma omp parallel for
for(i=0; i<y; ++i)
for(j=0; j<x; ++j)
//do some computation
return set;
}
dot 是一个 D2D1 椭圆对象。
void draw(vector<dot> set)
{
pRenderTarget->BeginDraw();
pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());
#pragma omp parallel for
for(auto coord: set)
{
// set the pBrush
pRenderTarget->FillEllipse(dot, pBrush);
}
pRenderTarget->EndDraw();
}
【问题讨论】:
-
一些我已经找到并阅读过的资源,但还没有帮助回答我的问题:SO: Best practices for multithreading in D2D、SO: Multithreading in D2D、BatchBatchBatch 以及链接的 MSDN 文章那些 StackOverflow 线程。
标签: c++ multithreading directx direct2d