0

我正在为 DirectX 6.1 编写 Windows Hooks。我想拦截对 EMBM(环境映射凹凸映射)的调用并将数据传递给自己的凹凸着色器,因此依赖于 EMBM 的应用程序将正常工作。唯一的问题是 DX 6.1 根本不允许着色器。我不能简单地用较新的 SDK 中的类替换 Direct3DDevice3,因为它的方法使用不同的参数集,使用我的钩子 dll 的应用程序会崩溃。我不知道如何解决。我不太擅长 DirectX(也许有更有效的方法可以在 DX 6.1 中实现适用于现代硬件的凹凸?)也许可以在 D3Device 中查询一些允许我使用着色器的接口?

任何可以为我指明正确方向的事情都将不胜感激。

4

1 回答 1

1

每个 Direct 3D 设备都直接从 IUnknown 派生,因此您不能 QI 从 v6 设备到 v9 设备。

您可以做您想做的事情(高于驱动​​程序级别)的唯一方法是实现整个 v6 设备并将所有调用转换为它们的 v9 等效项。当然,如果游戏通过 v7 或 v8 实现 embm,您就会遇到问题......

于 2009-11-02T07:51:09.280 回答