Direct2D中的多线程
Multithreading in Direct2D
我正在尝试创建一个简单的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();
我认为这里的错误是在一个窗口中有几个ID2D1HowndRenderTarget实例,因为如果我在一个单独的窗口中绘制每个线程,它就可以正常工作。但我只想在一个窗口中绘制,并且我无法避免为此使用多个ID2D1HowndRenderTarget实例。所以我的问题是:
- 创建多线程Direct2D应用程序的最佳实践是什么
- 如果我使用的方法是正确的,我做错了什么?我该如何解决
如有任何帮助,我们将不胜感激。
我看不出为什么在一个窗口中使用多个HWND渲染目标。您是否尝试过为每个线程创建屏幕外位图,并将其绘制到单个HWND渲染目标?
相关文章:
- 在C++中使用cURL和多线程
- 多线程双缓冲区
- 为什么我的多线程作业队列崩溃
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 为什么一个向量上的多线程操作很慢
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 全局变量 多读取器 一个写入器多线程安全?
- boost::文件系统::recursive_directory_iterator多线程安全
- 如何阻止TensorFlow的多线程
- 如何在多线程中正确使用unique_ptr进行多态性?
- 并发/多线程:是否可以以这种方式生成相同的输出?
- sigwait() 在多线程程序中不起作用
- 多线程程序中出现意外的内存泄漏
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 多线程比没有线程C++慢
- 具有 C++11 多线程的特征库
- 通过安装信号处理程序关闭多线程应用程序
- 关于Direct2D图形调用中的多线程
- Direct2D中的多线程