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
""")
namespace Msp {
namespace GL {
-extern const char singlepass_glsl_data[];
+void init_shaderlib(DataFile::BuiltinSource &);
Resources::Resources():
default_tex_filter(SGIS_generate_mipmap ? LINEAR_MIPMAP_LINEAR : LINEAR),
if(!init_done)
{
- builtins.add_object("singlepass.glsl", singlepass_glsl_data);
+ init_shaderlib(builtins);
init_done = true;
}