]> git.tdb.fi Git - libs/gl.git/blobdiff - scripts/resgen.py
Generate the entire shaderlib into a single file
[libs/gl.git] / scripts / resgen.py
index 16cfbfb9a76e99c7fc3c09d6130071030423aacf..110055cf4980ea815684849604f3a44ca3a9b097 100755 (executable)
@@ -12,30 +12,47 @@ def makename(text):
                        result += '_'
        return result
 
-def escape(text):
-       result = ""
-       for c in text:
-               if c=='\t':
-                       result += "\\t"
-               elif c=='\n':
-                       result += "\\n"
-               elif c=='"':
-                       result += "\\\""
-               else:
-                       result += c
-       return result
+def escape_char(c):
+       if c=='\t':
+               return "\\t"
+       elif c=='\n':
+               return "\\n"
+       elif c=='"':
+               return "\\\""
+       else:
+               return c
 
-name = makename(os.path.split(sys.argv[1])[1])
-lines = open(sys.argv[1]).readlines()
-out = open(sys.argv[2], "w")
-out.write("""namespace Msp {
+out = open(sys.argv[-1], "w")
+
+out.write("""#include <msp/datafile/builtinsource.h>
+
+namespace Msp {
 namespace GL {
+
 """)
-out.write("extern const char {}_data[] =\n".format(name))
-for l in lines:
-       out.write("\t\"{}\"\n".format(escape(l)))
-out.write(""";
 
+objects = {}
+for fn in sys.argv[1:-1]:
+       in_base = os.path.split(fn)[1]
+       name = makename(in_base)+"_data"
+       objects[in_base] = name
+       out.write("const char {}[] =\n".format(name))
+       data = open(fn).read()
+       line = ""
+       for c in data:
+               line += escape_char(c)
+               if len(line)>=68:
+                       out.write("\t\"{}\"\n".format(line))
+                       line = ""
+       out.write("\t\"{}\";\n\n".format(line))
+
+out_base = os.path.splitext(os.path.split(sys.argv[-1])[1])[0]
+out.write("void init_{}(DataFile::BuiltinSource &source)\n{{\n".format(makename(out_base)))
+for n, d in objects.items():
+       out.write("\tsource.add_object(\"{}\", {});\n".format(n, d))
+out.write("}\n")
+
+out.write("""
 } // namespace GL
 } // namespace Msp
 """)