: ${do_dds:=true}
: ${dds_tool:=compressonator-dxtc}
: ${do_ogg:=false}
-: ${ogg_qual:=1}
+: ${ogg_ogg:=true}
+: ${ogg_qual:=2}
: ${del_src:=false}
: ${git_src_repo:=}
+: ${dds_noalpha:=dxt1}
+: ${dds_prealpha:=dxt2 dxt4}
+: ${dds_sepalpha:=dxt3 dxt5}
selfprofile_t0=`date +%s`
selfprofile_step=init
if [ -n "$magnet" ]; then
magnet=${magnet#* }
magnet=${magnet%% *}
- sum=$sum$magnet
+ echo "$magnet"
else
- sum=$sum`git hash-object "$1"`
+ git hash-object "$1"
fi
}
lastinfiles=
lastinfileshash=
+acquire_checksum()
+{
+ if [ x"$1/../$2" = x"$lastinfiles" ]; then
+ _a_s=$lastinfileshash
+ else
+ _a_e=false
+ for _a_f in "$1" "$2"; do
+ case "$_a_f" in
+ */background_l2.tga|*/background_ingame_l2.tga)
+ _a_e=true
+ ;;
+ esac
+ done
+ if [ -n "$git_src_repo" ] && ! $_a_e; then
+ _a_s=`use_magnet_to_acquire_checksum_faster "${1#./}"`
+ if [ -n "$2" ]; then
+ _a_s=$_a_s`use_magnet_to_acquire_checksum_faster "${2#./}"`
+ fi
+ else
+ _a_s=`git hash-object "$1"`
+ if [ -n "$2" ]; then
+ _a_s=$_a_s`git hash-object "$2"`
+ fi
+ fi
+ lastinfileshash=$_a_s
+ lastinfiles="$1/../$2"
+ fi
+ echo "$_a_s"
+}
+
cached()
{
flag=$1; shift
fi
options=`echo "$*" | git hash-object --stdin`
selfprofile convert_findchecksum
- if [ x"$infile1/../$infile2" = x"$lastinfiles" ]; then
- sum=$lastinfileshash
- else
- evil=false
- for infile in "$infile1" "$infile2"; do
- case "$infile" in
- */background_l2.tga|*/background_ingame_l2.tga)
- evil=true
- ;;
- esac
- done
- if [ -n "$git_src_repo" ] && ! $evil; then
- sum=
- use_magnet_to_acquire_checksum_faster "${infile1#./}"
- if [ -n "$infile2" ]; then
- use_magnet_to_acquire_checksum_faster "${infile2#./}"
- fi
- else
- sum=`git hash-object "$infile1"`
- if [ -n "$infile2" ]; then
- sum=$sum`git hash-object "$infile2"`
- fi
- fi
- lastinfileshash=$sum
- fi
+ sum=`acquire_checksum "$infile1" "$infile2"`
selfprofile convert_makecachedir
mkdir -p "$CACHEDIR/$method-$options"
name1="$CACHEDIR/$method-$options/$sum-1.${outfile1##*.}"
[ -z "$outfile2" ] || tempfile2="${name2%/*}/new-${name2##*/}"
if [ -f "$name1" ] && { [ -z "$outfile2" ] || [ -f "$name2" ]; }; then
selfprofile convert_copyoutput
- case "$outfile1" in */*) mkdir -p "${outfile1%/*}"; esac && { ln -vf "$name1" "$outfile1" || { rm -f "$outfile1" && cp "$name1" "$outfile1"; }; }
- [ -z "$outfile2" ] || { case "$outfile2" in */*) mkdir -p "${outfile2%/*}"; esac && { ln -vf "$name2" "$outfile2" || { rm -f "$outfile2" && cp "$name2" "$outfile2"; }; }; }
+ case "$outfile1" in */*) mkdir -p "${outfile1%/*}"; esac && { ln -f "$name1" "$outfile1" 2>/dev/null || { rm -f "$outfile1" && cp "$name1" "$outfile1"; }; }
+ [ -z "$outfile2" ] || { case "$outfile2" in */*) mkdir -p "${outfile2%/*}"; esac && { ln -f "$name2" "$outfile2" 2>/dev/null || { rm -f "$outfile2" && cp "$name2" "$outfile2"; }; }; }
conv=true
elif selfprofile convert_makeoutput; "$method" "$infile1" "$infile2" "$tempfile1" "$tempfile2" "$@"; then
mv "$tempfile1" "$name1"
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" ]; 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: 2>&1`
+ case "$pd_psnr_tmp" in
+ [0-9.]*)
+ ;;
+ *)
+ pd_psnr_tmp=999.9
+ ;;
+ esac
+ 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: 2>&1`
+ case "$pd_psnr" in
+ [0-9.]*)
+ ;;
+ *)
+ pd_psnr=999.9
+ ;;
+ esac
+ 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
+ convert "$i" "$ia" -compose CopyOpacity -composite -type TrueColorMatte "$tmpdir/x.tga" && \
+ pickdxta "$dds_tool" "$dds_sepalpha" "$tmpdir/x.tga" "$o" $1
}
reduce_jpeg2_dds_premul()
i=$1; shift
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
+ convert "$i" "$ia" -compose CopyOpacity -composite -type TrueColorMatte "$tmpdir/x.tga" && \
+ pickdxta "$dds_tool" "$dds_prealpha" "$tmpdir/x.tga" "$o" $1
}
reduce_jpeg2_jpeg2()
{
i=$1; shift; shift
o=$1; shift; shift
- convert "$i" "$tmpdir/x.tga" && \
- "$meprefix"compress-texture "$dds_tool" dxt5 "$tmpdir/x.tga" "$o" $1
+ convert "$i" -type TrueColorMatte "$tmpdir/x.tga" && \
+ pickdxta "$dds_tool" "$dds_sepalpha" "$tmpdir/x.tga" "$o" $1
}
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
+ convert "$i" -type TrueColorMatte "$tmpdir/x.tga" && \
+ pickdxta "$dds_tool" "$dds_prealpha" "$tmpdir/x.tga" "$o" $1
}
reduce_rgba_jpeg2()
{
i=$1; shift; shift
o=$1; shift; shift
- convert "$i" "$tmpdir/x.tga" && \
- "$meprefix"compress-texture "$dds_tool" dxt1 "$tmpdir/x.tga" "$o" $1
+ convert "$i" -type TrueColor "$tmpdir/x.tga" && \
+ "$meprefix"compress-texture "$dds_tool" "$dds_noalpha" "$tmpdir/x.tga" "$o" $1
}
reduce_rgb_jpeg()
will_jpeg=$do_jpeg
will_dds=$do_dds
+ will_ogg=$do_ogg
+ if ! $ogg_ogg; then
+ case "$f" in
+ *.ogg) will_ogg=false ;;
+ esac
+ fi
case "$f" in
+ ./sounds/misc/talk*.wav) will_ogg=false ;; # engine "feature"
*_bump) will_dds=false ;;
./models/player/*) will_dds=false ;;
./models/sprites/*) will_dds=false ;;
;;
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
rm -f "$F.hasalpha"
;;
*.ogg)
- cached "$do_ogg" reduce_ogg_ogg "$F" "" "$F" "" "$ogg_qual"
+ cached "$will_ogg" reduce_ogg_ogg "$F" "" "$F" "" "$ogg_qual"
;;
./sound/misc/null.wav)
# never convert this one
;;
*.wav)
- cached "$do_ogg" reduce_wav_ogg "$F" "" "${f}.ogg" "" "$ogg_qual"
+ cached "$will_ogg" reduce_wav_ogg "$F" "" "${f}.ogg" "" "$ogg_qual"
;;
esac
selfprofile marktodelete