: ${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
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##*.}"
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
+ pickdxta "$dds_tool" "$dds_sepalpha" "$tmpdir/x.tga" "$o" $1
}
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()
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()
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()
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()
;;
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