使用Direct3D9ex可以在设备之间共享资源。是否也可以将这些共享资源用于Direct3D10设备?
答案 0 :(得分:3)
是的,您可以使用此处描述的技术在D3D9Ex和D3D10设备之间共享资源:
Feature Summary (Direct3D 9 for Windows Vista) - Sharing Resources
请注意,对共享曲面的GPU访问不同步 - 例如,如果同时渲染到两个设备上的同一渲染表面,则会出现各种损坏和争用。
要解决此问题,请确保在另一个设备使用之前,已完成一个设备渲染到共享曲面。一个选项是事件查询(IDirect3DQuery9),另一个选项是对一个小表面执行StretchRect并锁定它(如果Lock成功,GPU完成以前的所有工作)
答案 1 :(得分:0)
您可以在设备或进程之间共享Direct3D9资源。
Feature Summary (Direct3D 9 for Windows Vista) - Sharing Resources
类似的技术适用于Direct3D10资源(您还指定了共享句柄)。
这个GameDev.net topic详细讨论了D3D9Ex和D3D10之间的共享。该主题的结论似乎是基于文档应该是可能的(有一些限制),在实践中它根本不起作用(可能限制是严重的,它们阻止任何实际使用场景?)
答案 2 :(得分:-1)
如果我错了,有人会纠正我,但是,不,不。
你想要什么?在两个设备上有静态纹理?如果是这样,可以通过将相同的纹理加载到两个不同的默认池中来轻松实现。请注意,修改一个不一定会修改另一个。如果您尝试在两台设备上共享托管纹理,我不认为这可以通过任何控制来实现。 SLI可能会在幕后进行,但您无法控制它。
如果要明确使用从另一台设备上的一台设备生成的纹理,则必须从源设备下载该纹理并将其上传到目标设备。这将是缓慢的,但如果绝对必要,它可以这样做。