X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=misc%2Ftools%2Fcompress-texture;h=418d8e5c40afa401ff93d9e42771008fd7708dd9;hb=0a66c777fc991c8a959ac3b054f1eb32a9e9115a;hp=743992215a8af6548c0b1c99da307db88328360d;hpb=7a8e91cdc377e7a7407f34a85a515e6a7986f3f2;p=xonotic%2Fxonotic.git diff --git a/misc/tools/compress-texture b/misc/tools/compress-texture index 74399221..418d8e5c 100755 --- a/misc/tools/compress-texture +++ b/misc/tools/compress-texture @@ -10,8 +10,50 @@ format=$1; shift src=$1; shift dst=$1; shift +ext=${src##*.} + c= f= + +fourcchack= +case "$tool" in + compressonator-dxtc|crunch) + # 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 + ;; + compressonator-atic|nvcompress|s2tc) + # These tools don't support DXT2/4 at all. + case "$format" in + dxt2) + fourcchack=DXT2 + format=dxt3 + ;; + dxt4) + fourcchack=DXT4 + format=dxt5 + ;; + esac + ;; + *) + echo >&2 "Please figure out the DXT2/DXT4 story for $tool." + ;; +esac + +if [ -n "$fourcchack" ]; then + fourcchack_dir=`mktemp -d` + convert "$src" -fx "u*u.a" -type TrueColorMatte "$fourcchack_dir/src.$ext" + src="$fourcchack_dir/src.$ext" +fi + case "$tool" in compressonator-dxtc|compressonator-atic) case "$tool" in @@ -20,12 +62,13 @@ case "$tool" in 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##*/}" - ext=${src##*.} cp "$src" "$dir/src.$ext" # compressonator and wine suck, so we sometimes have to retry :( @@ -46,4 +89,28 @@ case "$tool" in esac nvcompress $f "$@" "$src" "$dst" ;; + s2tc) + case "$format" in + dxt1) f="-t DXT1" ;; + dxt3) f="-t DXT3" ;; + dxt5) f="-t DXT5" ;; + esac + s2tc_compress $f "$@" -i "$src" -o "$dst" + ;; + crunch) + case "$format" in + dxt1) f="-DXT1" ;; + dxt2) f="-DXT2" ;; + dxt3) f="-DXT3" ;; + dxt4) f="-DXT4" ;; + dxt5) f="-DXT5" ;; + esac + crunch $f "$@" -noprogress -nostats -quality 255 -mipMode Generate -dxtQuality uber $CRUNCH_TEXTYPEFLAGS -file "$src" -out "$dst" + ;; esac + +if [ -n "$fourcchack" ]; then + # use dd to hack in the right FOURCC + echo -n "$fourcchack" | dd of="$dst" bs=1 count=4 seek=84 conv=notrunc + rm -rf "$fourcchack_dir" +fi