private void WriteHeader(bool alpha) { VTFHeader header = new VTFHeader(); header.V = 'V'; header.T = 'T'; header.F = 'F'; header.Null = '\0'; header.VersionMajor = 7; header.VersionMinor = 2; header.HeaderSize = 0x50; header.Width = (ushort)_baseImageSize; header.Height = (ushort)_baseImageSize; header.Flags = 0x2200; header.Frames = (ushort)_imageFrames; header.FirstFrame = 0; header.Padding00 = 0; header.Padding01 = 0; header.Padding02 = 0; header.Padding03 = 0; header.Reflectivity0 = 1; header.Reflectivity1 = 1; header.Reflectivity2 = 1; header.Padding10 = 0; header.Padding11 = 0; header.Padding12 = 0; header.Padding13 = 0; header.BumpmapScale = 1; header.HighResImageFormat = (uint)(alpha ? 0xF : 0xD); header.MipmapCount = (byte)(_numMipmaps); header.LowResImageFormat = (uint)0xD; header.LowResImageHeight = (byte)(_baseImageSize <= 16 ? _baseImageSize : 16); header.LowResImageWidth = (byte)(_baseImageSize <= 16 ? _baseImageSize : 16); header.Depth = 1; // Create a byte array to hold our header and initialize the elements to 0. // The last 15 bytes should be padding (0s) int size = Marshal.SizeOf(header); byte[] arr = new byte[size + 15]; for (int i = 0; i < size; i++) { arr[i] = 0; } IntPtr ptr = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(header, ptr, true); Marshal.Copy(ptr, arr, 0, size); Marshal.FreeHGlobal(ptr); _output.WriteData(arr); }