Sto provando a disegnare sullo schermo pixel per pixel usando XNA, ma sto avendo problemi con le risorse. Ho pensato che il modo migliore sarebbe avere 1 texture che aggiorni ogni fotogramma, ma ho difficoltà ad aggiornarlo. Ecco quello che ho finora, proprio come un test:Come disegnare 2D pixel per pixel in XNA?
Texture2D canvas;
Rectangle tracedSize;
UInt32[] pixels;
protected override void Initialize()
{
tracedSize = GraphicsDevice.PresentationParameters.Bounds;
canvas = new Texture2D(GraphicsDevice, tracedSize.Width, tracedSize.Height, false, SurfaceFormat.Color);
pixels = new UInt32[tracedSize.Width * tracedSize.Height];
base.Initialize();
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
pixels[100] = 0xFF00FF00;
canvas.SetData<UInt32>(pixels, 0, tracedSize.Width * tracedSize.Height);
spriteBatch.Begin();
spriteBatch.Draw(canvas, new Rectangle(0, 0, tracedSize.Width, tracedSize.Height), Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
Quando Draw() viene chiamato per la seconda volta, ottengo il seguente errore:.
"L'operazione è stata interrotta L'utente non può modificare una risorsa che è stata impostata su un dispositivo o dopo che è stata utilizzata all'interno di una staffa di piastrellatura. "
Se provo a creare una nuova Texture2D in Draw(), ottengo rapidamente un errore di memoria insufficiente. Questo è per Windows Phone. Sembra che sto provando a farlo nel modo sbagliato, quali altre opzioni devo fare per farlo funzionare?
Non conoscevo la risposta, quindi ho cercato su google "struttura procedurale xna" (che è ciò che viene chiamato questo genere di cose). Non sembra essere un modo semplice e integrato per farlo. Ci sono almeno tre suggerimenti comuni (buffering, comandi texture GPU, farlo in uno shader). L'ultimo è ovviamente ottimale, ma richiede conoscenze di programmazione shader. Potresti voler eseguire la stessa ricerca e sfogliare ciò che è là fuori. – Tergiver