使用XNA、多重采样和HD获取OOM错误

使用XNA、多重采样和HD获取OOM错误,xna,Xna,我已经在我的XNA游戏上实现了多重采样,它在我的桌面上非常有效。当我在XBox360上以高清模式运行游戏时,我得到一个OOM异常。如果我不启用多重采样,游戏运行正常,但模型没有抗锯齿,看起来很糟糕 下面这段代码似乎是罪魁祸首 void _graphics_PreparingDeviceSettings(object sender, PreparingDeviceSettingsEventArgs e) { e.GraphicsDeviceInformation.P

我已经在我的XNA游戏上实现了多重采样,它在我的桌面上非常有效。当我在XBox360上以高清模式运行游戏时,我得到一个OOM异常。如果我不启用多重采样,游戏运行正常,但模型没有抗锯齿,看起来很糟糕

下面这段代码似乎是罪魁祸首

    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异常


我的主要目标是让模型看起来像样(抗锯齿),多采样似乎是正确的方法。我对这一点还很陌生,如果有人能给我指出正确的方向,我将不胜感激。

我建议你在XNA论坛上看看这一点,特别是第一篇文章和开始的文章。在没有看到您正在处理的其余代码的情况下,我无法确定这是否是您遇到的问题,因此您必须仔细检查。正如帖子所指出的,启用多重采样可能不会直接导致问题

我认为,如果您只需将代码从initialize移到构造函数中,并删除对graphics.ApplyChanges(…)的调用,您的问题就会消失

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

因此,在构建设备之前,您需要进行所有这些图形设备设置。这是通过在构造函数中设置来实现的。在这种情况下,不需要调用ApplyChanges()

调用Initalize()时,设备已经生成。调用ApplyChanges会导致重置,并再次触发事件以准备设备设置。如果我没有弄错的话,360上并不真正支持XNA的设备重置,而且会呕吐

希望这有帮助,让我知道


-Jeff B.

您确定需要明确启用多重采样吗?我认为文档表明Xbox 360免费提供FSAA 4x,你不需要做任何事情。谢谢Cecil-仅供参考-默认情况下,这些型号看起来相当糟糕。在启用了4:3 640x480 w/4倍多样本的情况下,它们实际上看起来更好…不幸的是,这对我来说并不适用。我创建了一个小的测试应用程序,我在这篇文章中输入的代码是唯一没有作为默认模板创建的东西…我肯定遗漏了一些明显的/愚蠢的东西…谢谢你提供的信息…我会先尝试JeffB的答案,但如果没有区别的话,到底是哪一行引发了异常?将所有的更改和配置移动到构造函数中会消除所有问题!非常感谢。