我已经在我的XNA游戏上实现了MultiSampling,它在我的桌面上工作得很好。当我在XBox360上以HighDefinition模式运行游戏时,我得到了一个面向对象的异常。如果我不启用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似乎是正确的方法。我是个新手,所以如果有人能给我指明正确的方向,我将不胜感激。
发布于 2009-04-02 22:27:14
我认为如果您只是将代码从initialize移到构造函数中并删除对graphics.ApplyChanges(...)的调用。你的问题应该会消失。
Venesectrix发布的文章称ApplyChanges(...)在某种程度上是XBOX360的禁忌。
因此,您需要在构建设备之前进行所有这些GraphicsDevice设置。这是通过在构造函数中设置它来实现的。在这种情况下,不需要调用ApplyChanges()。
在调用Initalize()时,设备已经构建好了。调用ApplyChanges会导致重置,并再次激发事件以准备设备设置。如果我没记错的话,360并不真正支持与XNA相关的设备重置,并且会吐出来。
希望这能帮上忙,让我知道。
-Jeff B.
发布于 2009-04-02 20:27:04
我建议你看看XNA论坛上的这个thread,特别是第一篇文章和启动here的文章。如果没有看到您正在处理的其余代码,我不能肯定这就是您遇到的问题,所以您必须仔细检查它。正如这篇文章所指出的,启用多重采样可能不会直接导致问题。
https://stackoverflow.com/questions/711353
复制相似问题