예제 #1
0
파일: DDSUtils.cs 프로젝트: q4a/Wolven-kit
        /// <summary>
        /// Converts a dds stream to another texture file type and writes it to file
        /// </summary>
        /// <param name="ms">The input dds stream</param>
        /// <param name="outfilename">The output filename. Extension will be overwritten with the correct filetype</param>
        /// <param name="args"></param>
        /// <returns></returns>
        public static unsafe bool ConvertFromDdsAndSave(Stream ms, string outfilename, ExportArgs args)
        {
            // check if stream is dds
            if (!DDSUtils.IsDdsFile(ms))
            {
                throw new ArgumentException("Input stream not a dds file", nameof(ms));
            }

            // get arguments
            var uext  = EUncookExtension.dds;
            var vflip = false;

            if (args is not XbmExportArgs and not MlmaskExportArgs)
            {
                return(false);
            }
            if (args is XbmExportArgs xbm)
            {
                uext  = xbm.UncookExtension;
                vflip = xbm.Flip;
            }
            if (args is MlmaskExportArgs ml)
            {
                uext = ml.UncookExtension;
            }
            if (uext == EUncookExtension.dds)
            {
                return(false);
            }

            return(ConvertFromDdsAndSave(ms, outfilename, (DirectXTexSharp.ESaveFileTypes)uext, vflip));
        }
예제 #2
0
        /// <summary>
        /// Converts a dds stream to another texture file type and writes it to file
        /// </summary>
        /// <param name="ms">The input dds stream</param>
        /// <param name="outfilename">The output filename. Extension will be overwritten with the correct filetype</param>
        /// <param name="args"></param>
        /// <returns></returns>
        public static bool ConvertFromDdsAndSave(Stream ms, string outfilename, ExportArgs args)
        {
            // check if stream is dds
            if (!DDSUtils.IsDdsFile(ms))
            {
                throw new ArgumentException("Input stream not a dds file", nameof(ms));
            }

            // get arguments
            var uext  = EUncookExtension.dds;
            var vflip = false;

            if (args is not XbmExportArgs and not MlmaskExportArgs)
            {
                return(false);
            }
            switch (args)
            {
            case XbmExportArgs xbm:
                uext  = xbm.UncookExtension;
                vflip = xbm.Flip;
                break;

            case MlmaskExportArgs ml:
                uext = ml.UncookExtension.FromMlMaskExtension();
                break;
            }

            return(uext != EUncookExtension.dds && ConvertFromDdsAndSave(ms, outfilename, ToSaveFormat(uext), vflip));
        }