X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-maps.pk3dir.git;a=blobdiff_plain;f=scripts%2Fshader-audit.sh;h=95ae9ae18851f454aac3700f010192cf8e4b8274;hp=f0f95b50337f30a9344ef2854d38c9aef1c9e04d;hb=d4d447f2fee0e9bf6e2be089dc0ba87652c8ef4e;hpb=f9bf9ea6ff5a2e630478114bdfd3aa44bc6a3a8d diff --git a/scripts/shader-audit.sh b/scripts/shader-audit.sh index f0f95b50..95ae9ae1 100644 --- a/scripts/shader-audit.sh +++ b/scripts/shader-audit.sh @@ -8,10 +8,13 @@ normalize() echo "$1" | sed 's/\.\(tga\|jpg\|png\)$//' } +allowed_prefixes= +forbidden_prefixes= + textures_used= # $1 = shader # $2 = texture -# $3 = self | map | animmap | editorimage +# $3 = shader | map | animmap | editorimage | sky use_texture() { # does texture exist? @@ -21,7 +24,7 @@ use_texture() [ -f "../$2.png" ]; then : else - if [ "$3" = "self" ]; then + if [ "$3" = "shader" ]; then return else echo "(EE) shader $1 uses non-existing texture $2" @@ -29,7 +32,51 @@ use_texture() fi textures_used="$textures_used$LF$2" - # TODO verify shader -> texture name + if [ -n "$allowed_prefixes" ]; then + ok=false + for p in $allowed_prefixes; do + case "$1:" in + "$p"*) + ok=true + ;; + esac + done + else + ok=true + fi + for p in $forbidden_prefixes; do + case "$1:" in + "$p"*) + ok=false + ;; + esac + done + if ! $ok; then + echo "(EE) shader $1 is not allowed in this shader file (allowed: $allowed_prefixes, forbidden: $forbidden_prefixes)" + fi + + case "$3" in + sky) + case "$2" in + env/*) + ;; + *) + echo "(EE) 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/" + ;; + *) + ;; + esac + ;; + esac + + # verify shader -> texture name case "$1" in textures/*x/*-*) pre=${1%%x/*}x @@ -58,11 +105,12 @@ use_texture() textures/map_*/*) pre=${1%%/map_*} suf=${1#*/map_} + map=${suf%%[_/]*} case "$2" in - "$pre"/map/*) + "$pre"/map_$map[/_]*) ;; *) - echo "(EE) texture $2 of shader $1 is out of place, recommended file name is $pre/map_$suf" + echo "(EE) texture $2 of shader $1 is out of place, recommended file name is $pre/map_$map/*" ;; esac ;; @@ -83,7 +131,30 @@ use_texture() # 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 or textures/common/*/*" + echo "(EE) texture $2 of shader $1 is out of place, recommended file name is $1" + ;; + esac + ;; + textures/skies/*) + sky=${1#textures/skies/} + case "$2" in + "$1") + # typical place for preview image + ;; + env/"${1#textures/skies/}") + # typical place for skybox + ;; + *) + echo "(EE) texture $2 of shader $1 is out of place, recommended file name is $1" + ;; + esac + ;; + models/*) + case "$2" in + models/*) + ;; + *) + echo "(EE) texture $2 of shader $1 is out of place, recommended file name is $1 or models/*" ;; esac ;; @@ -123,12 +194,15 @@ parse_shaderstage() parse_shader() { - use_texture "$parsing_shader" "$parsing_shader" self + use_texture "$parsing_shader" "$parsing_shader" shader while read L A1; do case "$L" in qer_editorimage\ *) use_texture "$parsing_shader" "$A1" editorimage ;; + skyparms\ *) + use_texture "$parsing_shader" "$A1" sky + ;; '{') parse_shaderstage ;; @@ -143,9 +217,23 @@ parse_shader() parse_shaderfile() { + case "$1" in + map_*) + allowed_prefixes="textures/map_`echo "$1" | cut -d _ -f 2`_ textures/map_`echo "$1" | cut -d - -f 2`/" + forbidden_prefixes= + ;; + skies_*) + allowed_prefixes="textures/skies/`echo "$1" | cut -d _ -f 2`: textures/skies/`echo "$1" | cut -d _ -f 2`_" + forbidden_prefixes= + ;; + *) + allowed_prefixes= + forbidden_prefixes="textures/skies/ textures/map_" + ;; + esac while read L; do case "$L" in - textures/*) + */*) parsing_shader="`normalize "$L"`" if [ x"$L" != x"$parsing_shader" ]; then echo "(WW) normalized shader name $L to $parsing_shader" @@ -168,7 +256,7 @@ strip_comments() t=`mktemp` for X in *.shader; do strip_comments < "$X" > "$t" - parse_shaderfile < "$t" + parse_shaderfile "${X%.shader}" < "$t" done rm -f "$t"