我正在将渲染器移动到另一个线程。 在这个过程中,我正在对IDirect3D9 :: CreateDevice进行两次调用: 1.从'渲染线程' - 为了创建一个渲染设备并正确调整它 2.来自'主线程' - 这里我正在创建一个Null设备以编译着色器等。
这些调用当然可以重叠(同时进行),所以我将它们与CriticalSection同步。
问题是这些调用之一有时会冻结。在发生这种情况之前,DirectX不会发出任何警告,所以我怀疑内部死锁。
我研究了文档,并且提到所有在单个设备上运行的调用,特别是IDirect3D9 :: CreateDevice,IDirect3DDevice9 :: TestCooperativeLevel和IDirect3DDevice9 :: Reset,需要从同一个线程调用 - 但是我已经覆盖了
那我错过了什么?有人可以告诉我吗?
谢谢, 帕克萨斯
答案 0 :(得分:1)
我对此只有一个模糊的记忆,但是:
因此,你的一个主题肯定违反了第一点。