diff --git a/Makefile b/Makefile index a6e45005..8bdb2307 100755 --- a/Makefile +++ b/Makefile @@ -176,17 +176,19 @@ ifndef VERBOSE .SILENT: endif +DEPFLAGS = -MT $(@:.d=.o) -MM -MG $< -o $@ + %$(INFO).d: %.c @echo Making deps $@ - $(CROSS)$(CC) $(CPPFLAGS) -MT $@ -MM -MG $^ -o $@ + $(CROSS)$(CC) $(CPPFLAGS) $(DEPFLAGS) %$(INFO).d: %.cpp @echo Making deps $@ - $(CROSS)$(CXX) $(CPPFLAGS) -MT $@ -MM -MG $^ -o $@ + $(CROSS)$(CXX) $(CPPFLAGS) $(DEPFLAGS) %$(INFO).d: %.m @echo Making deps $@ - $(CROSS)$(CC) $(CPPFLAGS) -MT $@ -MM -MG $^ -o $@ + $(CROSS)$(CC) $(CPPFLAGS) $(DEPFLAGS) ifneq ($(MAKECMDGOALS), clean) include $(DEPENDS) @@ -213,9 +215,7 @@ $(NAME): $(OBJS) $(DEPS) @echo Making Objective-C object $@ $(CROSS)$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ -SCRIPTS := $(shell ls scripts/*.js*) -CORE != (ls icons/* fonts/*) -CORE := $(CORE) $(SCRIPTS) +CORE != (ls icons/* fonts/* shaders/*.cg scripts/*.js*) packer: tools/packer.c source/engine/miniz.c @echo Making packer diff --git a/scripts/base.js b/scripts/base.js index ecd69dd0..458eeb95 100644 --- a/scripts/base.js +++ b/scripts/base.js @@ -1556,8 +1556,9 @@ Math.sortpointsccw = function(points) var yaml = {}; yaml.tojson = function(yaml) { + // Replace key value pairs that are strings with quotation marks around them yaml = yaml.replace(/(\w+):/g, '"$1":'); - yaml = yaml.replace(/: ([\w\.]+)/g, ': "$1"'); + yaml = yaml.replace(/: ([\w\.\/]+)/g, ': "$1"'); // TODO: make this more general yaml = yaml.split("\n"); var cont = {}; diff --git a/scripts/render.js b/scripts/render.js index d66a854a..622fde37 100644 --- a/scripts/render.js +++ b/scripts/render.js @@ -110,12 +110,17 @@ function global_uni(uni, stage) return false; } - + render.make_shader = function(shader) { var file = shader; shader = io.slurp(shader); - var writejson = `${file.name()}_c.json`; + console.info(shader); + if (!shader) { + console.info(`not found! slurping shaders/${file}`); + shader = io.slurp(`shaders/${file}`); + } + var writejson = `.prosperon/${file.name()}.shader.json`; var st = profile.now(); breakme: if (io.exists(writejson)) { @@ -133,15 +138,18 @@ render.make_shader = function(shader) return obj; } - var out = `${file.name()}.shader`; + var out = `.prosperon/${file.name()}.shader`; var files = [file]; - + var incs = shader.match(/#include <.*>/g); if (incs) for (var inc of incs) { var filez = inc.match(/#include <(.*)>/)[1]; var macro = io.slurp(filez); + if (!macro) + macro = io.slurp(`shaders/${filez}`); + shader = shader.replace(inc, macro); files.push(filez); } @@ -177,7 +185,7 @@ render.make_shader = function(shader) var yamlfile = `${out}_reflection.yaml`; console.info(`slurping ${yamlfile}`); var jjson = yaml.tojson(io.slurp(yamlfile)); - var obj = json.decode(jjson); + var obj = json.decode(jjson); io.rm(yamlfile); obj = obj.shaders[0].programs[0]; diff --git a/source/engine/jsffi.c b/source/engine/jsffi.c index 6dbac7e1..41c8572a 100644 --- a/source/engine/jsffi.c +++ b/source/engine/jsffi.c @@ -1219,6 +1219,10 @@ JSValue js_io_slurpbytes(JSContext *js, JSValue self, int argc, JSValue *argv) char *f = js2str(argv[0]); size_t len; unsigned char *d = slurp_file(f,&len); + if (!d) { + JS_FreeCString(js,f); + return JS_UNDEFINED; + } JSValue ret = JS_NewArrayBufferCopy(js,d,len); JS_FreeCString(js,f); free(d);