You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.7 KiB
Python

#!/usr/bin/env python3
import sys
import os
import os.path
import argparse
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)")
args = parser.parse_args()
dds.convertcmd = args.convertcmd
dds.infocmd = args.infocmd
for argv in args.files:
file = os.path.abspath(argv)
info = dds.nvinfo(file)
format = info["format"]
alpha = dds.alpha(file)
if format == "DXT1":
pass
elif format == "DXT5":
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:
if args.mode == 'none':
print(f'[{argv}]: incompatible format')
elif args.mode == 'format':
print(file)