X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=misc%2Ftools%2Fcached-converter.sh;h=f1e535e6bc5d0a96e11efdafa8fae2197f8e410a;hb=37884cfdbffeea150f3a8f72bc37b1e9d2541584;hp=1a1ae07b62b9ce72f3889dabe884c26d5161c49c;hpb=b48e0f4daddf698dea7f53390b7eb5686c77617f;p=xonotic%2Fxonotic.git diff --git a/misc/tools/cached-converter.sh b/misc/tools/cached-converter.sh index 1a1ae07b..f1e535e6 100755 --- a/misc/tools/cached-converter.sh +++ b/misc/tools/cached-converter.sh @@ -13,6 +13,9 @@ set -e : ${ogg_qual:=1} : ${del_src:=false} : ${git_src_repo:=} +: ${dds_noalpha:=dxt1} +: ${dds_prealpha:=dxt2 dxt4} +: ${dds_sepalpha:=dxt3 dxt5} selfprofile_t0=`date +%s` selfprofile_step=init @@ -140,13 +143,48 @@ cached() selfprofile convert_finished } +pickdxta() +{ + pd_t=$1; shift + pd_d=$1; shift + pd_i=$1; shift + pd_o=$1; shift + for pd_dd in $pd_d; do + if [ -f "$pd_o".dds ]; then + "$meprefix"compress-texture "$pd_t" "$pd_dd" "$pd_i" "$pd_o".tmp.dds "$@" + pd_psnr_tmp=`compare -channel alpha -metric PSNR "$pd_i" "$pd_o".tmp.dds NULL:` + echo >&2 "$pd_dd: $pd_psnr_tmp dB" + pd_psnr_diff=`echo "($pd_psnr_tmp) - ($pd_psnr)" | bc -l` + case "$pd_psnr_diff" in + -*|0) + # tmp is smaller or equal + # smaller PSNR is worse + # no action + ;; + *) + # tmp is larger + # larger PSNR is better + pd_psnr=$pd_psnr_tmp + mv "$pd_o".tmp.dds "$pd_o" + echo >&2 "PICKED (better)" + ;; + esac + else + "$meprefix"compress-texture "$pd_t" "$pd_dd" "$pd_i" "$pd_o" "$@" + pd_psnr=`compare -channel alpha -metric PSNR "$pd_i" "$pd_o" NULL:` + echo >&2 "$pd_dd: $pd_psnr dB" + echo >&2 "PICKED (first)" + fi + done +} + reduce_jpeg2_dds() { i=$1; shift ia=$1; shift o=$1; shift; shift convert "$i" "$ia" -compose CopyOpacity -composite "$tmpdir/x.tga" && \ - "$meprefix"compress-texture "$dds_tool" dxt5 "$tmpdir/x.tga" "$o" $1 + pickdxta "$dds_tool" "$dds_sepalpha" "$tmpdir/x.tga" "$o" $1 } reduce_jpeg2_dds_premul() @@ -155,7 +193,7 @@ reduce_jpeg2_dds_premul() ia=$1; shift o=$1; shift; shift convert "$i" "$ia" -compose CopyOpacity -composite "$tmpdir/x.tga" && \ - "$meprefix"compress-texture "$dds_tool" dxt4 "$tmpdir/x.tga" "$o" $1 + pickdxta "$dds_tool" "$dds_prealpha" "$tmpdir/x.tga" "$o" $1 } reduce_jpeg2_jpeg2() @@ -215,7 +253,7 @@ reduce_rgba_dds() i=$1; shift; shift o=$1; shift; shift convert "$i" "$tmpdir/x.tga" && \ - "$meprefix"compress-texture "$dds_tool" dxt5 "$tmpdir/x.tga" "$o" $1 + pickdxta "$dds_tool" "$dds_sepalpha" "$tmpdir/x.tga" "$o" $1 } reduce_rgba_dds_premul() @@ -223,7 +261,7 @@ reduce_rgba_dds_premul() i=$1; shift; shift o=$1; shift; shift convert "$i" "$tmpdir/x.tga" && \ - "$meprefix"compress-texture "$dds_tool" dxt4 "$tmpdir/x.tga" "$o" $1 + pickdxta "$dds_tool" "$dds_prealpha" "$tmpdir/x.tga" "$o" $1 } reduce_rgba_jpeg2() @@ -248,7 +286,7 @@ reduce_rgb_dds() i=$1; shift; shift o=$1; shift; shift convert "$i" "$tmpdir/x.tga" && \ - "$meprefix"compress-texture "$dds_tool" dxt1 "$tmpdir/x.tga" "$o" $1 + "$meprefix"compress-texture "$dds_tool" "$dds_noalpha" "$tmpdir/x.tga" "$o" $1 } reduce_rgb_jpeg() @@ -305,6 +343,20 @@ for F in "$@"; do ;; esac + # configure S2TC + case "$f" in + *_norm) + export S2TC_COLORDIST_MODE=NORMALMAP + export S2TC_RANDOM_COLORS=256 + export S2TC_REFINE_COLORS=LOOP + ;; + *) + export S2TC_COLORDIST_MODE=SRGB_MIXED + export S2TC_RANDOM_COLORS=64 + export S2TC_REFINE_COLORS=LOOP + ;; + esac + # for deluxemaps, lightmaps and normalmaps, enforce high jpeg quality (like on alpha channels) if [ "$jqual_a" -gt "$jqual_rgb" ]; then case "$f" in