[XNA] Cambios en la API gráfica de XNA4: adiós ResolveTexture2D

Lo cierto esque aunque todavía BETA, la nueva API de XNA 4 contiene algunos cambios que nos pueden hacer un poco la puñeta si estamos migrando un juego de XNA 3.1 a 4.0. Entre ellos, la desaparición e ResolveTexture2D. Esta clase podía usarse por ejemplo para hacer “capturas de pantalla”. ¿Para qué queremos hacer una captura de pantalla en un juego? Pues a mi se me ocurre que por motivos de depuración, y también para hacer efectos de fade-in y fade-out. Yo lo estaba usando en un proyecto personal para hacer fade-outs en los menús del juego. Pues bien, para quien no tenga muchas ganas de buscarse la vida, el código que nos permite capturar la pantalla en XNA 4 se basa en la modificación del RenderTarget y es el siguiente:

protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            RenderTarget2D render = new RenderTarget2D(GraphicsDevice,
                GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height,
                false, SurfaceFormat.Color, DepthFormat.Depth24Stencil8);

            GraphicsDevice.SetRenderTarget(render);

            spriteBatch.Begin();
            spriteBatch.Draw(texture, Vector2.Zero, Color.White);
            spriteBatch.End();

            System.IO.FileStream fs = new System.IO.FileStream(@”archivo.png”, System.IO.FileMode.OpenOrCreate);

            GraphicsDevice.SetRenderTarget(null);
            render.SaveAsPng(fs, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height);

            fs.Flush();        

            base.Draw(gameTime);
        } 

Como véis se trata de crear un nuevo RenderTarget, establecerlo en el Graphics Device, hacer el render, y volver a dejar el RenderTarget del GraphicsDevice a su estado previo, después de eso podemos hacer lo que queramos con la textura. Aquí claramente estoy guardando la textura como PNG, pero también podríais guardarla en un objeto textura (en Phone por ejemplo no podéis guardar una imagen en la C:, sí en el isolatedstorage pero eso sería otra historia),  Esto sería simplemente lo siguiente:

 Texture2D newTexture = render;

2 comentarios en “[XNA] Cambios en la API gráfica de XNA4: adiós ResolveTexture2D”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *