]> de.git.xonotic.org Git - xonotic/xonotic-maps.pk3dir.git/blobdiff - scripts/shader-audit.sh
allow skybox foo_bar to use env/foo (common for having multiple shaders for one skybox)
[xonotic/xonotic-maps.pk3dir.git] / scripts / shader-audit.sh
index dd371ac0099d80ad8027339e2403ef5f6fa9a6ca..0d49617c32fd211e4669fb38189446b5dc87d224 100644 (file)
@@ -14,7 +14,7 @@ forbidden_prefixes=
 textures_used=
 # $1 = shader
 # $2 = texture
-# $3 = self | map | animmap | editorimage
+# $3 = shader | map | animmap | editorimage | sky
 use_texture()
 {
        # does texture exist?
@@ -24,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"
@@ -55,7 +55,28 @@ use_texture()
                echo "(EE) shader $1 is not allowed in this shader file (allowed: $allowed_prefixes, forbidden: $forbidden_prefixes)"
        fi
 
-       # TODO verify shader -> texture name
+       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
@@ -116,11 +137,12 @@ use_texture()
                        ;;
                textures/skies/*)
                        sky=${1#textures/skies/}
+                       sky=${sky%%_*}
                        case "$2" in
                                "$1")
                                        # typical place for preview image
                                        ;;
-                               env/"${1#textures/skies/}")
+                               env/$sky[/_]*)
                                        # typical place for skybox
                                        ;;
                                *)
@@ -173,12 +195,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
                                ;;