2010-09-29 9 views
0

La ligne suivante rencontrera parfois des erreurs dans mon programme .NET XNA.Exception InvalidOperationException dans XNA

VertexBuffer v = new VertexBuffer(GraphicsDevice, typeof(VertexPositionColorTexture), 4, BufferUsage.None); 

L'exception qui est levée est InvalidOperationException, et il me dit que:

"The current vertex declaration does not include all the elements 
required by the current vertex shader." 

J'utilise BasicEffect comme mon shader. Maintenant, je change les formats dans les buffers de vertex que je produis, mais ils sont sortis tout de suite. Je ne lie pas plusieurs tampons à la fois. Ils sont simplement sortis avec les fonctions primitives tout de suite. Pour mes différents formats (3 je crois), certains n'ont pas de textures (VertexPositionColor), d'autres n'ont pas de couleurs (VertexPositionTexture), etc. J'ajuste aussi TexturesEnabled, VertexColorEnabled, etc. Je demande aussi Appliquer sur chacun de la EffectPass (il n'y a qu'une seule passe, puisque le nombre est 1)

effect.CurrentTechnique.Passes.First<EffectPass>().Apply(); 

Cette ligne est faite avant la première donnée.

En ce moment, il est erroné à un endroit où je me prépare à dessiner un sprite TriangleStrip à l'écran. Dans ce cas, j'utilise VertexColoring, TextureEnabled, Texture est défini sur celui que je veux sortir (le débogage de cette valeur montre qu'elle est bien chargée). LightingEnabled est faux. Je voudrais aussi noter que c'est pour un projet Windows Phone 7.

+0

XNA pour ?? Xbox, Zune, PC? –

+0

Windows Phone 7. Désolé! – Kyle

+0

C'est une erreur étrange à obtenir lors de la création d'un VertexBuffer. Le VertexShader actuel ne doit pas être référencé lors de sa création. Le contexte de votre code est un peu flou. Vous ne créez pas l'objet VertexBuffer pendant l'appel Draw, n'est-ce pas? – Empyrean

Répondre

0

L'a corrigé.

L'exception levée n'a pas été réellement provoquée par ce que je faisais dans cet appel de rendu réel, mais plutôt par le précédent. Dans l'appel de rendu précédent, je rendais quelque chose d'autre avec VertexColorEnabled défini sur true, alors qu'il devait être faux.

Pour une raison quelconque, il n'a pas surgi jusqu'à ce point, ce qui l'a rendu difficile à comprendre.

Questions connexes