2012-04-05 5 views
0

Ich möchte die Silverlight-PhoneApplicationPage und ihre Steuerelemente auf einige Quadrate zeichnen, die ich als TriangleStrips zeichne.WP7/XNA/Silverlight: Wie kann ich einen SpriteBatch zeichnen, nachdem ich einen TriangleStrip gezeichnet habe?

Der andere Weg ist um funktioniert perfekt in Ordnung, aber die Plätze sind auf meine Kontrollen gezogen - ich etwas tun, wie dies in meiner Draw-Funktion:

private void OnDraw(object sender, GameTimerEventArgs e) 
{ 
    // Clean up device 
    graphicsDevice.Clear(Microsoft.Xna.Framework.Color.Black); 
    graphicsDevice.BlendState = BlendState.AlphaBlend; 
    RasterizerState stat = new RasterizerState(); 
    stat.CullMode = CullMode.None; 
    graphicsDevice.RasterizerState = stat; 

    // Draw Silverlight UI element to Texture 
    elementRenderer.Render(); 

    // Draw Silverlight UI element 
    spriteBatch.Begin(); 
    spriteBatch.Draw(elementRenderer.Texture, Vector2.Zero, Microsoft.Xna.Framework.Color.White); 
    spriteBatch.End(); 

    effect.Texture = tex; 
    effect.TextureEnabled = true; 
    effect.World = BillboardMatrix; 
    effect.View = view; 
    effect.Projection = projection; 

    foreach (EffectPass pass in effect.CurrentTechnique.Passes) 
    { 
     pass.Apply(); 
     graphicsDevice.DrawUserPrimitives<VertexPositionTexture>(PrimitiveType.TriangleStrip, vertices, 0, 2); 
    } 
} 

Wenn ich versuche, die Spritebatch zu ziehen nach die Dreiecke bekomme ich diesen Fehler: "NotSupportedException - XNA Framework Reach-Profil erfordert TextureAddressMode zu Clamp, wenn Texturgrößen, die nicht Potenzen von zwei sind."

private void OnDraw(object sender, GameTimerEventArgs e) 
{ 
    // Clean up device 
    graphicsDevice.Clear(Microsoft.Xna.Framework.Color.Black); 
    graphicsDevice.BlendState = BlendState.AlphaBlend; 
    RasterizerState stat = new RasterizerState(); 
    stat.CullMode = CullMode.None; 
    graphicsDevice.RasterizerState = stat; 

    // Draw Silverlight UI element to Texture 
    elementRenderer.Render(); 

    effect.Texture = tex; 
    effect.TextureEnabled = true; 
    effect.World = BillboardMatrix; 
    effect.View = view; 
    effect.Projection = projection; 

    foreach (EffectPass pass in effect.CurrentTechnique.Passes) 
    { 
     pass.Apply(); 
     graphicsDevice.DrawUserPrimitives<VertexPositionTexture>(PrimitiveType.TriangleStrip, vertices, 0, 2); 
    } 

    // Draw Silverlight UI element 
    spriteBatch.Begin(); 
    spriteBatch.Draw(elementRenderer.Texture, Vector2.Zero, Microsoft.Xna.Framework.Color.White); 
    spriteBatch.End(); 
} 

Ich habe auch versucht graphicsDevice.SamplerStates[i] = SamplerState.LinearClamp; zu setzen, aber es hat nicht funktioniert. Was mache ich falsch?

Antwort

0

Es funktioniert jetzt - ich CullMode geändert:

stat.CullMode = CullMode.None; 

zu

stat.CullMode = CullMode.CullCounterClockwiseFace; 
Verwandte Themen