【发布时间】:2020-06-22 18:58:21
【问题描述】:
所以我想使用修改后的 d3d9.dll 使旧游戏在更新的视频驱动程序上看起来更好,该 d3d9.dll 将位于主游戏父目录中。
随着 400 系列 nvidia 卡的出现(也许是 amd,尽管我尚未确认),驱动程序发生了一些变化,否则默认情况下会使旧游戏看起来更糟。这些变化是(从通过 PM 在 nvidia 论坛上提供的信息解释):
从 400 系列 Geforce 卡和相关的 nvidia 驱动程序开始,当旧 DirectX 9 游戏中的场景运动时,某些纹理上会出现过度像素化。
对于低于基于 Fermi 的卡(400 系列之前),驱动程序读取以下选项:
QUALITY_ENHANCEMENTS(纹理过滤 - 质量)
PS_TEXFILTER_DISABLE_TRILIN_SLOPE(纹理过滤 - 三线性优化)
PS_TEXFILTER_BILINEAR_IN_ANISO(纹理过滤 - 各向异性过滤优化)
PS_TEXFILTER_ANISO_OPTS2(纹理过滤 - 各向异性样本优化)
PS_TEXFILTER_NO_NEG_LODBIAS(纹理过滤 - 负 LOD 偏差)其中以下内容现在在较新的驱动程序中被忽略:
PS_TEXFILTER_BILINEAR_IN_ANISO(纹理过滤 - 各向异性过滤优化)
PS_TEXFILTER_NO_NEG_LODBIAS(纹理过滤 - 负 LOD 偏差)英文版,3期:
各向异性过滤不适用于某些纹理。
各向异性过滤不适用于使用负 LOD 的纹理。 设置“纹理过滤 - 质量” - “高质量”应该将 AF 应用于具有负 LOD 的纹理,但此选项部分损坏,因此不会执行此操作。只有 32 位 DX9 驱动程序损坏(即所有 32 位 DX9 游戏,大多数都是 32 位)。
设置“纹理过滤 - 负 LOD 偏差” - “钳位”已完全从驱动程序中移除,但仍作为安慰剂存在于控制面板中。
虽然我能够在 Windows 7 上找到解决此问题的方法(尽管我没有机会进行广泛测试以确认它),但需要修改的相关 dll 与 win XP 不兼容。
我的想法是,如果我可以在游戏主目录中插入一个修改后的 d3d9.dll 来解决这些问题,它将更加模块化且独立于操作系统要求。
我能够获取一个经过十六进制编辑的 d3d9.dll,以忽略来自游戏的自定义 lod 调用(进而将 LOD 强制为 0),但强制 AF 将是一个不错的补充。我发现相关的调用函数是 SetSamplerState。
那么如何为 d3d9.dll 制作一个包装器呢?我不知道从哪里开始......
干杯
【问题讨论】:
标签: c# c++ nvidia direct3d directx-9