private void writeDDS(string ddsPath, CNode node)
{
byte[] ddh;
if (node == null) {
node = ((CNode)treeViewTextures.SelectedNode.Tag);
}
using (BinaryReader b = new BinaryReader(File.Open(Application.StartupPath + "\\dxt.ddh", FileMode.Open))) {
ddh = b.ReadBytes(128);
}
using (BinaryWriter b = new BinaryWriter(File.Open(ddsPath, FileMode.Create))) {
b.Write(ddh);
b.Write(node.subNodes[0].subNodes[0].data);
}
using (Stream outStream = File.Open(ddsPath, FileMode.Open)) {
outStream.Seek(12, SeekOrigin.Begin);
// Change Height and Width
outStream.Write(BitConverter.GetBytes((int)node.attributes["height"].data), 0, 4);
outStream.Write(BitConverter.GetBytes((int)node.attributes["width"].data), 0, 4);
// Change size
switch ((string)node.attributes["texelFormat"].data) {
case "dxt1":
outStream.Write(BitConverter.GetBytes(((int)node.attributes["width"].data) * ((int)node.attributes["height"].data) / 2), 0, 4);
break;
default:
outStream.Write(BitConverter.GetBytes(((int)node.attributes["width"].data) * ((int)node.attributes["height"].data)), 0, 4);
break;
}
// Skip 4
outStream.Seek(4, SeekOrigin.Current);
// Change numberMipMapLevels + 1
outStream.Write(BitConverter.GetBytes((int)node.attributes["numberMipMapLevels"].data + 1), 0, 4);
// Skip 52
outStream.Seek(52, SeekOrigin.Current);
// Change Format
outStream.Write(Encoding.UTF8.GetBytes(((string)node.attributes["texelFormat"].data).ToUpper()), 0, 4);
}
}