Как рисовать 2D попиксельно в XNA?

Я пытаюсь рисовать на экране попиксельно с помощью XNA, но у меня проблемы с Ресурсы. Я думал, что лучше всего будет иметь 1 текстуру, которая обновляет каждый кадр, но у меня проблемы с ее обновлением. Вот что у меня есть, просто в качестве теста:

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

Когда Draw () вызывается во второй раз, я получаю следующую ошибку:

«Операция была прервана. Вы не можете изменять ресурс, имеющий был установлен на устройстве или после того, как он был использован в тайловой скобке »

Если я попытаюсь создать новый Texture2D в Draw (), я быстро получаю ошибку нехватки памяти. Это для Windows Phone. Похоже, я пытаюсь сделать это неправильно, какие еще варианты у меня есть, чтобы заставить его работать?

7
задан Curyous 29 January 2011 в 14:46
поделиться