2009-04-02 2 views
1

J'ai mis en place MultiSampling sur mon jeu XNA, il fonctionne très bien sur mon bureau. Lorsque je lance le jeu en mode High Definition sur le XBox360, j'obtiens une exception de MOO. Si je n'accepte pas MultiSampling, le jeu fonctionne correctement, mais les modèles ne sont pas anti-aliasés et ont l'air terribles.Obtention d'erreurs d'OOM avec XNA, multi-échantillonnage et HD

Le morceau de code suivant semble être le coupable.

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(); 
    } 

entraînera une exception de MOO.

Mon objectif principal est d'obtenir des modèles à l'aspect décent (anti-aliasé) et MultiSampling semble être la bonne approche. Je suis assez nouveau à ce sujet, donc si quelqu'un peut me diriger dans la bonne direction, je l'apprécierais.

+0

Etes-vous sûr de devoir activer explicitement le multi-échantillonnage? Je pense que la documentation exprime que Xbox 360 fournit FSAA 4x pour "gratuit" vous n'avez pas besoin de faire quoi que ce soit. –

+0

Merci Cecil - FYI - il semble que les modèles ont l'air assez merdique par défaut. Sur un 4: 3 640x480 w/4x multi-échantillon activé, ils ont l'air beaucoup mieux ... – Kevin

Répondre

2

Je pense que si vous venez de déplacer le code d'initialize dans le constructeur et supprimez l'appel à graphics.ApplyChanges (...) vos problèmes devraient disparaître.

L'article publié par Venesectrix indique que ApplyChanges (...) est en quelque sorte un non-non pour XBOX360.

Par conséquent, vous devez définir tous les paramètres de GraphicsDevice avant de créer le périphérique. Ceci est accompli en le configurant dans le constructeur. Dans ce cas, il n'est pas nécessaire d'appeler ApplyChanges().

Au moment où Initalize() est appelée, le périphérique a déjà été créé. L'appel de ApplyChanges entraîne une réinitialisation et déclenche de nouveau l'événement pour Préparer les paramètres du périphérique. Si je ne me trompe pas, les réinitialisations de périphériques à l'égard de XNA ne sont pas vraiment pris en charge sur 360 et vont barf.

J'espère que cela aide, faites le moi savoir.

-Jeff B.

+1

Déplacer tous les changements et les configurations au constructeur fait tous les problèmes disparaissent! JE VOUS REMERCIE! – Kevin

1

Je vous suggère de jeter un oeil à ce thread sur les forums XNA, en particulier le premier message et les messages commençant here. Sans voir le reste du code sur lequel vous travaillez, je ne peux pas dire avec certitude que c'est le problème que vous rencontrez, vous devrez donc le vérifier. Comme l'indique la publication, l'activation du multi-échantillonnage peut ne pas causer directement le problème.

+0

Malheureusement, cela ne l'a pas fait pour moi. J'ai créé une petite application de test et le code que j'ai mis avec ce post est la seule chose qui n'a pas été créée dans le cadre du modèle par défaut ... Je dois manquer quelque chose d'évident/stupide ... merci pour l'info cependant .. – Kevin

+0

J'essaierais d'abord la réponse de JeffB, mais si cela ne fait pas de différence, quelle ligne est exactement celle qui jette l'exception? – Venesectrix