用于Direct3D 6.1的钩子用着色器替换EMBM

时间:2009-10-31 23:03:46

标签: directx hook shader

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

任何可能指向正确方向的东西都会非常感激。

1 个答案:

答案 0 :(得分:1)

每个Direct 3D设备直接从IUnknown派生,因此您无法从v6设备到v9设备进行QI。

您可以执行所需操作(驱动程序级别以上)的唯一方法是实现整个v6设备并将所有调用转换为其v9等效项。当然,如果游戏通过v7或v8实现embm,那么你会遇到问题......