Direct3D 版本之间的线程差异
许多多线程编程模型利用同步基元 ((如互斥体) )来创建关键部分,并防止代码一次被多个线程访问。
但是, ID3D11Device 接口的资源创建方法设计为可重新进入,而无需同步基元和关键部分。 因此,资源创建方法高效且易于使用。
Direct3D 11、10 和 9 之间的差异: Direct3D 11 默认为线程安全,并继续允许应用程序使用 D3D11_CREATE_DEVICE_SINGLETHREADED 选择退出。 如果应用程序选择退出线程安全,它们必须遵守线程规则。 运行时代表应用程序同步线程,允许并发线程运行。 事实上,Direct3D 11 中的同步比使用 Direct3D 10 中的线程安全层更高效。 Direct3D 10 一次只能支持执行一个线程。 Direct3D 10 完全线程安全,允许应用程序使用D3D10_CREATE_DEVICE_SINGLE_THREADED选择退出该行为。 Direct3D 9 不默认为线程安全。 但是,调用 CreateDevice 或 CreateDeviceEx 来创建设备时,可以指定 D3DCREATE_MULTITHREADED 标志,使 Direct3D 9 API 线程安全。 这会导致严重的同步开销。 因此,不建议使用安全 Direct3D 9 API 线程,因为性能可能会降低。 |