D3D9多线程创建纹理/顶点缓冲区

时间:2014-08-16 20:23:41

标签: c++ multithreading textures directx-9 vertex-buffer

我想在我的游戏第二个线程中加载/卸载纹理。我可以使用在主线程上创建的相同d3d9设备在第二个线程中加载纹理吗?从文件创建纹理将花费比1帧更多的时间,因此我可能需要在另一个线程渲染场景时创建纹理。我当然不会使用正在加载的纹理。关于顶点缓冲区的相同问题。我可以创建它们并在另一个线程渲染时填充数据吗?

1 个答案:

答案 0 :(得分:1)

您需要在创建设备时传递D3DCREATE_MULTITHREADED标志,以便能够从第二个线程创建D3D资源。这将导致所有DX API调用的运行时开销非常小,因为它会获得锁定。

但是,您也可以使用第二个线程从磁盘传输原始数据,并让主线程从中创建D3D资源。这会给同步逻辑带来负担,可能成本相同。

多线程D3D API的使用变得越来越普遍,事实上,上面的标志是D3D11的默认标志(即你必须告诉它不是线程安全的,而不是请求线程安全)。