首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XNA、多采样和HD获取OOM错误

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

Stack Overflow用户
提问于 2009-04-02 19:57:58
回答 2查看 297关注 0票数 1

我已经在我的XNA游戏上实现了MultiSampling,它在我的桌面上工作得很好。当我在XBox360上以HighDefinition模式运行游戏时,我得到了一个面向对象的异常。如果我不启用MultiSampling,游戏会运行得很好,但是模型没有抗锯齿,而且看起来很糟糕。

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

代码语言:javascript
复制
    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似乎是正确的方法。我是个新手,所以如果有人能给我指明正确的方向,我将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-04-02 22:27:14

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

Venesectrix发布的文章称ApplyChanges(...)在某种程度上是XBOX360的禁忌。

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

在调用Initalize()时,设备已经构建好了。调用ApplyChanges会导致重置,并再次激发事件以准备设备设置。如果我没记错的话,360并不真正支持与XNA相关的设备重置,并且会吐出来。

希望这能帮上忙,让我知道。

-Jeff B.

票数 2
EN

Stack Overflow用户

发布于 2009-04-02 20:27:04

我建议你看看XNA论坛上的这个thread,特别是第一篇文章和启动here的文章。如果没有看到您正在处理的其余代码,我不能肯定这就是您遇到的问题,所以您必须仔细检查它。正如这篇文章所指出的,启用多重采样可能不会直接导致问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/711353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档