From b2764a3a349b48d7445202faa903383386c09a4c Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Fri, 18 Nov 2016 23:16:54 +0200 Subject: [PATCH] Generate the entire shaderlib into a single file Generating lots of small files seemed rather silly, and I found no good way to automatically generate the builtin init code. --- Build | 1 + scripts/resgen.py | 57 ++++++++++++++++++++++++++++---------------- source/resources.cpp | 4 ++-- 3 files changed, 40 insertions(+), 22 deletions(-) diff --git a/Build b/Build index fcdb6328..610fd18c 100644 --- a/Build +++ b/Build @@ -34,6 +34,7 @@ package "mspgl" in_suffix ".glsl"; out_suffix ".cpp"; command "scripts/resgen.py"; + processing_unit DIRECTORY; }; library "mspgl" diff --git a/scripts/resgen.py b/scripts/resgen.py index 16cfbfb9..110055cf 100755 --- a/scripts/resgen.py +++ b/scripts/resgen.py @@ -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 + +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 """) diff --git a/source/resources.cpp b/source/resources.cpp index 48e986ce..8f3b4b8b 100644 --- a/source/resources.cpp +++ b/source/resources.cpp @@ -23,7 +23,7 @@ using namespace std; 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), @@ -56,7 +56,7 @@ DataFile::BuiltinSource &Resources::get_builtins() if(!init_done) { - builtins.add_object("singlepass.glsl", singlepass_glsl_data); + init_shaderlib(builtins); init_done = true; } -- 2.45.2