我正在尝试创建一个简单的D2D游戏引擎(至少它必须能够在窗口中显示和移动图像),直到我决定切换到多线程版本的那一刻,一切都进展顺利。我阅读了这 MSDN文章,它建议从多个线程中使用一个多线程工厂。但是这文章声称有几个单线程工厂会更有效(尽管本文描述了服务器端呈现场景,但原则对我的情况是一样的,我错了吗?)当我尝试使用单线程一工厂的方法时,所有的图像都会显示和移动,但是会有可怕的闪烁。在我的WM_PAINT处理程序中,我尝试这样做:
for (CSingleThreadEngine *pElSingleThreadEngine : m_SingleThreadEngines) //each CSingleThreadEngine instance has its own D2D factory and an image collection
pElSingleThreadEngine->Draw();pElSingleThreadEngine->Draw()绘制如下所示:
m_pRenderTarget->BeginDraw();
m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());
m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));
for (CGameImage *pImage : m_GameImages)
{
if (FAILED(pImage->Draw()))
throw runtime_error("An object cannot be drawn");
}
m_pRenderTarget->EndDraw();我认为这里的错误之处在于只为一个窗口设置了几个ID2D1HwndRenderTarget实例,因为如果我在单独的窗口中绘制每个线程,它就会工作得很好。但是我只想在一个窗口中绘图,为此,我不能避免使用多个ID2D1HwndRenderTarget实例。所以我的问题是:
任何帮助都将不胜感激。
发布于 2014-05-08 11:32:50
我看不出为什么要为单个窗口使用几个HWND呈现目标。您是否尝试过为每个线程创建屏幕外位图并将其绘制到单个HWND呈现目标中?
https://stackoverflow.com/questions/23195425
复制相似问题