1

我已经在我的 XNA 游戏上实现了 MultiSampling,它在我的桌面上运行良好。当我在 XBox360 上以高清模式运行游戏时,出现 OOM 异常。如果我不启用 MultiSampling,游戏运行良好,但模型没有抗锯齿并且看起来很糟糕。

以下代码块似乎是罪魁祸首。

    void _graphics_PreparingDeviceSettings(object sender, PreparingDeviceSettingsEventArgs e)
    {
        e.GraphicsDeviceInformation.PresentationParameters.MultiSampleType = MultiSampleType.TwoSamples;
    }        

    protected override void Initialize()
    {
        // TODO: Add your initialization logic here
        graphics.PreferMultiSampling = true;
        graphics.PreferredBackBufferHeight = 720;
        graphics.PreferredBackBufferWidth = 1280;
        graphics.PreparingDeviceSettings += _graphics_PreparingDeviceSettings;
        graphics.ApplyChanges();

        base.Initialize();
    }

会导致OOM异常。

我的主要目标是让模型看起来不错(抗锯齿),而 MultiSampling 似乎是正确的方法。我对此很陌生,所以如果有人能指出我正确的方向,我将不胜感激。

4

2 回答 2

2

我认为,如果您只是将代码从初始化移动到构造函数中并删除对 graphics.ApplyChanges(...) 的调用,您的问题应该会消失。

Venesectrix 发布的文章指出,ApplyChanges(...) 对于 XBOX360 来说是一种禁忌。

因此,您需要在构建设备之前进行所有这些 GraphicsDevice 设置。这是通过在构造函数中设置它来完成的。在这种情况下,无需调用 ApplyChanges()。

在调用 Initalize() 时,设备已经构建完成。调用 ApplyChanges 会导致重置并再次触发事件以准备设备设置。如果我没记错的话,360 并不真正支持关于 XNA 的设备重置,并且会失败。

希望这有帮助,让我知道。

-杰夫·B。

于 2009-04-02T22:27:14.340 回答
1

我建议你看看XNA 论坛上的这个帖子,尤其是第一篇文章和从这里开始的帖子。如果没有看到您正在处理的其余代码,我不能确定这是您遇到的问题,因此您必须查看它。正如帖子所示,启用多重采样可能不会直接导致问题。

于 2009-04-02T20:27:04.207 回答