我想在我的游戏中有第二个线程来加载/卸载纹理。我可以使用在主线程上创建的相同 d3d9 设备在第二个线程中加载纹理吗?从文件创建纹理将花费超过 1 帧的时间,因此我可能需要在另一个线程渲染场景时创建纹理。我当然不会使用正在加载的纹理。关于顶点缓冲区的相同问题。我可以在另一个线程渲染某些东西时创建它们并填充数据吗?
最佳答案
您需要在创 build 备时传递 D3DCREATE_MULTITHREADED
标志,以便能够从第二个线程创建 D3D 资源。这将在所有 DX API 调用上产生非常小的运行时开销,因为它会获取锁。
但是,您也可以使用第二个线程从磁盘中流式传输原始数据,并让主线程从中创建 D3D 资源。这会给您带来同步逻辑的负担,成本可能相同。
多线程 D3D API 的使用变得越来越普遍,事实上,上述标志是 D3D11 的默认设置(即,您必须告诉它不是线程安全的,而不是请求线程安全)。
关于c++ - D3D9 多线程创建纹理/顶点缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25343624/