我在XNA游戏中实现了MultiSampling,它在我的桌面上运行良好。当我在XBox360上以HighDefinition模式运行游戏时,我得到一个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似乎是正确的方法。我对此很新,所以如果有人能指出我正确的方向,我会很感激。
答案 0 :(得分:2)
我认为如果您只是将代码从初始化移动到构造函数中并删除对graphics.ApplyChanges(...)的调用,那么您的问题就会消失。
Venesectrix发布的文章指出,对于XBOX360,ApplyChanges(...)是一种禁忌。
因此,您需要在构建设备之前进行所有这些GraphicsDevice设置。这是通过在构造函数中设置它来完成的。在这种情况下,无需调用ApplyChanges()。
当调用Initalize()时,设备已经构建完毕。调用ApplyChanges会导致重置并再次触发事件以准备设备设置。如果我没有弄错的话,关于XNA的设备重置在360上并不真正支持并且会禁止。
希望这有帮助,请告诉我。
-Jeff B。
答案 1 :(得分:1)