我想用动态顶点缓冲区渲染一个对象,我在 UI 线程中进行渲染。我在想是否可以使用 Map 和 Unmap 在非 UI 线程中更改此顶点缓冲区内容。
谢谢。
YL
Direct3D 11 多线程模型相当简单:
对 的调用ID3D11Device
是线程安全的(除非您D3D11_CREATE_DEVICE_SINGLETHREADED
在创建设备时使用了该标志)。您可以从任何线程调用此接口上的方法。
调用的ID3D11DeviceContext11
是不是线程安全的,并且你应该只调用该接口上的方法从单个线程在给定的时间范围内。
这就是为什么Map
和Unmap
是的一部分ID3D11DeviceContext11
,而不是ID3D11Device
上或ID3D11Resource
本身就像是在Direct3D 10的操作与其他操作本质上连载。
这意味着您应该有一个使用直接设备上下文(和 DXGI)的线程,并且这可能应该与您的主窗口消息泵相同(出于DirectX 图形基础结构(DXGI):最佳实践中介绍的原因。
您可以Map
在与使用直接上下文的线程相同的线程上,将指针编组到另一个线程,然后Unmap
在该线程完成时从原始线程将其编组,但这极不可能提高性能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句