From 8509384bffd72647d601c3c7bfcd7471b22a5295 Mon Sep 17 00:00:00 2001 From: Andrew Cassidy Date: Wed, 21 Jun 2023 15:32:24 -0700 Subject: [PATCH] Add -n option to `encode bc3` which performs a BC3nm swizzle --- quicktex/cli/encode.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/quicktex/cli/encode.py b/quicktex/cli/encode.py index 07a5113..0aa3e33 100644 --- a/quicktex/cli/encode.py +++ b/quicktex/cli/encode.py @@ -36,7 +36,7 @@ def encode(): help="Output file or directory. If outputting to a file, input filenames must be only a single item. By default, files are decoded in place.", ) @click.argument('filenames', nargs=-1, type=click.Path(exists=True, readable=True, dir_okay=False)) -def encode_format(encoder, four_cc, flip, remove, suffix, output, filenames): +def encode_format(encoder, four_cc, flip, remove, suffix, output, filenames, swizzle=False): path_pairs = common.path_pairs(filenames, output, suffix, '.dds') with click.progressbar( @@ -48,6 +48,11 @@ def encode_format(encoder, four_cc, flip, remove, suffix, output, filenames): if flip: image = image.transpose(Image.FLIP_TOP_BOTTOM) + if swizzle: + bands = image.split() + one = Image.new('L', image.size, 0xFF) + image = Image.merge('RGBA', (one, bands[1], bands[1], bands[0])) + dds.encode(image, encoder, four_cc).save(outpath) if remove: @@ -175,9 +180,16 @@ def encode_bc1(level, black, threecolor, **kwargs): default=18, help='Quality level to use. Higher values = higher quality, but slower.', ) -def encode_bc3(level, **kwargs): +@click.option( + '-n/-N', + '--normal/--no-normal', + type=bool, + default=False, + help='Perform a BC3nm swizzle, copying the red channel into the alpha [default: no-normal]', +) +def encode_bc3(level, normal, **kwargs): """Encode images to BC4 (RGBA, 8-bit interpolated alpha).""" - encode_format.callback(quicktex.s3tc.bc3.BC3Encoder(level), 'DXT5', **kwargs) + encode_format.callback(quicktex.s3tc.bc3.BC3Encoder(level), 'DXT5', swizzle=normal, **kwargs) @click.command('bc4')