有了Direct3D9ex,就可以在设备之间共享资源。是否也可以在Direct3D10设备上使用这些共享资源?
发布于 2009-05-16 18:20:51
可以,您可以使用下面介绍的技术在D3D9Ex和D3D10设备之间共享资源:
Feature Summary (Direct3D 9 for Windows Vista) - Sharing Resources
请注意,GPU对共享表面的访问是不同步的-例如,如果您同时渲染到两个设备上的同一渲染表面,则可能会出现各种损坏和竞争。
要解决此问题,请确保一个设备在另一个设备使用之前完成了对共享面的渲染。一个选项是事件查询(IDirect3DQuery9),另一个选项是对一个小表面执行StretchRect并将其锁定(如果锁定成功,GPU将完成所有先前的工作)
发布于 2009-05-10 17:54:10
您可以在设备或进程之间共享Direct3D9资源。
Feature Summary (Direct3D 9 for Windows Vista) - Sharing Resources
类似的技术也适用于Direct3D10资源(还需要指定共享句柄)。
这篇GameDev.net topic详细讨论了D3D9Ex和D3D10之间的共享。该主题中的结论似乎是,虽然基于文档应该是可能的(有一些限制),但在实践中它根本不起作用(也许限制太严格了,它们阻止了任何实际使用场景?)
发布于 2009-02-11 16:48:05
如果我错了,有人纠正我,但是,不和不。
你打算做什么?在两个设备上有静态纹理?如果是这样的话,通过将相同的纹理加载两次到两个不同的缺省池中就可以很容易地实现。只需注意,修改一个并不一定会修改另一个。
如果你试图在两个设备上共享一个托管纹理,我不认为这是任何类型的控制都无法实现的。SLI可能会在幕后做这件事,但你无法控制它。
如果要在另一个设备上显式使用从一个设备生成的纹理,则必须从源设备下载该纹理,然后每帧将其上载到目标设备。这将是缓慢的,但如果绝对必要,它可以这样做。
https://stackoverflow.com/questions/537650
复制相似问题