我有一些要在第二个线程中运行的 directx 代码。我阅读了以下如何在 Direct3D9 中使用多线程设备运行?这表示只要您不从多个线程同时使用,就可以从其他线程使用 directx 设备,而我没有这样做。并且您必须从同一个线程调用 CreateDevice 和 CreateWindow,以及其他一些函数,如 TestCooperativeLevel、Reset 等
我正在做以下事情:
在主线程中创建窗口和directx设备;
启动第二个线程并在那里进行渲染和更新,基本上:
- 更新,
- 开始场景,
- 画,
- 结束场景,
- 当下;
我还关心从主线程调用 TestCooperativeLevel、Reset、pDevice->Release 和 pDirect3D->Release()。
问题
当我在调试模式下对其进行测试时,该代码正在运行。但它不在释放模式下,即渲染线程似乎一切正常,但我的主线程似乎被阻塞并且不处理消息,或者有时处理它们非常慢。如果只是评论对 Present 的调用,一切都很好(当然它不会在屏幕上绘制),即主线程是响应式的,第二个线程也在运行。Sooo,如果在主线程中创建窗口和设备,从其他线程调用 Present 时是否有问题?当我阅读以下多线程问题时,此类限制仅适用于 CreateDevice、TestCooperativeLevel 和 Release。