DirectX绘图在其他线程中

时间:2012-07-02 07:16:43

标签: multithreading directx directx-9

我有一些我想在第二个线程中运行的directx代码。 我读了下面的How do I run with a multithreaded device in Direct3D9 ? ,它说可以使用其他线程的directx设备,只要你没有从多个线程同时使用,我就不这样做了。并且您必须从同一个线程调用CreateDevice和CreateWindow,以及其他一些函数,如TestCooperativeLevel,Reset等

我正在做以下事情:

  1. 在主线程中创建窗口和directx设备;

  2. 启动第二个线程并在那里进行渲染和更新,基本上是:

    • 更新
    • BeginScene,
    • 绘图,
    • EndScene,
    • 存在;
  3. 此外,我还想从主线程中调用TestCooperativeLevel,Reset,pDevice-> Release和pDirect3D-> Release()。

  4. 问题

    我在调试模式下测试时代码正常工作。但它并没有处于重新模式,即渲染线程似乎绘制得很好,但我的主线程似乎被阻止并且不处理消息,或者有时可能很慢地处理它们。如果只是评论对Present的调用,一切都很好(当然它不会在屏幕上绘制),即主线程响应,第二个线程也在运行。 Sooo,如果在主线程中创建窗口和设备,从其他线程调用Present时是否存在问题?当我阅读以下Multithreading Issues时,此类限制仅适用于CreateDevice,TestCooperativeLevel和Release。

1 个答案:

答案 0 :(得分:3)

当从另一个线程调用Present作为运行消息泵的线程时,可能会引入死锁。 更多信息: Multithreading and DXGI