public static uint Get_FourCC_FromTellale(T3SurfaceFormat format)
        {
            switch (format)
            {
            default:
                return(ByteFunctions.Convert_String_To_UInt32("DXT1"));

            case Telltale.T3SurfaceFormat.eSurface_DXT1:
                return(ByteFunctions.Convert_String_To_UInt32("DXT1"));

            case Telltale.T3SurfaceFormat.eSurface_DXT3:
                return(ByteFunctions.Convert_String_To_UInt32("DXT3"));

            case Telltale.T3SurfaceFormat.eSurface_DXT5:
                return(ByteFunctions.Convert_String_To_UInt32("DXT5"));

            case Telltale.T3SurfaceFormat.eSurface_DXN:
                return(ByteFunctions.Convert_String_To_UInt32("ATI2"));

            case Telltale.T3SurfaceFormat.eSurface_DXT5A:
                return(ByteFunctions.Convert_String_To_UInt32("ATI1"));

            case Telltale.T3SurfaceFormat.eSurface_A8:
                return(0);
            }
        }
Exemple #2
0
        /// <summary>
        /// Matches a given DDS file on the disk to a D3DTX object.
        /// </summary>
        /// <param name="ddsPath"></param>
        /// <param name="d3dtx"></param>
        /// <param name="options"></param>
        public void Match_DDS_With_D3DTX(string ddsPath, D3DTX_Master d3dtx, DDS_Matching_Options options)
        {
            //load in the DDS image using DirectXTexNet
            ScratchImage scratchImage = TexHelper.Instance.LoadFromDDSFile(ddsPath, DDS_FLAGS.NONE);

            //create our main variables that will be used when doing conversion operations
            int             d3dtx_width     = 0;
            int             d3dtx_height    = 0;
            int             d3dtx_mipAmount = 0;
            T3SurfaceFormat d3dtx_format    = T3SurfaceFormat.eSurface_DXT1;
            T3SurfaceGamma  d3dtx_gamma     = T3SurfaceGamma.eSurfaceGamma_sRGB;

            //assign the values depending on which version is active
            if (d3dtx.d3dtx9 != null)
            {
                d3dtx_width     = (int)d3dtx.d3dtx9.mWidth;
                d3dtx_height    = (int)d3dtx.d3dtx9.mHeight;
                d3dtx_mipAmount = (int)d3dtx.d3dtx9.mNumMipLevels;
                d3dtx_format    = d3dtx.d3dtx9.mSurfaceFormat;
                d3dtx_gamma     = d3dtx.d3dtx9.mSurfaceGamma;
            }
            else if (d3dtx.d3dtx8 != null)
            {
                d3dtx_width     = (int)d3dtx.d3dtx8.mWidth;
                d3dtx_height    = (int)d3dtx.d3dtx8.mHeight;
                d3dtx_mipAmount = (int)d3dtx.d3dtx8.mNumMipLevels;
                d3dtx_format    = d3dtx.d3dtx8.mSurfaceFormat;
                d3dtx_gamma     = d3dtx.d3dtx8.mSurfaceGamma;
            }
            else if (d3dtx.d3dtx7 != null)
            {
                d3dtx_width     = (int)d3dtx.d3dtx7.mWidth;
                d3dtx_height    = (int)d3dtx.d3dtx7.mHeight;
                d3dtx_mipAmount = (int)d3dtx.d3dtx7.mNumMipLevels;
                d3dtx_format    = d3dtx.d3dtx7.mSurfaceFormat;
                d3dtx_gamma     = d3dtx.d3dtx7.mSurfaceGamma;
            }
            else if (d3dtx.d3dtx6 != null)
            {
                d3dtx_width     = (int)d3dtx.d3dtx6.mWidth;
                d3dtx_height    = (int)d3dtx.d3dtx6.mHeight;
                d3dtx_mipAmount = (int)d3dtx.d3dtx6.mNumMipLevels;
                d3dtx_format    = d3dtx.d3dtx6.mSurfaceFormat;
                d3dtx_gamma     = T3SurfaceGamma.eSurfaceGamma_sRGB; //this version doesn't have a surface gamma field, so give it an SRGB by default
            }
            else if (d3dtx.d3dtx5 != null)
            {
                d3dtx_width     = (int)d3dtx.d3dtx5.mWidth;
                d3dtx_height    = (int)d3dtx.d3dtx5.mHeight;
                d3dtx_mipAmount = (int)d3dtx.d3dtx5.mNumMipLevels;
                d3dtx_format    = d3dtx.d3dtx5.mSurfaceFormat;
                d3dtx_gamma     = T3SurfaceGamma.eSurfaceGamma_sRGB; //this version doesn't have a surface gamma field, so give it an SRGB by default
            }
            else if (d3dtx.d3dtx4 != null)
            {
                d3dtx_width     = (int)d3dtx.d3dtx4.mWidth;
                d3dtx_height    = (int)d3dtx.d3dtx4.mHeight;
                d3dtx_mipAmount = (int)d3dtx.d3dtx4.mNumMipLevels;
                d3dtx_format    = d3dtx.d3dtx4.mSurfaceFormat;
                d3dtx_gamma     = T3SurfaceGamma.eSurfaceGamma_sRGB; //this version doesn't have a surface gamma field, so give it an SRGB by default
            }

            //-------------------------------------- CONVERSION START --------------------------------------
            //change the compression if needed
            if (options.MatchCompression)
            {
                DXGI_FORMAT dxgi_format = DDS_Functions.GetSurfaceFormatAsDXGI(d3dtx_format, d3dtx_gamma);
                scratchImage.Convert(dxgi_format, TEX_FILTER_FLAGS.DITHER, 0.0f);
            }

            //rescale the image to match if needed
            if (options.MatchResolution)
            {
                scratchImage.Resize(d3dtx_width, d3dtx_height, TEX_FILTER_FLAGS.CUBIC);
            }

            //generate mip maps if needed
            if (options.GenerateMipMaps)
            {
                if (options.MatchMipMapCount)
                {
                    scratchImage.GenerateMipMaps(0, TEX_FILTER_FLAGS.CUBIC, d3dtx_mipAmount, false);
                }
                else
                {
                    scratchImage.GenerateMipMaps(0, TEX_FILTER_FLAGS.CUBIC, 0, false);
                }
            }

            //resave the newly modified DDS
            scratchImage.SaveToDDSFile(DDS_FLAGS.NONE, ddsPath);
        }
