source: OniSplit/Motoko/TextureDatReader.cs@ 1190

Last change on this file since 1190 was 1114, checked in by iritscen, 5 years ago

Adding OniSplit source code (v0.9.99.0). Many thanks to Neo for all his work over the years.

File size: 2.4 KB
Line 
1using System;
2using System.Collections.Generic;
3using Oni.Imaging;
4
5namespace Oni.Motoko
6{
7 internal static class TextureDatReader
8 {
9 public static Texture ReadInfo(InstanceDescriptor txmp)
10 {
11 var texture = new Texture
12 {
13 Name = txmp.Name
14 };
15
16 using (var reader = txmp.OpenRead(128))
17 {
18 texture.Flags = (TextureFlags)reader.ReadInt32();
19 texture.Width = reader.ReadInt16();
20 texture.Height = reader.ReadInt16();
21 texture.Format = (TextureFormat)reader.ReadInt32();
22 reader.Skip(8);
23
24 if (txmp.IsMacFile)
25 reader.Skip(4);
26
27 reader.Skip(4);
28 }
29
30 return texture;
31 }
32
33 public static Texture Read(InstanceDescriptor txmp)
34 {
35 var texture = new Texture
36 {
37 Name = txmp.Name
38 };
39
40 int rawOffset;
41
42 using (var reader = txmp.OpenRead(128))
43 {
44 texture.Flags = (TextureFlags)reader.ReadInt32();
45 texture.Width = reader.ReadInt16();
46 texture.Height = reader.ReadInt16();
47 texture.Format = (TextureFormat)reader.ReadInt32();
48 reader.Skip(8);
49
50 if (txmp.IsMacFile)
51 reader.Skip(4);
52
53 rawOffset = reader.ReadInt32();
54 }
55
56 using (var rawReader = txmp.GetSepReader(rawOffset))
57 ReadSurfaces(texture, rawReader);
58
59 return texture;
60 }
61
62 private static void ReadSurfaces(Texture texture, BinaryReader reader)
63 {
64 var format = texture.Format.ToSurfaceFormat();
65 int width = texture.Width;
66 int height = texture.Height;
67 bool hasMipMaps = (texture.Flags & TextureFlags.HasMipMaps) != 0;
68
69 do
70 {
71 var surface = new Surface(width, height, format);
72 reader.Read(surface.Data, 0, surface.Data.Length);
73 texture.Surfaces.Add(surface);
74
75 width = Math.Max(width >> 1, 1);
76 height = Math.Max(height >> 1, 1);
77
78 } while (hasMipMaps && (width > 1 || height > 1));
79 }
80 }
81}
Note: See TracBrowser for help on using the repository browser.