示例#1
0
        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);
            }
        }
示例#2
0
        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);
        }
示例#3
0
        //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("");
            }
        }
示例#4
0
        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);
            }
        }
示例#5
0
 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)));
     }
 }
示例#6
0
        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));
        }
示例#7
0
        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));
        }
示例#8
0
 public void SetFlags(TEX_FORMAT Format, TEX_FORMAT_TYPE type)
 {
     SetFlags(GetDXGI_Format(Format, type));
 }