public void LoadBitMap(string FileName, BntxFile bntxFile) { DecompressedData.Clear(); TexName = Path.GetFileNameWithoutExtension(FileName); bntx = bntxFile; Format = TEX_FORMAT.BC1; FormatType = TEX_FORMAT_TYPE.SRGB; GenerateMipmaps = true; Bitmap Image = new Bitmap(FileName); Image = STGenericTexture.SwapBlueRedChannels(Image); TexWidth = (uint)Image.Width; TexHeight = (uint)Image.Height; MipCount = (uint)GetTotalMipCount(); DecompressedData.Add(BitmapExtension.ImageToByte(Image)); Image.Dispose(); if (DecompressedData.Count == 0) { throw new Exception("Failed to load " + Format); } }
public static DXGI_FORMAT GetDXGI_Format(TEX_FORMAT Format, TEX_FORMAT_TYPE type) { DXGI_FORMAT format = DXGI_FORMAT.DXGI_FORMAT_UNKNOWN; string formatSTR = GetFormatString(Format); string typeSTR = GetFormatTypeString(type, Format); Enum.TryParse(formatSTR + typeSTR, out format); return(format); }
//Get only type private static string GetFormatTypeString(TEX_FORMAT_TYPE type, TEX_FORMAT format) { switch (type) { case TEX_FORMAT_TYPE.FLOAT: if (format == TEX_FORMAT.BC6) { return("SF16"); } else { return("FLOAT"); } case TEX_FORMAT_TYPE.UFLOAT: if (format == TEX_FORMAT.BC6) { return("UF16"); } else { return("UFLOAT"); } case TEX_FORMAT_TYPE.SINT: return("SINT"); case TEX_FORMAT_TYPE.UINT: return("UINT"); case TEX_FORMAT_TYPE.SNORM: return("SNORM"); case TEX_FORMAT_TYPE.UNORM: return("UNORM"); case TEX_FORMAT_TYPE.TYPELESS: return("TYPELESS"); case TEX_FORMAT_TYPE.SRGB: return("UNORM_SRGB"); default: return(""); } }
public void LoadDDS(string FileName, BntxFile bntxFile, byte[] FileData = null, TextureData tree = null) { TexName = Path.GetFileNameWithoutExtension(FileName); DDS dds = new DDS(); if (FileData != null) { dds.Load(new FileReader(new MemoryStream(FileData))); } else { dds.Load(new FileReader(FileName)); } MipCount = dds.header.mipmapCount; TexWidth = dds.header.width; TexHeight = dds.header.height; arrayLength = 1; if (dds.header.caps2 == (uint)DDS.DDSCAPS2.CUBEMAP_ALLFACES) { arrayLength = 6; } DataBlockOutput.Add(dds.bdata); var formats = dds.GetFormat(); Format = formats.Item1; FormatType = formats.Item2; Texture tex = FromBitMap(DataBlockOutput[0], this); if (tree != null) { tree.LoadTexture(tex, 1); } else { textureData = new TextureData(tex, bntxFile); } }
public static byte[] CompressBlock(byte[] data, int width, int height, TEX_FORMAT format, TEX_FORMAT_TYPE type, float alphaRef) { if (IsCompressed(format)) { return(DDSCompressor.CompressBlock(data, width, height, DDS.GetDXGI_Format(format, type), alphaRef)); } else if (IsAtscFormat(format)) { return(null); } else { return(DDSCompressor.EncodePixelBlock(data, width, height, DDS.GetDXGI_Format(format, type))); } }
public static Tuple <SurfaceFormat, SurfaceFormatType> GetSurfaceFormat(TEX_FORMAT format, TEX_FORMAT_TYPE type) { var surfaceFormat = SurfaceFormat.Invalid; var surfaceType = SurfaceFormatType.UNORM; Enum.TryParse(format.ToString(), out surfaceFormat); Enum.TryParse(type.ToString(), out surfaceType); return(Tuple.Create(surfaceFormat, surfaceType)); }
public Tuple <TEX_FORMAT, TEX_FORMAT_TYPE> GetFormat() { TEX_FORMAT format = TEX_FORMAT.UNKNOWN; TEX_FORMAT_TYPE type = TEX_FORMAT_TYPE.UNORM; if (DX10header != null) { string DXGIFormatSTR = DX10header.DXGI_Format.ToString(); //Set the type. if (DXGIFormatSTR.Contains("SRGB")) { type = TEX_FORMAT_TYPE.SRGB; } else if (DXGIFormatSTR.Contains("SNORM")) { type = TEX_FORMAT_TYPE.SNORM; } else if (DXGIFormatSTR.Contains("UNORM")) { type = TEX_FORMAT_TYPE.UNORM; } else if (DXGIFormatSTR.Contains("UF16")) { type = TEX_FORMAT_TYPE.UFLOAT; } else if (DXGIFormatSTR.Contains("SF16")) { type = TEX_FORMAT_TYPE.FLOAT; } else if (DXGIFormatSTR.Contains("FLOAT")) { type = TEX_FORMAT_TYPE.FLOAT; } else if (DXGIFormatSTR.Contains("UFLOAT")) { type = TEX_FORMAT_TYPE.UFLOAT; } else if (DXGIFormatSTR.Contains("TYPELESS")) { type = TEX_FORMAT_TYPE.TYPELESS; } //Set the format. if (DXGIFormatSTR.Contains("DXGI_FORMAT_BC1")) { format = TEX_FORMAT.BC1; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_BC2")) { format = TEX_FORMAT.BC2; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_BC3")) { format = TEX_FORMAT.BC3; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_BC3")) { format = TEX_FORMAT.BC3; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_BC4")) { format = TEX_FORMAT.BC4; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_BC4")) { format = TEX_FORMAT.BC4; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_BC5")) { format = TEX_FORMAT.BC5; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_BC6")) { format = TEX_FORMAT.BC6; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_BC7")) { format = TEX_FORMAT.BC7; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_R8G8B8A8")) { format = TEX_FORMAT.R8_G8_B8_A8; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_R16")) { format = TEX_FORMAT.R16; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_R8G8")) { format = TEX_FORMAT.R8G8; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_A8")) { format = TEX_FORMAT.A8; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_A8")) { format = TEX_FORMAT.A8; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_R1")) { format = TEX_FORMAT.R1; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_R16G16")) { format = TEX_FORMAT.R16_G16; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_G8R8_G8B8")) { format = TEX_FORMAT.G8_R8_G8_B8; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_D32_FLOAT_S8X24")) { format = TEX_FORMAT.D32_S8_X24; } else if (DXGIFormatSTR.Contains("DXGI_FORMAT_D32")) { format = TEX_FORMAT.D32; } } switch (header.ddspf.fourCC) { case FOURCC_DXT1: format = TEX_FORMAT.BC1; break; case FOURCC_DXT2: format = TEX_FORMAT.BC2; break; case FOURCC_DXT3: format = TEX_FORMAT.BC2; break; case FOURCC_DXT4: format = TEX_FORMAT.BC3; break; case FOURCC_DXT5: format = TEX_FORMAT.BC3; break; case FOURCC_ATI1: format = TEX_FORMAT.BC4; break; case FOURCC_BC4U: format = TEX_FORMAT.BC4; break; case FOURCC_ATI2: format = TEX_FORMAT.BC5; break; case FOURCC_BC5U: format = TEX_FORMAT.BC5; break; default: format = TEX_FORMAT.UNKNOWN; break; } return(Tuple.Create(format, type)); }
public void SetFlags(TEX_FORMAT Format, TEX_FORMAT_TYPE type) { SetFlags(GetDXGI_Format(Format, type)); }