using System; using System.Collections.Generic; using System.Text; using gr2lib.core.helpers; namespace gr2lib.core.coretypes.implementation { public interface ITexture { string FromFileName { get; set; } int TextureType { get; set; } int Width { get; set; } int Height { get; set; } int Encoding { get; set; } int SubFormat { get; set; } Layout Layout { get; set; } List Images { get; set; } IntPtr ExtendedData { get; set; } } public class Texture : ITexture { private string _FromFileName; private int _TextureType; private int _Width; private int _Height; private int _Encoding; private int _SubFormat; private Layout _Layout; private List _Images; private IntPtr _ExtendedData; public IntPtr NativePointer; public Texture() { this.FromFileName = ""; this.TextureType = 0; this.Width = 0; this.Height = 0; this.Encoding = 0; this.SubFormat = 0; this.Layout = new Layout(); this.Images = new List(); this.ExtendedData = IntPtr.Zero; this.NativePointer = IntPtr.Zero; } internal static Texture ReadFromMemory(IntPtr pointer) { if (pointer == IntPtr.Zero) return null; native.Texture native = Helpers.ReadFromMemory(pointer); Texture managed = ReadFromNative(native); managed.NativePointer = pointer; return managed; } internal static Texture ReadFromNative(native.Texture native) { Texture managed = new Texture(); managed.FromFileName = native.FromFileName; managed.TextureType = native.TextureType; managed.Width = native.Width; managed.Height = native.Height; managed.Encoding = native.Encoding; managed.SubFormat = native.SubFormat; managed.Layout = Layout.ReadFromNative(native.Layout); IntPtr[] images = Helpers.ReadPtrArrayFromMemory(native.Images); int length = images.Length; managed.Images = new List(length); foreach (IntPtr ptr in images) { managed.Images.Add(new Image()); } for (int i = 0; i < length; i++) { managed.Images[i] = Image.ReadFromMemory(images[i]); } managed.ExtendedData = native.ExtendedData; return managed; } #region ITexture Members public string FromFileName { get { return _FromFileName; } set { _FromFileName = value; } } public int TextureType { get { return _TextureType; } set { _TextureType = value; } } public int Width { get { return _Width; } set { _Width = value; } } public int Height { get { return _Height; } set { _Height = value; } } public int Encoding { get { return _Encoding; } set { _Encoding = value; } } public int SubFormat { get { return _SubFormat; } set { _SubFormat = value; } } public Layout Layout { get { return _Layout; } set { _Layout = value; } } public List Images { get { return _Images; } set { _Images = value; } } public IntPtr ExtendedData { get { return _ExtendedData; } set { _ExtendedData = value; } } #endregion } }