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

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

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

最佳答案

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

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

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

关于c++ - D3D9 多线程创建纹理/顶点缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25343624/

相关文章:

c++ - 包含地址的排序 vector

c++ - 反转空终止字符串 (C++)

java - 在 JOGL 应用程序中使用纹理时,ati 显卡最终都会崩溃

java - OpenGl 中的 2D 图像纹理无法按预期工作

opengl - GL_SRGB8_ALPHA8 对纹理插值的影响?

c++ - 给定一个整数,将其表示为 s 个平方和

c++ - Qt 中的可中断 sleep ?

ios - 如何在swift中使用后台线程?

c - 执行后初始化一个 char 数组,因为大小最初未知

java - ConcurrentMap 中的内存一致性影响