【发布时间】:2017-08-14 09:15:24
【问题描述】:
基本上,我想要做的是强制使用Direct3D9Ex 上下文(CreateD3D9Ex) 但简单的“非前”设备(IDirect3DDevice9) 的封闭源应用程序使用Direct3DDevice9Ex。
我在应用程序目录中放置了一个代理 dll,它通常可以正常工作。现在我试图将CreateDevice 的调用重定向到原始dll 的CreateDeviceEx,然后只返回一个“非ex”指针(这样应用程序就使用了一个“Ex”设备而不知道它)。
据我了解,这应该可行,因为“Ex”设备实现了“non-ex”设备还包含的所有方法 - 但显然必须有一些区别,因为如果隐藏的“Ex”设备唯一会被渲染正在使用的是光标。
问:谁能告诉我我做错了什么或给一些建议?
背景
我正在使用一个我想复制深度缓冲区的D3D9 应用程序。不幸的是,它的格式是D24S8,这意味着直接复制是不可能的。
所以我决定尝试是否可以创建共享深度/模板 1 级纹理,然后使用实际上能够复制深度/模板表面的 D3D10/D3D11 方法访问此纹理。但是,只有D3D9Ex 设备能够创建具有共享句柄的纹理...
附录
由于 Direct3D9Ex 不支持托管池,这是不可能的。谢谢@VuVirt
【问题讨论】: