1

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 は適切なアプローチのようです。私はこれにかなり慣れていないので、誰かが私を正しい方向に向けることができれば幸いです。

4

2 に答える 2

2

コードを初期化からコンストラクターに移動し、graphics.ApplyChanges(...) への呼び出しを削除するだけで、問題は解決するはずです。

Venesectrix が投稿した記事によると、ApplyChanges(...) は XBOX360 ではノーノーのようなものです。

したがって、デバイスを構築する前に、これらすべての GraphicsDevice 設定を行う必要があります。これは、コンストラクターで設定することによって実現されます。この場合、ApplyChanges() を呼び出す必要はありません。

Initalize() が呼び出されるまでに、デバイスは既に構築されています。ApplyChanges を呼び出すと、リセットが発生し、デバイス設定を準備するイベントが再度発生します。私が間違っていなければ、XNA に関するデバイスのリセットは 360 では実際にはサポートされておらず、バーフします。

これが役立つことを願って、私に知らせてください。

-ジェフ B.

于 2009-04-02T22:27:14.340 に答える
1

XNA フォーラムのこのスレッド、特に最初の投稿とここから始まる投稿を参照することをお勧めします。あなたが作業している残りのコードを見ないと、これがあなたが経験している問題であるとは断言できません。投稿が示すように、マルチサンプリングを有効にしても問題が直接発生するわけではありません。

于 2009-04-02T20:27:04.207 に答える