Estoy tratando de dibujar en la pantalla píxel por píxel usando XNA, pero tengo problemas con los recursos. Pensé que la mejor manera sería tener 1 textura que actualice cada fotograma, pero tengo problemas para actualizarla. Esto es lo que tengo hasta ahora, al igual que una prueba:Cómo dibujar 2D píxel por píxel en 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);
}
Cuando Draw() se llama la segunda vez, me sale el siguiente error:.
"La operación fue abortada Usted no puede modifique un recurso que se haya configurado en un dispositivo, o después de que se haya utilizado dentro de un paréntesis de mosaico ".
Si trato de crear una nueva Texture2D en Draw(), obtengo rápidamente un error de falta de memoria. Esto es para Windows Phone. Parece que estoy tratando de hacerlo de la manera incorrecta, ¿qué otras opciones tengo para que funcione?
No sabía la respuesta, así que busqué en Google "xna textura de procedimiento" (que es lo que se llama este tipo de cosas). No parece haber una forma simple e integrada de hacerlo. Hay al menos tres sugerencias comunes (almacenamiento en búfer, comandos de textura de GPU, hacerlo en un sombreador). El último es obviamente óptimo, pero requiere conocimiento de programación de sombreadores. Es posible que desee realizar la misma búsqueda y examinar lo que hay por ahí. – Tergiver