Exemple #3
0
        /// <summary>
        /// Create a DDS file from a D3DTX
        /// </summary>
        /// <param name="d3dtx"></param>
        public DDS_Master(D3DTX_Master d3dtx)
        {
            header = DDS_Functions.GetPresetHeader();
            T3SurfaceFormat surfaceFormat = T3SurfaceFormat.eSurface_DXT1;

            if (d3dtx.d3dtx4 != null)
            {
                header.dwWidth       = d3dtx.d3dtx4.mWidth;
                header.dwHeight      = d3dtx.d3dtx4.mHeight;
                header.dwMipMapCount = d3dtx.d3dtx4.mNumMipLevels;
                surfaceFormat        = d3dtx.d3dtx4.mSurfaceFormat;
            }
            else if (d3dtx.d3dtx5 != null)
            {
                header.dwWidth       = d3dtx.d3dtx5.mWidth;
                header.dwHeight      = d3dtx.d3dtx5.mHeight;
                header.dwMipMapCount = d3dtx.d3dtx5.mNumMipLevels;
                surfaceFormat        = d3dtx.d3dtx5.mSurfaceFormat;
            }
            else if (d3dtx.d3dtx6 != null)
            {
                header.dwWidth       = d3dtx.d3dtx6.mWidth;
                header.dwHeight      = d3dtx.d3dtx6.mHeight;
                header.dwMipMapCount = d3dtx.d3dtx6.mNumMipLevels;
                surfaceFormat        = d3dtx.d3dtx6.mSurfaceFormat;
            }
            else if (d3dtx.d3dtx7 != null)
            {
                header.dwWidth       = d3dtx.d3dtx7.mWidth;
                header.dwHeight      = d3dtx.d3dtx7.mHeight;
                header.dwMipMapCount = d3dtx.d3dtx7.mNumMipLevels;
                //header.dwDepth = d3dtx.d3dtx7.mDepth;
                surfaceFormat = d3dtx.d3dtx7.mSurfaceFormat;
            }
            else if (d3dtx.d3dtx8 != null)
            {
                header.dwWidth       = d3dtx.d3dtx8.mWidth;
                header.dwHeight      = d3dtx.d3dtx8.mHeight;
                header.dwMipMapCount = d3dtx.d3dtx8.mNumMipLevels;
                header.dwDepth       = d3dtx.d3dtx8.mDepth;
                surfaceFormat        = d3dtx.d3dtx8.mSurfaceFormat;
            }
            else if (d3dtx.d3dtx9 != null)
            {
                header.dwWidth       = d3dtx.d3dtx9.mWidth;
                header.dwHeight      = d3dtx.d3dtx9.mHeight;
                header.dwMipMapCount = d3dtx.d3dtx9.mNumMipLevels;
                header.dwDepth       = d3dtx.d3dtx9.mDepth;
                surfaceFormat        = d3dtx.d3dtx9.mSurfaceFormat;
            }

            DDS_PIXELFORMAT new_ddspf = new DDS_PIXELFORMAT();

            new_ddspf.dwFourCC = DDS_Functions.Get_FourCC_FromTellale(surfaceFormat);

            switch (surfaceFormat)
            {
            case Telltale.T3SurfaceFormat.eSurface_A8:
                new_ddspf.dwABitMask = 255;
                header.dwCaps        = 4198408; //DDSCAPS_COMPLEX | DDSCAPS_TEXTURE | DDSCAPS_MIPMAP
                break;

            case Telltale.T3SurfaceFormat.eSurface_ARGB8:
                new_ddspf.dwABitMask = 255;
                new_ddspf.dwRBitMask = 255;
                new_ddspf.dwGBitMask = 255;
                new_ddspf.dwBBitMask = 255;
                header.dwCaps        = 4198408; //DDSCAPS_COMPLEX | DDSCAPS_TEXTURE | DDSCAPS_MIPMAP
                break;
            }

            header.ddspf = new_ddspf;
        }
        public static long D3D9Format_FromSurfaceFormat(T3SurfaceFormat format)
        {
            long result = 0;

            switch (format)
            {
            case 0u:
            case (T3SurfaceFormat)0xAu:
                result = 21;
                break;

            case (T3SurfaceFormat)5u:
                result = 35;
                break;

            case (T3SurfaceFormat)2u:
                result = 23;
                break;

            case (T3SurfaceFormat)3u:
                result = 25;
                break;

            case (T3SurfaceFormat)4u:
                result = 26;
                break;

            case (T3SurfaceFormat)0x10u:
                result = 28;
                break;

            case (T3SurfaceFormat)0x11u:
                result = 50;
                break;

            case (T3SurfaceFormat)9u:
            case (T3SurfaceFormat)0x12u:
                result = 51;
                break;

            case (T3SurfaceFormat)0xBu:
                result = 42;
                break;

            case (T3SurfaceFormat)0xCu:
                result = 17;
                break;

            case (T3SurfaceFormat)0xDu:
                result = 3;
                break;

            case (T3SurfaceFormat)6u:
            case (T3SurfaceFormat)0x13u:
                result = 81;
                break;

            case (T3SurfaceFormat)7u:
                result = 34;
                break;

            case (T3SurfaceFormat)1u:
            case (T3SurfaceFormat)8u:
                result = 36;
                break;

            case (T3SurfaceFormat)0x22u:
                result = 113;
                break;

            case (T3SurfaceFormat)0x20u:
                result = 111;
                break;

            case (T3SurfaceFormat)0x23u:
                result = 114;
                break;

            case (T3SurfaceFormat)0x21u:
                result = 112;
                break;

            case (T3SurfaceFormat)0x24u:
                result = 115;
                break;

            case (T3SurfaceFormat)0x25u:
                result = 116;
                break;

            case (T3SurfaceFormat)0x30u:
            case (T3SurfaceFormat)0x32u:
                result = 80;
                break;

            case (T3SurfaceFormat)0x31u:
            case (T3SurfaceFormat)0x33u:
                result = 77;
                break;

            case (T3SurfaceFormat)0x34u:
                result = 75;
                break;

            case (T3SurfaceFormat)0x40u:
                result = 827611204;
                break;

            case (T3SurfaceFormat)0x41u:
                result = 861165636;
                break;

            case (T3SurfaceFormat)0x42u:
                result = 894720068;
                break;

            case (T3SurfaceFormat)0x90u:
                result = 22;
                break;

            case (T3SurfaceFormat)0x43u:
                result = 826889281;
                break;

            case (T3SurfaceFormat)0x44u:
                result = 843666497;
                break;

            default:
                result = 0;
                break;
            }

            return(result);
        }
        public static DXGI_FORMAT GetSurfaceFormatAsDXGI(T3SurfaceFormat format, T3SurfaceGamma gamma = T3SurfaceGamma.eSurfaceGamma_sRGB)
        {
            switch (format)
            {
            default:
                return(DXGI_FORMAT.BC1_UNORM);    //just choose classic DXT1 if the format isn't known

            //--------------------DXT1--------------------
            case T3SurfaceFormat.eSurface_BC1:
                if (gamma == T3SurfaceGamma.eSurfaceGamma_sRGB)
                {
                    return(DXGI_FORMAT.BC1_UNORM_SRGB);
                }
                else
                {
                    return(DXGI_FORMAT.BC1_UNORM);
                }

            case T3SurfaceFormat.eSurface_DXT1:
                if (gamma == T3SurfaceGamma.eSurfaceGamma_sRGB)
                {
                    return(DXGI_FORMAT.BC1_UNORM_SRGB);
                }
                else
                {
                    return(DXGI_FORMAT.BC1_UNORM);
                }

            //--------------------DXT2 and DXT3--------------------
            case T3SurfaceFormat.eSurface_BC2:
                if (gamma == T3SurfaceGamma.eSurfaceGamma_sRGB)
                {
                    return(DXGI_FORMAT.BC2_UNORM_SRGB);
                }
                else
                {
                    return(DXGI_FORMAT.BC2_UNORM);
                }

            case T3SurfaceFormat.eSurface_DXT3:
                if (gamma == T3SurfaceGamma.eSurfaceGamma_sRGB)
                {
                    return(DXGI_FORMAT.BC2_UNORM_SRGB);
                }
                else
                {
                    return(DXGI_FORMAT.BC2_UNORM);
                }

            //--------------------DXT4 and DXT5--------------------
            case T3SurfaceFormat.eSurface_BC3:
                if (gamma == T3SurfaceGamma.eSurfaceGamma_sRGB)
                {
                    return(DXGI_FORMAT.BC3_UNORM_SRGB);
                }
                else
                {
                    return(DXGI_FORMAT.BC3_UNORM);
                }

            case T3SurfaceFormat.eSurface_DXT5:
                if (gamma == T3SurfaceGamma.eSurfaceGamma_sRGB)
                {
                    return(DXGI_FORMAT.BC3_UNORM_SRGB);
                }
                else
                {
                    return(DXGI_FORMAT.BC3_UNORM);
                }

            //--------------------ATI1--------------------
            case T3SurfaceFormat.eSurface_BC4:
                return(DXGI_FORMAT.BC4_UNORM);

            case T3SurfaceFormat.eSurface_DXT5A:
                return(DXGI_FORMAT.BC4_UNORM);

            //--------------------ATI2--------------------
            case T3SurfaceFormat.eSurface_BC5:
                return(DXGI_FORMAT.BC5_UNORM);

            case T3SurfaceFormat.eSurface_DXN:
                return(DXGI_FORMAT.BC5_UNORM);


            case T3SurfaceFormat.eSurface_BC6:
                return(DXGI_FORMAT.BC6H_UF16);

            case T3SurfaceFormat.eSurface_BC7:
                if (gamma == T3SurfaceGamma.eSurfaceGamma_sRGB)
                {
                    return(DXGI_FORMAT.BC7_UNORM_SRGB);
                }
                else
                {
                    return(DXGI_FORMAT.BC7_UNORM);
                }
            }
        }