5 Yellow='\033[0;33m' # Yellow
6 Blue='\033[0;34m' # Blue
7 Clear='\033[0m' # Text Reset
9 #########################################################################################
13 echo -e "${Yellow}Usage: $(basename ${BASH_SOURCE[0]}) [indir] [outdir] [OPTIONS]"
15 echo -e " ${Blue}Mandatory parameters:${Clear}"
16 echo -e " indir The input directory where the original shader files are located"
17 echo -e " outdir The output directory where the header files for the shaders should be generated"
18 echo -e " ${Red}NOTE: All the above parameters must be provided${Clear}"
20 echo -e " ${Blue}Options:${Clear}"
21 echo -e " -s|--skip Skip the generation of header and cpp files that include all the generated shader header files"
22 echo -e " -h|--help Help"
25 if [ "$1" = "-h" ] || [ "$1" = "--help" ]
31 echo -e "${Red}ERROR:${Clear} Mandatory parameters are not provided"
37 #########################################################################################
45 if [ "$option" = "-s" ] || [ "$option" = "--skip" ]
49 elif [[ $option == -* ]]
51 echo -e "${Red}Invalid Option: ${Blue}$option${Clear}"
58 #########################################################################################
62 if [ ! -e $indir ] ; then
63 echo "Error: The folder \""$indir"\" does not exist!"
68 all_shaders=$(ls -1 *.{vert,frag,def} 2>/dev/null)
71 # Generate one header file per shader which is defined as a const std::string_view
72 for name in $all_shaders ; do
73 echo "Generating header files for $name..."
74 varname=$(echo "SHADER_$name" | tr [a-z] [A-Z] | sed -e 's/-/_/g;s/\./_/g;')
76 newname=$(echo ${name} | sed -e 's/\./-/;')".h"
79 shader_fullpath=$(echo ${indir})$name
81 header_name="${varname}_GEN_H"
82 echo "const std::string_view" "$varname""{" > $outdir/$newname
83 cat $shader_fullpath | sed -e 's/^..*$/"&\\n"/' >> $outdir/$newname
84 echo "};" >> $outdir/$newname
87 if [ "$skip" != "--skip" ]; then
88 # Generate one cpp file that includes all the previously generated string_views for shaders
89 echo "Generating cpp file..."
90 echo -e "#include \"../builtin-shader-extern-gen.h\"\n" > $outdir/builtin-shader-gen.cpp
93 for name in $all_shaders ; do
94 varname=$(echo "SHADER_$name" | tr [a-z] [A-Z] | sed -e 's/-/_/g;s/\./_/g;')
95 newname=$(echo ${name} | sed -e 's/\./-/;')".h"
96 varnames="${varnames} $varname"
97 echo "#include \"$newname\"" >> $outdir/builtin-shader-gen.cpp
100 # Generate one header file that defines all the shader string_views as extern variables
101 echo "Generating extern header file ( for external use )..."
102 echo "#ifndef GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H" > $outdir/../builtin-shader-extern-gen.h
103 echo -e "#define GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H\n" >> $outdir/../builtin-shader-extern-gen.h
105 echo "#include <string_view>" >> $outdir/../builtin-shader-extern-gen.h
106 echo "" >> $outdir/../builtin-shader-extern-gen.h
108 for name in $all_shaders ; do
109 varname=$(echo "SHADER_$name" | tr [a-z] [A-Z] | sed -e 's/-/_/g;s/\./_/g;')
110 newname=$(echo ${name} | sed -e 's/\./-/;')".h"
111 echo "extern const std::string_view $varname;" >> $outdir/../builtin-shader-extern-gen.h
113 cat >> $outdir/../builtin-shader-extern-gen.h << EOF
115 #endif // GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H