xonotic/misc/tools/compress-texture

103 lines
2.1 KiB
Plaintext
Raw Normal View History

#!/bin/sh
# usage: compress-texture tool compression in.png out.dds
# example: compress-texture compressonator dxt1 foo.jpg foo.dds
2010-08-05 11:48:24 +00:00
echo >&2 "$0 $*"
tool=$1; shift
format=$1; shift
src=$1; shift
dst=$1; shift
2010-12-17 10:37:32 +00:00
ext=${src##*.}
c=
f=
fourcchack=
case "$tool" in
compressonator-dxtc)
2010-12-16 09:28:30 +00:00
# we still have to preprocess the image to premultiply alpha, as it seems
case "$format" in
dxt2)
fourcchack=DXT2
format=dxt2
;;
dxt4)
fourcchack=DXT4
format=dxt4
;;
esac
;;
*)
case "$format" in
dxt2)
fourcchack=DXT2
format=dxt3
;;
dxt4)
fourcchack=DXT4
format=dxt5
;;
esac
;;
esac
if [ -n "$fourcchack" ]; then
fourcchack_dir=`mktemp -d`
2012-04-01 06:01:33 +00:00
convert "$src" -fx "u*u.a" -type TrueColorMatte "$fourcchack_dir/src.$ext"
src="$fourcchack_dir/src.$ext"
fi
case "$tool" in
2010-06-26 14:57:19 +00:00
compressonator-dxtc|compressonator-atic)
case "$tool" in
*-dxtc) c="-codec DXTC.dll" ;;
*-atic) c="-codec ATICompressor.dll" ;;
esac
case "$format" in
dxt1) f="+fourCC DXT1" ;;
dxt2) f="+fourCC DXT2" ;;
dxt3) f="+fourCC DXT3" ;;
dxt4) f="+fourCC DXT4" ;;
dxt5) f="+fourCC DXT5" ;;
esac
dir=`mktemp -d "$HOME/.wine/drive_c/compressonator.XXXXXX"`
dir_dos="C:/${dir##*/}"
cp "$src" "$dir/src.$ext"
2010-08-05 12:50:19 +00:00
# compressonator and wine suck, so we sometimes have to retry :(
for retry in 1 2 3 4 5; do
2010-08-09 12:03:34 +00:00
wine "c:/Program Files/AMD/The Compressonator 1.50/TheCompressonator.exe" -convert -mipmaps "$dir_dos/src.$ext" "$dir_dos/dst.dds" $c $f "$@" -mipper BoxFilter.dll
2010-08-05 12:50:19 +00:00
if mv "$dir/dst.dds" "$dst"; then
break
fi
done
rm -rf "$dir"
2010-08-05 12:50:19 +00:00
[ -f "$dst" ]
;;
nvcompress)
case "$format" in
dxt1) f="-bc1" ;;
dxt3) f="-alpha -bc3" ;;
dxt5) f="-alpha -bc5" ;;
esac
nvcompress $f "$@" "$src" "$dst"
;;
2011-07-14 19:48:08 +00:00
s2tc)
case "$format" in
dxt1) f="-t DXT1" ;;
dxt3) f="-t DXT3" ;;
dxt5) f="-t DXT5" ;;
esac
2011-07-16 20:19:31 +00:00
s2tc_compress $f "$@" -i "$src" -o "$dst"
2011-07-14 19:48:08 +00:00
;;
esac
if [ -n "$fourcchack" ]; then
# use dd to hack in the right FOURCC
2010-12-17 09:20:40 +00:00
echo -n "$fourcchack" | dd of="$dst" bs=1 count=4 seek=84 conv=notrunc
rm -rf "$fourcchack_dir"
fi