using FSO.Common;
using FSO.Common.Utils;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System.IO;
namespace FSO.Files.Formats.IFF.Chunks
{
///
/// Texture for a 3D Mesh. Can be jpg, png or bmp.
///
public class MTEX : IffChunk
{
private byte[] data;
private Texture2D Cached;
///
/// Reads a BMP chunk from a stream.
///
/// An Iff instance.
/// A Stream object holding a BMP chunk.
public override void Read(IffFile iff, Stream stream)
{
data = new byte[stream.Length];
stream.Read(data, 0, (int)stream.Length);
}
public override bool Write(IffFile iff, Stream stream)
{
stream.Write(data, 0, data.Length);
return true;
}
public Texture2D GetTexture(GraphicsDevice device)
{
if (Cached == null)
{
Cached = ImageLoader.FromStream(device, new MemoryStream(data));
if (FSOEnvironment.EnableNPOTMip)
{
var data = new Color[Cached.Width * Cached.Height];
Cached.GetData(data);
var n = new Texture2D(device, Cached.Width, Cached.Height, true, SurfaceFormat.Color);
TextureUtils.UploadWithMips(n, device, data);
Cached.Dispose();
Cached = n;
}
}
if (!IffFile.RETAIN_CHUNK_DATA) data = null;
return Cached;
}
public void SetData(byte[] data)
{
this.data = data;
Cached = null;
}
}
}