正如标题所说:我是否需要使用CreateSharedHandle
将线程中生成的ID3D11Texture2D
传递给同一进程中的另一个线程?
我的用例是每个线程都会使用纹理,并在同一个适配器上创建自己的设备。
答案 0 :(得分:1)
引用Surface Sharing Between Windows Graphics APIs:
同步共享表面支持Direct3D 10.1,Direct2D和Direct3D 11 API使用的多个呈现设备的多线程,进程内和进程外使用。 [...]
DXGI 1.1同步共享曲面
Direct3D 11,Direct3D 10.1和Direct2D API都使用DXGI 1.1,它提供了两个或多个Direct3D设备同步读取和写入同一视频内存表面(DXGISurface1)的功能。使用同步共享表面的渲染设备可以是Direct3D 10.1或Direct3D 11设备,每个设备在同一个流程或跨流程中运行。
使用同步表面/纹理使您可以在多线程并发执行环境中使用它们。但是,您不必启用此机制只需在另一个线程上使用纹理。你必须出于另一个原因这样做:
...每个线程都会使用纹理,并在同一个适配器上创建自己的设备。
纹理属于他们的设备,因此您必须启用共享才能让多个设备使用共享纹理数据。