Direct3D9ex和Direct3D10资源共享

时间:2009-02-11 16:35:11

标签: direct3d direct3d10

使用Direct3D9ex可以在设备之间共享资源。是否也可以将这些共享资源用于Direct3D10设备?

3 个答案:

答案 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可能会在幕后进行,但您无法控制它。

如果要明确使用从另一台设备上的一台设备生成的纹理,则必须从源设备下载该纹理并将其上传到目标设备。这将是缓慢的,但如果绝对必要,它可以这样做。