Created
April 12, 2014 21:13
Revisions
-
Matthew Lawson created this gist
Apr 12, 2014 .There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,71 @@ // This was made by aaro4130 on the Unity forums. Thanks boss! // It's been optimized and slimmed down for the purpose of loading Quake 3 TGA textures from memory streams. using System; using System.IO; using UnityEngine; public static class TGALoader { public static Texture2D LoadTGA(string fileName) { using (var imageFile = File.OpenRead(fileName)) { return LoadTGA(imageFile); } } public static Texture2D LoadTGA(Stream TGAStream) { using (BinaryReader r = new BinaryReader(TGAStream)) { // Skip some header info we don't care about. // Even if we did care, we have to move the stream seek point to the beginning, // as the previous method in the workflow left it at the end. r.BaseStream.Seek(12, SeekOrigin.Begin); short width = r.ReadInt16(); short height = r.ReadInt16(); int bitDepth = r.ReadByte(); // Skip a byte of header information we don't care about. r.BaseStream.Seek(1, SeekOrigin.Current); Texture2D tex = new Texture2D(width, height); Color32[] pulledColors = new Color32[width * height]; if (bitDepth == 32) { for (int i = 0; i < width * height; i++) { byte red = r.ReadByte(); byte green = r.ReadByte(); byte blue = r.ReadByte(); byte alpha = r.ReadByte(); pulledColors [i] = new Color32(blue, green, red, alpha); } } else if (bitDepth == 24) { for (int i = 0; i < width * height; i++) { byte red = r.ReadByte(); byte green = r.ReadByte(); byte blue = r.ReadByte(); pulledColors [i] = new Color32(blue, green, red, 1); } } else { throw new Exception("TGA texture had non 32/24 bit depth."); } tex.SetPixels32(pulledColors); tex.Apply(); return tex; } } }