kill -USR1 "$pid"
}
+nowarn=false
+err()
+{
+ echo "(EE) $*"
+ seterror
+}
+warn()
+{
+ $nowarn || echo "(WW) $*"
+}
+
LF="
"
if [ "$3" = "shader" ]; then
return
else
- echo "(EE) shader $1 uses non-existing texture $2"; seterror
+ err "$1 uses non-existing texture $2"
fi
fi
textures_used="$textures_used$LF$2"
'') # no dpoffsetmapping keyword
getstats "../${2}_norm.tga" || getstats "../${2}_norm.png" || getstats "../${2}_norm.jpg"
if [ "$min" -eq "$max" ]; then
- echo "(WW) shader $1 uses broken normalmap ${2}_norm.tga (add dpoffsetmapping none)"
+ warn "$1 uses broken normalmap ${2}_norm.tga (add dpoffsetmapping none)"
else
- echo "(EE) shader $1 uses ${2}_norm.tga but lacks median (add dpoffsetmapping - 1 match8 $median)"; seterror
+ err "$1 uses ${2}_norm.tga but lacks median (add dpoffsetmapping - 1 match8 $median)"
fi
;;
none) # offsetmapping turned off explicitly
default) # offsetmapping keyword without bias
getstats "../${2}_norm.tga"
if [ "$min" -eq "$max" ]; then
- echo "(EE) shader $1 uses broken normalmap ${2}_norm.tga, maybe use dpoffsetmapping none?"; seterror
+ warn "$1 uses broken normalmap ${2}_norm.tga, maybe use dpoffsetmapping none?"
else
- echo "(EE) shader $1 uses ${2}_norm.tga but lacks median (add to dpoffsetmapping: match8 $median)"; seterror
+ err "$1 uses ${2}_norm.tga but lacks median (add to dpoffsetmapping: match8 $median)"
fi
;;
*) # offsetmapping keyword with bias
esac
else
if [ -n "$offsetmapping_match8" ]; then
- echo "(EE) shader $1 specifies offsetmapping, but texture $2 does not have a normalmap"
+ warn "$1 specifies offsetmapping, but texture $2 does not have a normalmap"
fi
fi
fi
esac
done
if ! $ok; then
- echo "(EE) shader $1 is not allowed in this shader file (allowed: $allowed_prefixes, forbidden: $forbidden_prefixes)"; seterror
+ err "$1 is not allowed in this shader file (allowed: $allowed_prefixes, forbidden: $forbidden_prefixes)"
fi
case "$3" in
env/*)
;;
*)
- echo "(EE) texture $2 of shader $1 is out of place, $3 textures must be in env/"; seterror
+ err "texture $2 of shader $1 is out of place, $3 textures must be in env/"
;;
esac
;;
*)
case "$2" in
env/*)
- echo "(EE) texture $2 of shader $1 is out of place, $3 textures must not be in env/"; seterror
+ err "texture $2 of shader $1 is out of place, $3 textures must not be in env/"
;;
*)
;;
"$pre"/*/*)
;;
*)
- echo "(EE) texture $2 of shader $1 is out of place, recommended file name is $pre/$suf"; seterror
+ err "texture $2 of shader $1 is out of place, recommended file name is $pre/$suf"
;;
esac
;;
"$pre"/*/*)
;;
*)
- echo "(EE) texture $2 of shader $1 is out of place, recommended file name is $pre/base/$suf"; seterror
+ err "texture $2 of shader $1 is out of place, recommended file name is $pre/base/$suf"
;;
esac
;;
;;
textures/map_*)
# protect one map's textures from the evil of other maps :P
- echo "(EE) texture $2 of shader $1 is out of place, recommended file name is $pre/map_$map/*"; seterror
+ err "texture $2 of shader $1 is out of place, recommended file name is $pre/map_$map/*"
;;
*)
# using outside stuff is permitted
textures/common/*/*)
;;
*)
- echo "(EE) texture $2 of shader $1 is out of place, recommended file name is $1 or textures/common/*/*"; seterror
+ err "texture $2 of shader $1 is out of place, recommended file name is $1 or textures/common/*/*"
;;
esac
;;
- ## RULE: textures/FOO/* must use textures/FOO/*, for FOO in decals, liquids_water, liquids_slime, liquids_lava
- textures/decals/*|textures/liquids_*/*|textures/effects_*/*|textures/screens/*|textures/logos/*)
+ ## RULE: textures/FOO/* must use textures/FOO/*, for FOO in decals, liquids_water, liquids_slime, liquids_lava, alphamod
+ textures/decals/*|textures/liquids_*/*|textures/effects_*/*|textures/screens/*|textures/logos/*|textures/alphamod/*)
pre=`echo "$1" | cut -d / -f 1-2`
case "$2" in
"$pre"/*)
# I _suppose_ this is fine, as tZork committed this pack
;;
*)
- echo "(EE) texture $2 of shader $1 is out of place, recommended file name is $1"; seterror
+ err "texture $2 of shader $1 is out of place, recommended file name is $1"
;;
esac
;;
# typical place for skybox
;;
*)
- echo "(EE) texture $2 of shader $1 is out of place, recommended file name is $1"; seterror
+ err "texture $2 of shader $1 is out of place, recommended file name is $1"
;;
esac
;;
models/*)
;;
*)
- echo "(EE) texture $2 of shader $1 is out of place, recommended file name is $1 or models/*"; seterror
+ err "texture $2 of shader $1 is out of place, recommended file name is $1 or models/*"
;;
esac
;;
*)
- echo "(EE) no shader name pattern for $1"; seterror
+ err "no shader name pattern for $1"
;;
esac
}
done
;;
'{')
- echo "(EE) brace nesting error in $parsing_shader"; seterror
+ err "brace nesting error in $parsing_shader"
;;
'}')
break
esac
done
- if [ -n "$AUDIT_ALPHACHANNELS" ] && [ -n "$ss_map" ]; then
- getstats "../$ss_map.tga" || getstats "../$ss_map.png" || getstats "../$ss_map.jpg"
- case "$ss_blendfunc" in
- *src_alpha*|*blend*)
- # texture must have alpha
- if [ x"$ss_alphagen" = x"none" -a $min -eq 255 ]; then
- echo "(EE) $parsing_shader uses alpha-less texture $ss_map with blendfunc $ss_blendfunc and alphagen $ss_alphagen"; seterror
- fi
- ;;
- add|"gl_one gl_one")
- # texture must not have alpha (engine bug)
- if [ x"$ss_alphagen" != x"none" -o $min -lt 255 ]; then
- echo "(EE) $parsing_shader uses alpha-using texture $ss_map with blendfunc $ss_blendfunc and alphagen $ss_alphagen"; seterror
- fi
- ;;
- *)
- case "$ss_alphafunc" in
- g*)
- # texture must have alpha
- if [ x"$ss_alphagen" = x"none" -a $min -eq 255 ]; then
- echo "(EE) $parsing_shader uses alpha-less texture $ss_map with alphafunc $ss_alphafunc and alphagen $ss_alphagen"; seterror
- fi
- ;;
- *)
- # texture should not have alpha (no bug if not)
- case "$ss_alphagen" in
- none)
- if [ $min -lt 255 ]; then
- echo "(WW) $parsing_shader uses alpha-using texture $ss_map with blendfunc $ss_blendfunc and alphafunc $ss_alphafunc and alphagen $ss_alphagen"
- fi
- ;;
- *)
- # alphagen is set, but blendfunc has no use for it
- echo "(EE) $parsing_shader uses alpha-using texture $ss_map with blendfunc $ss_blendfunc and alphafunc $ss_alphafunc and alphagen $ss_alphagen"; seterror
- ;;
- esac
- ;;
- esac
- ;;
- esac
+ if [ -n "$ss_map" ]; then
+ if [ -z "$maintexture" ]; then
+ maintexture=$ss_map
+ mainblendfunc=$ss_blendfunc
+ mainalphafunc=$ss_alphafunc
+ mainalphagen=$ss_alphagen
+ elif [ x"$ss_alphagen" = x"vertex" ] && ! $textureblending; then
+ case "$mainblendfunc:$mainalphafunc:$ss_blendfunc:$ss_alphafunc" in
+ none:none:"gl_src_alpha gl_one_minus_src_alpha":none) textureblending=true ;;
+ none:none:filter:none) textureblending=true ;;
+ none:none:none:g*) textureblending=true ;;
+ "gl_one gl_zero":none:filter:none) textureblending=true ;;
+ "gl_one gl_zero":none:none:g*) textureblending=true ;;
+ *)
+ err "texture blending requires first stage to have no blendfunc/alphatest, and requires second stage to be blendfunc filter"
+ ;;
+ esac
+ else
+ err "multistage shader without alphagen vertex, or using more than 2 stages, is not supported by DarkPlaces"
+ fi
fi
}
{
use_texture "$parsing_shader" "$parsing_shader" shader
offsetmapping_match8=
+ textureblending=false
+ maintexture=
+ nowarn=false
while read L A1 Aother; do
case "`echo "$L" | tr A-Z a-z`" in
+ xon_nowarn)
+ nowarn=true
+ ;;
dpoffsetmapping)
set -- $Aother
if [ x"$A1" = x"none" ]; then
;;
esac
done
+ if [ -n "$AUDIT_ALPHACHANNELS" ] && [ -n "$maintexture" ] && ! $textureblending; then
+ getstats "../$maintexture.tga" || getstats "../$maintexture.png" || getstats "../$maintexture.jpg"
+ case "$mainblendfunc" in
+ *src_alpha*|*blend*)
+ # texture must have alpha
+ if [ x"$mainalphagen" = x"none" -a $min -eq 255 ]; then
+ err "$parsing_shader uses alpha-less texture $maintexture with blendfunc $mainblendfunc and alphagen $mainalphagen"
+ fi
+ ;;
+ add|"gl_one gl_one")
+ # texture must not have alpha (engine bug)
+ if [ x"$mainalphagen" != x"none" -o $min -lt 255 ]; then
+ err "$parsing_shader uses alpha-using texture $maintexture with blendfunc $mainblendfunc and alphagen $mainalphagen"
+ fi
+ ;;
+ *)
+ case "$mainalphafunc" in
+ g*)
+ # texture must have alpha
+ if [ x"$mainalphagen" = x"none" -a $min -eq 255 ]; then
+ err "$parsing_shader uses alpha-less texture $maintexture with alphafunc $mainalphafunc and alphagen $mainalphagen"
+ fi
+ ;;
+ *)
+ # texture should not have alpha (no bug if not)
+ case "$mainalphagen" in
+ none)
+ if [ $min -lt 255 ]; then
+ warn "$parsing_shader uses alpha-using texture $maintexture with blendfunc $mainblendfunc and alphafunc $mainalphafunc and alphagen $mainalphagen"
+ fi
+ ;;
+ *)
+ # alphagen is set, but blendfunc has no use for it
+ err "$parsing_shader uses alpha-using texture $maintexture with blendfunc $mainblendfunc and alphafunc $mainalphafunc and alphagen $mainalphagen"
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ fi
}
parse_shaderfile()
*/*)
parsing_shader="`normalize "$L"`"
if [ x"$L" != x"$parsing_shader" ]; then
- echo "(WW) normalized shader name $L to $parsing_shader"
+ warn "normalized shader name $L to $parsing_shader"
fi
;;
'{')
textures/map_*/*)
;;
*)
- echo "(EE) texture $L is not referenced by any shader"; seterror
+ err "texture $L is not referenced by any shader"
;;
esac
done