From e410f0c15c82a2b71b18684e7eba187acf2bcb05 Mon Sep 17 00:00:00 2001 From: drewcassidy Date: Thu, 21 Jan 2021 17:37:08 -0800 Subject: [PATCH] add more options for ddsck and ddscompress --- Scripts/README.md | 9 +++++++-- Scripts/ddsck.py | 17 ++++++++++++++--- Scripts/ddscompress.py | 16 +++++++++++----- 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/Scripts/README.md b/Scripts/README.md index 871ca50..30060dd 100644 --- a/Scripts/README.md +++ b/Scripts/README.md @@ -11,7 +11,7 @@ All files require python3 to be installed. ## Usage ### ddscompress.py -usage: `ddscompress.py [-h] [--format {auto,DXT1,DXT5}] [--convertcmd CMD] [--compresscmd CMD] [files ...]` +usage: ` ddscompress.py [-h] [--format {auto,DXT1,DXT5}] [--nomips] [--noflip] [--keep] [--convertcmd CMD] [--compresscmd CMD] [files ...]` Converts any number of files to `.dds` format, automatically choosing dxt1 or dxt5 depending on if the source image has anything in its alpha channel. Designed to be used with a glob, e.g: `ddscompress.py *.png` @@ -21,6 +21,9 @@ Converts any number of files to `.dds` format, automatically choosing dxt1 or dx ##### optional arguments: * `-h, --help `: show this help message and exit * `--format {auto,DXT1,DXT5}`: output texture format (default: auto) +* `--nomips, -m`: Do not generate mipmaps +* `--noflip, -f`: Do not flip the image +* `--keep, -k`: Do not delete originals * `--convertcmd CMD`: name of imagemagick's convert tool (default: `convert`) * `--compresscmd CMD`: name of the nvidia dds compress tool (default: `nvcompress`) @@ -37,7 +40,7 @@ Converts any number of files to `.tga` from `.dds`. Designed to be used with a g * `--decompresscmd CMD`: name of the nvidia dds decompress tool (default: `nvdecompress`) ### ddsck.py -usage: `ddsck.py [-h] [--convertcmd CMD] [--infocmd CMD] [files ...]` +usage: `ddsck.py [-h] [--transparency | --format] [--convertcmd CMD] [--infocmd CMD] [files ...]` Checks any number of dds files for common issues, including formats not supported by KSP, and DXT5 textures that don't use the alpha channel. Designed to be used with a glob, e.g: `ddsck.py *.dds` @@ -46,5 +49,7 @@ Checks any number of dds files for common issues, including formats not supporte ##### optional arguments: * `-h, --help`: show this help message and exit +* `--transparency, -t`: Generate a list of files that fail the transparency check +* `--format, -f`: Generate a list of files that fail the format check * `--convertcmd CMD`: name of imagemagick's convert tool (default: `convert`) * `--infocmd CMD`: name of the nvidia dds info tool (default: `nvddsinfo`) \ No newline at end of file diff --git a/Scripts/ddsck.py b/Scripts/ddsck.py index 507257a..9ae5d2d 100755 --- a/Scripts/ddsck.py +++ b/Scripts/ddsck.py @@ -8,6 +8,11 @@ import dds parser = argparse.ArgumentParser(description="Checks any number of dds files for common issues, including formats not supported by KSP, and DXT5 textures that don't use the alpha channel.") parser.add_argument('files', type=str, nargs='*', help = "input dds files") + +modes = parser.add_mutually_exclusive_group() +modes.add_argument('--transparency', '-t', dest='mode', action='store_const', const="transparency", default="none", help = "Generate a list of files that fail the transparency check") +modes.add_argument('--format', '-f', dest='mode', action='store_const', const="format", default="none", help = "Generate a list of files that fail the format check") + parser.add_argument('--convertcmd', type=str, metavar='CMD', default="convert", help="name of imagemagick's convert tool (default: %(default)s)") parser.add_argument('--infocmd', type=str, metavar='CMD', default="nvddsinfo", help="name of the nvidia dds info tool (default: %(default)s)") @@ -26,7 +31,13 @@ for argv in args.files: if format == "DXT1": pass elif format == "DXT5": - if alpha > 254: - print(f'[{argv}]: Image is DXT5 but has no alpha channel') + if alpha > 254: + if args.mode == 'none': + print(f'[{argv}]: Image is DXT5 but has no alpha channel') + elif args.mode == 'transparency': + print(file) else: - print(f'[{argv}]: incompatible format') \ No newline at end of file + if args.mode == 'none': + print(f'[{argv}]: incompatible format') + elif args.mode == 'format': + print(file) \ No newline at end of file diff --git a/Scripts/ddscompress.py b/Scripts/ddscompress.py index 2672a9e..d26a466 100755 --- a/Scripts/ddscompress.py +++ b/Scripts/ddscompress.py @@ -3,6 +3,7 @@ import sys import os import os.path +import shutil import tempfile import argparse import dds @@ -10,7 +11,9 @@ import dds parser = argparse.ArgumentParser(description="Converts any number of textures to dds format. automatically chooses dxt1 or dxt5 depending on if the source image has anything in its alpha channel.") parser.add_argument('files', type=str, nargs='*', help = "input texture files") parser.add_argument('--format', type=str, choices=['auto', 'DXT1', 'DXT5'], default = "auto", help = "output texture format (default: %(default)s)") -parser.add_argument('--nomips', '-n', dest='mips', action='store_false', help = "Do not generate mipmaps") +parser.add_argument('--nomips', '-m', dest='mips', action='store_false', help = "Do not generate mipmaps") +parser.add_argument('--noflip', '-f', dest='flip', action='store_false', help = "Do not flip the image") +parser.add_argument('--keep', '-k', dest='delete', action='store_false', help = "Do not delete originals") parser.add_argument('--convertcmd', type=str, metavar='CMD', default="convert", help="name of imagemagick's convert tool (default: %(default)s)") parser.add_argument('--compresscmd', type=str, metavar='CMD', default="nvcompress", help="name of the nvidia dds compress tool (default: %(default)s)") @@ -23,10 +26,13 @@ with tempfile.TemporaryDirectory() as tempDir: for argv in args.files: print(f'[{argv}]: converting to dds') file = os.path.abspath(argv) - tmpOutput = os.path.join(tempDir, os.path.basename(file)) output = os.path.splitext(file)[0] + ".dds" - - dds.flip(file, tmpOutput) + + if (os.path.splitext(file)[1] != ".dds") and args.flip: + tmpOutput = os.path.join(tempDir, os.path.basename(file)) + dds.flip(file, tmpOutput) + else: + tmpOutput = file if (args.format == "auto" and dds.alpha(file) < 255) or args.format == "DXT5": format = "-bc3" @@ -34,5 +40,5 @@ with tempfile.TemporaryDirectory() as tempDir: format = "-bc1" dds.nvcompress(format, tmpOutput, output, args.mips) - if os.path.basename(file) != os.path.basename(output): + if (os.path.basename(file) != os.path.basename(output)) and args.delete: os.remove(file) \ No newline at end of file