多线程IDirect3DDevice9 :: CreateDevice冻结

时间:2013-02-12 20:31:55

标签: multithreading directx directx-9

我正在将渲染器移动到另一个线程。 在这个过程中,我正在对IDirect3D9 :: CreateDevice进行两次调用:  1.从'渲染线程' - 为了创建一个渲染设备并正确调整它  2.来自'主线程' - 这里我正在创建一个Null设备以编译着色器等。

这些调用当然可以重叠(同时进行),所以我将它们与CriticalSection同步。

问题是这些调用之一有时会冻结。在发生这种情况之前,DirectX不会发出任何警告,所以我怀疑内部死锁。

我研究了文档,并且提到所有在单个设备上运行的调用,特别是IDirect3D9 :: CreateDevice,IDirect3DDevice9 :: TestCooperativeLevel和IDirect3DDevice9 :: Reset,需要从同一个线程调用 - 但是我已经覆盖了

那我错过了什么?有人可以告诉我吗?

谢谢, 帕克萨斯

1 个答案:

答案 0 :(得分:1)

我对此只有一个模糊的记忆,但是:

  1. docs状态“任何创建,释放或重置设备的调用都必须使用与焦点窗口的窗口过程相同的线程完成。”
  2. 正如我记得的那样,即使您尝试使用NULL HWND创建设备,内部Direct3D也可以为您的应用程序进行挖掘。
  3. 因此,你的一个主题肯定违反了第一点。