我正在将我的渲染器移动到另一个线程。在此过程中,我对 IDirect3D9::CreateDevice: 进行了两次调用: 1. 从“渲染线程” - 为了创建渲染设备并正确调整其大小 2. 从“主线程” - 这里我正在创建一个用于编译着色器等的空设备。
这些调用当然可以重叠(同时进行),所以我将它们与关键部分同步。
问题是其中一个调用有时会冻结。DirectX 在此之前不会发出任何警告,因此我怀疑存在内部死锁。
我研究了文档,其中提到在单个设备上运行的所有调用,尤其是 IDirect3D9::CreateDevice、IDirect3DDevice9::TestCooperativeLevel 和 IDirect3DDevice9::Reset,都需要从同一个线程调用 - 但我已经涵盖了。
那么我错过了什么?谁能告诉我?
谢谢, 帕克萨斯