Direct2D中的multithreading

我正在尝试创build一个简单的D2D游戏引擎(它至less必须能够在窗口中显示和移动图像),并且一切正常,直到决定切换到multithreading版本。 我阅读这篇 MSDN文章,并build议从多个线程使用一个multithreading工厂。 但是这篇文章声称,有几个单线程工厂会更有效率(尽pipe本文描述了服务器端渲染场景,原理与我的情况相同,我错了吗?)。 当我尝试使用单线程工厂的方法时,所有的图像都被显示和移动,但是有可怕的闪烁。 在我的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实例。 所以我的问题是:

  1. 创buildmultithreadingDirect2D应用程序的最佳做法是什么?
  2. 如果我正在使用的方法是正确的,我在做什么错了,我该如何解决?

任何帮助将不胜感激。

Solutions Collecting From Web of "Direct2D中的multithreading"