我想在我的游戏中有第二个线程,它可以加载/卸载纹理。我可以使用在主线程上创建的相同的d3d9设备加载第二线程中的纹理吗?从文件创建纹理将需要比1帧更多的时间,所以我可能需要在另一个线程渲染场景时创建纹理。当然,我不会使用正在加载的纹理。关于顶点缓冲区也有同样的问题。当另一个线程正在渲染某些东西时,我可以创建它们并填充数据吗?
发布于 2014-08-17 04:28:16
为了能够从第二个线程创建D3D资源,您需要在创建设备时传递D3DCREATE_MULTITHREADED
标志。这将在所有DX API调用上产生非常小的运行时开销,因为它获取了一个锁。
但是,您也可以使用第二个线程从磁盘中流式输入原始数据,并让主线程从该数据创建D3D资源。这给您带来了同步逻辑的负担,但代价可能是相同的。
多线程D3D应用程序接口的使用已经变得越来越普遍,事实上,上面的标志是D3D11的默认标志(即,你必须告诉它不是线程安全的,而不是请求线程安全的)。
https://stackoverflow.com/questions/25343624
复制相似问题