我正在将我的渲染器移动到不同的线程。在这个过程中,我对IDirect3D9::CreateDevice进行了两次调用: 1.从“渲染线程”-为了创建一个渲染设备并适当地调整其大小2.从“主线程”-在这里我创建了一个空设备以便编译着色器等。
当然,这些调用可以重叠(同时进行),所以我将它们与CriticalSection同步。
问题是,这些调用中的一个有时会冻结。在这种情况发生之前,DirectX不会抛出任何警告,所以我怀疑是内部死锁。
我研究了文档,其中提到所有在单个设备上操作的调用,特别是IDirect3D9::CreateDevice、IDirect3DDevice9::TestCooperativeLevel和IDirect3DDevice9::Reset,都需要从同一个线程调用--但我已经介绍了这一点。
那么我错过了什么呢?有人能告诉我吗?
谢谢,帕克萨斯
发布于 2013-02-13 07:22:09
我对此只有一个模糊的记忆,但是:
因此,你的一个线程肯定违反了第一点。
https://stackoverflow.com/questions/14841267
复制相似问题