/[gr2lib]/trunk/gr2lib/core/coretypes/implementation/Texture.cs
ViewVC logotype

Diff of /trunk/gr2lib/core/coretypes/implementation/Texture.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 72 by william, Thu Jul 15 14:22:00 2010 UTC revision 166 by william, Thu Jul 22 14:24:07 2010 UTC
# Line 3  using System.Collections.Generic; Line 3  using System.Collections.Generic;
3  using System.Text;  using System.Text;
4  using gr2lib.core.helpers;  using gr2lib.core.helpers;
5    
6    using gr2lib.core.interfaces;
7    using System.Diagnostics;
8    using gr2lib.core.exceptions;
9    using gr2lib.core.ui.helpers;
10    using System.ComponentModel;
11    using gr2lib.core.typedefs;
12    using gr2lib.core.ui.typeeditors;
13    using System.Drawing.Design;
14    
15  namespace gr2lib.core.coretypes.implementation  namespace gr2lib.core.coretypes.implementation
16  {  {
   
     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<Image> Images { get; set; }  
         IntPtr ExtendedData { get; set; }  
     }  
   
17      public class Texture : ITexture      public class Texture : ITexture
18      {      {
19          private string _FromFileName;          private GrannyRigResource _rigResource;
20          private int _TextureType;  
21            private FilePath _FromFileName;
22            private NameValuePair<string, granny_texture_type> _TextureType;
23          private int _Width;          private int _Width;
24          private int _Height;          private int _Height;
25          private int _Encoding;          private NameValuePair<string, granny_texture_encoding> _Encoding;
26          private int _SubFormat;          private NameValuePair<string, granny_pixel_layout> _SubFormat;
27          private Layout _Layout;          private Layout _Layout;
28          private List<Image> _Images;          private List<Image> _Images;
         private IntPtr _ExtendedData;  
29    
         public IntPtr NativePointer;  
30    
31          public Texture()          public override string ToString()
32          {          {
33                return this.FromFileName.Name;
34            }
35    
36            //private string _ParentResourceName;
37            protected internal string ParentResourceName { get { return "Textures"; } }
38    
39            public Texture()// : base("Textures")
40            {
41                this.FromFileName = "";
42                this.TextureType = new NameValuePair<string, granny_texture_type>(coreapi.GetGrannyEnumTypeString<granny_texture_type>(granny_texture_type.GrannyColorMapTextureType), granny_texture_type.GrannyColorMapTextureType);
43                this.Width = 0;
44                this.Height = 0;
45                this.Encoding = new NameValuePair<string, granny_texture_encoding>(coreapi.GetGrannyEnumTypeString<granny_texture_encoding>(granny_texture_encoding.GrannyBinkTextureEncoding), granny_texture_encoding.GrannyBinkTextureEncoding);
46                this.SubFormat = new NameValuePair<string, granny_pixel_layout>(coreapi.GetGrannyEnumTypeString<granny_pixel_layout>(granny_pixel_layout.GrannyBGRA8888PixelFormat), granny_pixel_layout.GrannyBGRA8888PixelFormat);
47                this.Layout = new Layout();
48                this.Images = new List<Image>();
49                //this.ExtendedData = new IntPtr();
50                //this.NativePointer = IntPtr.Zero;
51                this._rigResource = new GrannyRigResource();
52            }
53            public Texture(int index)
54            {
55                this.FromFileName = "";
56                this.TextureType = new NameValuePair<string, granny_texture_type>(coreapi.GetGrannyEnumTypeString<granny_texture_type>(granny_texture_type.GrannyColorMapTextureType), granny_texture_type.GrannyColorMapTextureType);
57                this.Width = 0;
58                this.Height = 0;
59                this.Encoding = new NameValuePair<string, granny_texture_encoding>(coreapi.GetGrannyEnumTypeString<granny_texture_encoding>(granny_texture_encoding.GrannyBinkTextureEncoding), granny_texture_encoding.GrannyBinkTextureEncoding);
60                this.SubFormat = new NameValuePair<string, granny_pixel_layout>(coreapi.GetGrannyEnumTypeString<granny_pixel_layout>(granny_pixel_layout.GrannyBGRA8888PixelFormat), granny_pixel_layout.GrannyBGRA8888PixelFormat);
61                this.Layout = new Layout();
62                this.Images = new List<Image>();
63                //this.ExtendedData = new IntPtr();
64                //this.NativePointer = IntPtr.Zero;
65                this._rigResource = new GrannyRigResource();
66                this.Index = index;
67            }
68    
69            internal static native.Texture AssignToStructure(Texture texture)
70            {
71                native.Texture _texture_struct = new gr2lib.core.coretypes.native.Texture();
72    
73                //_texture_struct.Encoding = texture.Encoding;
74                //_texture_struct.ExtendedData = texture.ExtendedData;
75                //_texture_struct.FromFileName = texture.FromFileName.FullPath;
76                //_texture_struct.Height = texture.Height;
77                ////_texture_struct.Images = texture.Images;
78                //_texture_struct.Layout = Layout.AssignToStructure(texture.Layout);
79                //_texture_struct.SubFormat = texture.SubFormat;
80                //_texture_struct.TextureType = texture.TextureType;
81                //_texture_struct.Width = texture.Width;
82    
83                return _texture_struct;
84          }          }
85    
86          internal static Texture ReadFromMemory(IntPtr pointer)          internal static Texture ReadFromMemory(IntPtr pointer)
87          {          {
88                try
89                {
90              if (pointer == IntPtr.Zero) return null;              if (pointer == IntPtr.Zero) return null;
91              native.Texture native = Helpers.ReadFromMemory<native.Texture>(pointer);              native.Texture native = Helpers.ReadFromMemory<native.Texture>(pointer);
92              Texture managed = ReadFromNative(native);              Texture managed = ReadFromNative(native);
93              managed.NativePointer = pointer;              managed.NativePointer = pointer;
94              return managed;              return managed;
95                }
96                catch (Exception ex)
97                {
98                    StackTrace st = new StackTrace(true);
99                    #if  ENABLE_EXCEPTION_OUTPUT_TO_CONSOLE
100                    Granny2ExceptionWriter.WriteToConsole(ex,st);
101    #endif
102                    return default(Texture);
103                }
104          }          }
105    
106          internal static Texture ReadFromNative(native.Texture native)          internal static Texture ReadFromNative(native.Texture native)
107          {          {
108              Texture managed = new Texture();              try
             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.Image>(native.Images);  
             int length = images.Length;  
             managed.Images = new List<Image>(length);  
             foreach (IntPtr ptr in images)  
109              {              {
110                  managed.Images.Add(new Image());                  Texture managed = new Texture();
111                    managed.FromFileName = native.FromFileName;
112                    managed.TextureType = new NameValuePair<string, granny_texture_type>(coreapi.GetGrannyEnumTypeString<granny_texture_type>((granny_texture_type)native.TextureType), (granny_texture_type)native.TextureType);
113                    managed.Width = native.Width;
114                    managed.Height = native.Height;
115                    managed.Encoding = new NameValuePair<string, granny_texture_encoding>(coreapi.GetGrannyEnumTypeString<granny_texture_encoding>((granny_texture_encoding)native.Encoding), (granny_texture_encoding)native.Encoding);
116                    managed.SubFormat = new NameValuePair<string, granny_pixel_layout>(coreapi.GetGrannyEnumTypeString<granny_pixel_layout>((granny_pixel_layout)native.SubFormat), (granny_pixel_layout)native.SubFormat);
117                    managed.Layout = Layout.ReadFromNative(native.Layout);
118                    IntPtr[] images = Helpers.ReadPtrArrayFromMemory<native.Image>(native.Images);
119                    int length = images.Length;
120                    managed.Images = new List<Image>(length);
121                    foreach (IntPtr ptr in images)
122                    {
123                        Image _tmp = new Image();
124                        _tmp.NativePointer = ptr;
125                        managed.Images.Add(_tmp);
126                    }
127                    for (int i = 0; i < length; i++)
128                    {
129                        managed.Images[i] = Image.ReadFromMemory(images[i]);  
130                    }
131    
132                    for (int i = 0; i < managed.Images.Count; i++)
133                    {
134                        for (int j = 0; j < managed.Images[i].MIPLevels.Count; j++)
135                        {
136                            for (int k = 0; k < managed.Images[i].MIPLevels[j].Pixels.Count; k++)
137                            {
138                                managed.Images[i].MIPLevels[j].Pixels[k].ReferenceTexture = managed;
139                            }
140                        }
141                    }
142    
143    
144                    managed.ExtendedData = native.ExtendedData;
145                    return managed;
146              }              }
147              for (int i = 0; i < length; i++)              catch (Exception ex)
148              {              {
149                  managed.Images[i] = Image.ReadFromMemory(images[i]);                  StackTrace st = new StackTrace(true);
150    #if  ENABLE_EXCEPTION_OUTPUT_TO_CONSOLE
151                    Granny2ExceptionWriter.WriteToConsole(ex,st);
152    #endif
153                    return default(Texture);
154              }              }
             managed.ExtendedData = native.ExtendedData;  
             return managed;  
155          }          }
156    
157          #region ITexture Members          #region ITexture Members
158          public string FromFileName { get { return _FromFileName; } set { _FromFileName = value; } }  
159          public int TextureType { get { return _TextureType; } set { _TextureType = value; } }          //[RefreshPropertiesAttribute(RefreshProperties.All)]
160            //public string TextureTypeFormat
161            //{
162            //    get
163            //    {
164            //        string texture_type = "Unknown Texture Type";
165    
166            //        foreach (int val in Enum.GetValues(typeof(granny_texture_type)))
167            //        {
168            //            if (val == this.TextureType)
169            //            {
170            //                texture_type = Enum.GetName(typeof(granny_texture_type),val);
171            //                break;
172            //            }
173            //        }
174            //        return texture_type;
175            //    }
176            //}
177            //[RefreshPropertiesAttribute(RefreshProperties.All)]
178            //public string EncodingFormat
179            //{
180            //    get
181            //    {
182            //        string encodingformat = "Unknown Encoding Format";
183    
184            //        foreach (int val in Enum.GetValues(typeof(granny_texture_encoding)))
185            //        {
186            //            if (val == this.Encoding)
187            //            {
188            //                encodingformat = Enum.GetName(typeof(granny_texture_encoding), val);
189            //                break;
190            //            }
191            //        }
192            //        return encodingformat;
193            //    }
194            //}
195    
196            [RefreshPropertiesAttribute(RefreshProperties.All)]
197            public FilePath FromFileName { get { return _FromFileName; } set { _FromFileName = value; } }
198            [RefreshPropertiesAttribute(RefreshProperties.All)]
199            [Editor(typeof(UIComboValueSelector<granny_texture_type, int>), typeof(UITypeEditor))]
200            public NameValuePair<string, granny_texture_type> TextureType { get { return _TextureType; } set { _TextureType = value; } }
201            [RefreshPropertiesAttribute(RefreshProperties.All)]
202          public int Width { get { return _Width; } set { _Width = value; } }          public int Width { get { return _Width; } set { _Width = value; } }
203            [RefreshPropertiesAttribute(RefreshProperties.All)]
204          public int Height { get { return _Height; } set { _Height = value; } }          public int Height { get { return _Height; } set { _Height = value; } }
205          public int Encoding { get { return _Encoding; } set { _Encoding = value; } }          [RefreshPropertiesAttribute(RefreshProperties.All)]
206          public int SubFormat { get { return _SubFormat; } set { _SubFormat = value; } }          [Editor(typeof(UIComboValueSelector<granny_texture_encoding, int>), typeof(UITypeEditor))]
207            public NameValuePair<string, granny_texture_encoding> Encoding { get { return _Encoding; } set { _Encoding = value; } }
208            [RefreshPropertiesAttribute(RefreshProperties.All)]
209            [Editor(typeof(UIComboValueSelector<granny_pixel_layout, int>), typeof(UITypeEditor))]
210            public NameValuePair<string, granny_pixel_layout> SubFormat { get { return _SubFormat; } set { _SubFormat = value; } }
211            [RefreshPropertiesAttribute(RefreshProperties.All)]
212            [Browsable(true)]
213          public Layout Layout { get { return _Layout; } set { _Layout = value; } }          public Layout Layout { get { return _Layout; } set { _Layout = value; } }
214            [RefreshPropertiesAttribute(RefreshProperties.All)]
215          public List<Image> Images { get { return _Images; } set { _Images = value; } }          public List<Image> Images { get { return _Images; } set { _Images = value; } }
216            #endregion
217    
218            #region INativePointer Members
219            private IntPtr _NativePointer;
220            public IntPtr NativePointer { get { return _NativePointer; } set { _NativePointer = value; } }
221            #endregion
222    
223            #region IExtendedData Members
224            private IntPtr _ExtendedData;
225          public IntPtr ExtendedData { get { return _ExtendedData; } set { _ExtendedData = value; } }          public IntPtr ExtendedData { get { return _ExtendedData; } set { _ExtendedData = value; } }
226          #endregion          #endregion
227    
228            #region IResource Members
229            private int _index;
230            [RefreshPropertiesAttribute(RefreshProperties.All)]
231            internal int Index { get { return _index; } set { _index = value; } }
232            #endregion
233            #region IEmbeddedResource Members
234            [RefreshPropertiesAttribute(RefreshProperties.All)]
235            internal string IndexName { get { return new GrannyRigResource("Texture", this.Index, this.Name).ResourceBlockIndexFormat; } }
236            [RefreshPropertiesAttribute(RefreshProperties.All)]
237            internal string FullName { get { return new GrannyRigResource("Texture", this.Index, this.Name).ResourceBlockFormat; } }
238            [RefreshPropertiesAttribute(RefreshProperties.All)]
239            internal string Name { get { return this.FromFileName; } set { this.FromFileName = value; } }
240            #endregion
241      }      }
242  }  }

Legend:
Removed from v.72  
changed lines
  Added in v.166

  ViewVC Help
Powered by ViewVC 1.1.22