我正在嘗試創建一個簡單的D2D遊戲引擎(它必須能夠在一個窗口中顯示和移動圖像,至少),並且一切都正確無誤,直到我決定切換到多線程版。我讀了this MSDN文章,它建議從多個線程使用一個多線程工廠。但this文章聲稱有幾個單線程工廠會更有效(儘管本文描述了服務器端渲染場景,原理與我的情況相同,我錯了嗎?)。當我嘗試使用單線程單工廠方法時,所有圖像都會顯示並移動,但閃爍很可怕。在我的WM_PAINT處理程序我試圖做這樣的事情:Direct2D中的多線程
for (CSingleThreadEngine *pElSingleThreadEngine : m_SingleThreadEngines) //each CSingleThreadEngine instance has its own D2D factory and an image collection
pElSingleThreadEngine->Draw();
和pElSingleThreadEngine->繪製()不拉這樣的:
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實例。所以我的問題是:
- 什麼是根本創建多線程Direct2D應用程序的最佳做法?
- 如果我使用的方法是正確的,我做錯了什麼,我該如何解決它?
任何幫助將不勝感激。
所以沒有人知道答案?那麼,也許是一個提示或什麼...(( – GreenForester
)可能相關:http://stackoverflow.com/questions/33143589/efficient-direct2d-multithreading –