0

我们在 Win98 上运行了一款街机/兑换游戏,但可以运行它的硬件终于过时了。游戏使用了许多缩放效果,其中一些通过 3D 路径,并播放了一些将东西移入和移出视频内存的技巧。如果我将它移植到 Windows 7 上运行,它可能会有多大的麻烦?主要是重新编译,还是 API 经历了这样的转换,我还不如重新编写设备接口?

4

3 回答 3

0

自从我编写任何 DirectX7 代码(或根本没有 Direct X 代码)以来已经有一段时间了,但是如果我记得在 7 和 8 之间有一些重要的 API 更改事件——更不用说 9 或 10——这会使这样的变化有点更加困难。具体来说,我认为主要的变化是他们在 7 之后重构了系统,将 DirectDraw 合并到 Direct3D 中,这样两个系统就不再在 7 和 8 之间完全分离。从那以后我没有看过它,但我怀疑鉴于许多新的编码方法,并且 API 已经发生了很大变化,因此进行这些更改可能需要一个项目,而不是像您希望的那样主要重新编译。

于 2009-10-05T20:09:39.813 回答
0

你曾经把东西移入和移出视频内存吗?不寒而栗

仍然……它现在比 DX7 出现时更快。你到底在做什么?从你的描述不可能说它有多容易。DX7 应用程序仍应在 Windows 7 上运行,我想不出您可能使用了哪些奇怪的功能会导致它崩溃。

此外,将应用程序从 7 转换为 DX9 实际上并不难(转换为 DX10+ 将是一场噩梦)。它们仍然相对相似......自那时以来发生的主要变化是将 D3DTRANSFORMSTAGESTATE_* 或 D3DRENDERSTATE_* 之类的内容缩短为 D3DTSS_* 或 D3DRS_*。

编辑:自 DX7 以来,我能想到的最大变化是显卡制造商放弃了对“可能”破坏现代机器上的一些旧应用程序的调色纹理的支持。不过,这确实是一个非常简单的解决方法...

Edit2:将磁盘中的内容解压缩到纹理中可能会有点痛苦。您的主要问题是,当您创建纹理时,您最终会遭受性能损失。但是,如果您已经创建并打开了大量纹理,那么您可以随时加载到相关纹理。您只会遭受锁定/解锁命中。这可以通过提前几帧加载资源来缓解。但是,如果您这样做,无疑将需要多线程并从多个线程调用 D3D。如果这样做,请在设备上设置多线程标志。

于 2009-10-06T13:53:22.347 回答
0

不要认为它是移植到Win7。只需简单地移植到 DX9 并让 DX 使用 Win7 部件完成工作。事实上,你可能只是让它保持原样,它应该运行——但你提到你用视频内存做了一些疯狂的事情,我认为这与 DX 无关。(即通过 GDI 或其他一些 hack?)。无论如何,DX7、8 和 9 API 都有相当大的差异。但好的是它们都是向后兼容的。如果您拥有的代码是纯 dx7,请尝试针对最新的 SDK 进行编译,看看它是否可以直接在 win7 上运行。

于 2009-10-06T13:59:16.373 回答