Fix Linux and Windows build issues; texture looks in CDBs first
This commit is contained in:
parent
c9c05d931d
commit
60d078321c
17
Makefile
17
Makefile
|
@ -127,7 +127,6 @@ LDLIBS := $(addprefix -l, $(LDLIBS))
|
|||
DEPENDS = $(OBJS:.o=.d)
|
||||
-include $(DEPENDS)
|
||||
|
||||
|
||||
MYTAG = $(VER)_$(PTYPE)_$(INFO)
|
||||
|
||||
DIST = yugine-$(PLAT)-$(COM)$(ZIP)
|
||||
|
@ -156,10 +155,12 @@ $(DISTDIR)/$(DIST): $(BIN)/$(NAME)
|
|||
@mkdir -p $(DISTDIR)
|
||||
@$(PKGCMD)
|
||||
|
||||
$(BIN)/libengine.a: $(OBJS)
|
||||
$(BIN)/libengine.a: $(SHADERS) source/engine/core.cdb.h .WAIT $(OBJS)
|
||||
@$(AR) rcs $@ $(OBJS)
|
||||
|
||||
$(BIN)/libcdb.a:
|
||||
mkdir -p $(BIN)
|
||||
rm -f $(CDB)/libcdb.a
|
||||
make -C $(CDB) libcdb.a
|
||||
cp $(CDB)/libcdb.a $(BIN)
|
||||
|
||||
|
@ -169,7 +170,7 @@ $(BIN)/libquickjs.a:
|
|||
@mkdir -p $(BIN)
|
||||
cp -rf quickjs/libquickjs.* $(BIN)
|
||||
|
||||
$(OBJDIR)/%.o: %.c $(SHADERS)
|
||||
$(OBJDIR)/%.o: %.c
|
||||
@mkdir -p $(@D)
|
||||
@echo Making C object $@
|
||||
@$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
@ -182,7 +183,7 @@ shaders: $(SHADERS)
|
|||
@./sokol-shdc --ifdef -i $^ --slang=glsl330:hlsl5:metal_macos -o $@
|
||||
|
||||
cdb: tools/cdb.c $(BIN)/libcdb.a
|
||||
$(CC) $^ -I$(CDB) -o cdb
|
||||
$(CC) $< -lcdb -L$(BIN) -I$(CDB) -o cdb
|
||||
|
||||
source/engine/core.cdb.h: core.cdb
|
||||
xxd -i $< > $@
|
||||
|
@ -200,8 +201,8 @@ core.cdb: packer $(CORE)
|
|||
packer: tools/packer.c $(BIN)/libcdb.a
|
||||
cc $^ -Isource/engine/thirdparty/tinycdb -o packer
|
||||
|
||||
jso: tools/jso.c quickjs/libquickjs.a
|
||||
cc tools/jso.c -lquickjs -Lquickjs -Iquickjs -o jso
|
||||
jso: tools/jso.c $(BIN)/libquickjs.a
|
||||
$(CC) $< -lquickjs -lm -L$(BIN) -Iquickjs -o $@
|
||||
|
||||
%.jso: %.js jso
|
||||
@echo Making $@ from $<
|
||||
|
@ -209,8 +210,10 @@ jso: tools/jso.c quickjs/libquickjs.a
|
|||
|
||||
clean:
|
||||
@echo Cleaning project
|
||||
@rm -rf bin/* dist/*
|
||||
@rm -rf bin dist
|
||||
@rm -f shaders/*.sglsl.h shaders/*.metal core.cdb jso cdb packer TAGS
|
||||
@make -C $(CDB) clean
|
||||
@make -C quickjs clean
|
||||
|
||||
TAGINC != find . -name "*.[chj]"
|
||||
tags: $(TAGINC)
|
||||
|
|
|
@ -208,7 +208,7 @@ Object.defineProperty(String.prototype, 'ext', {
|
|||
|
||||
Object.defineProperty(String.prototype, 'set_ext', {
|
||||
value: function(val) {
|
||||
return this.name() + val;
|
||||
return this.dir() + "/" + this.name() + val;
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -1,14 +1,10 @@
|
|||
var files = {};
|
||||
function load(file) {
|
||||
var modtime = cmd(0, file);
|
||||
|
||||
if (modtime === 0) {
|
||||
Log.stack();
|
||||
return false;
|
||||
}
|
||||
var modtime = cmd(0, file);
|
||||
files[file] = modtime;
|
||||
}
|
||||
}
|
||||
|
||||
load("scripts/base.js");
|
||||
load("scripts/std.js");
|
||||
|
||||
function initialize()
|
||||
|
@ -31,9 +27,6 @@ function run(file)
|
|||
return cmd(117, file);
|
||||
}
|
||||
|
||||
|
||||
load("scripts/base.js");
|
||||
|
||||
load("scripts/diff.js");
|
||||
Log.level = 1;
|
||||
|
||||
|
@ -629,5 +622,3 @@ Game.view_camera(Primum.spawn(ur.camera2d));
|
|||
Window.name = "Primum Machinam (V0.1)";
|
||||
Window.width = 1280;
|
||||
Window.height = 720;
|
||||
|
||||
Log.warn("AMDE IT");
|
||||
|
|
|
@ -177,3 +177,4 @@ Cmdline.register_cmd("t", function() {
|
|||
Log.warn("Testing not implemented yet.");
|
||||
Game.quit();
|
||||
}, "Test suite.");
|
||||
|
||||
|
|
|
@ -553,16 +553,6 @@ int point2segindex(cpVect p, cpVect *segs, double slop) {
|
|||
return best;
|
||||
}
|
||||
|
||||
int file_exists(char *path) {
|
||||
FILE *o = fopen(path, "r");
|
||||
if (o) {
|
||||
fclose(o);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
JSValue duk_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv) {
|
||||
int cmd = js2int(argv[0]);
|
||||
const char *str = NULL;
|
||||
|
@ -830,7 +820,7 @@ JSValue duk_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
|||
|
||||
case 65:
|
||||
str = JS_ToCString(js, argv[1]);
|
||||
ret = JS_NewBool(js, file_exists(str));
|
||||
ret = JS_NewBool(js, fexists(str));
|
||||
break;
|
||||
|
||||
case 66:
|
||||
|
@ -1107,6 +1097,12 @@ JSValue duk_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
|||
case 137:
|
||||
ret = v22js(screen2world(js2hmmv2(argv[1])));
|
||||
break;
|
||||
|
||||
case 138:
|
||||
str = JS_ToCString(js, argv[1]);
|
||||
ret = JS_NewInt64(js, jso_file(str));
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if (str)
|
||||
|
|
|
@ -94,7 +94,7 @@ char *seprint(char *fmt, ...)
|
|||
char test[128];
|
||||
int len = vsnprintf(test, 128, fmt, args);
|
||||
if (len > 128) {
|
||||
char test = malloc(len+1);
|
||||
char *test = malloc(len+1);
|
||||
vsnprintf(test, len+1, fmt, args);
|
||||
return strdup(test);
|
||||
}
|
||||
|
@ -190,6 +190,18 @@ void *cdb_slurp(struct cdb *cdb, const char *file, size_t *size)
|
|||
return data;
|
||||
}
|
||||
|
||||
int fexists(char *path)
|
||||
{
|
||||
return !access(path,R_OK);
|
||||
|
||||
int len = strlen(path);
|
||||
if (cdb_find(&game_cdb, path,len)) return 1;
|
||||
else if (cdb_find(&core_cdb, path, len)) return 1;
|
||||
else if (!access(path, R_OK)) return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned char *slurp_file(const char *filename, size_t *size)
|
||||
{
|
||||
if (cdb_find(&game_cdb, filename, strlen(filename)))
|
||||
|
|
|
@ -14,6 +14,7 @@ FILE *res_open(char *path, const char *tag);
|
|||
FILE *path_open(const char *tag, const char *fmt, ...);
|
||||
char *make_path(const char *file);
|
||||
char **ls(char *path);
|
||||
int fexists(char *path);
|
||||
|
||||
unsigned char *slurp_file(const char *filename, size_t *size);
|
||||
char *slurp_text(const char *filename, size_t *size);
|
||||
|
|
|
@ -45,8 +45,8 @@ void script_startup() {
|
|||
|
||||
for (int i = 0; i < 100; i++)
|
||||
num_cache[i] = int2js(i);
|
||||
|
||||
script_dofile("scripts/engine.js");
|
||||
|
||||
script_dofile("scripts/engine.js");
|
||||
// jso_file("scripts/engine.js");
|
||||
}
|
||||
|
||||
|
@ -141,7 +141,7 @@ JSValue script_runjso(const uint8_t *buf, size_t len)
|
|||
time_t jso_file(const char *file)
|
||||
{
|
||||
size_t len;
|
||||
uint8_t *byte = compile_script(file, &len);
|
||||
uint8_t *byte = slurp_file(file, &len);
|
||||
JSValue obj = JS_ReadObject(js, byte, len, JS_READ_OBJ_BYTECODE);
|
||||
JSValue ret = JS_EvalFunction(js, obj);
|
||||
js_print_exception(ret);
|
||||
|
|
|
@ -25,7 +25,7 @@ static struct {
|
|||
struct Texture *tex_default;
|
||||
|
||||
struct Texture *texture_notex() {
|
||||
return texture_pullfromfile("./icons/no_tex.png");
|
||||
return texture_pullfromfile("icons/no_tex.png");
|
||||
}
|
||||
|
||||
unsigned int next_pow2(unsigned int v)
|
||||
|
@ -86,19 +86,22 @@ struct Texture *texture_pullfromfile(const char *path) {
|
|||
|
||||
int n;
|
||||
|
||||
long rawlen;
|
||||
unsigned char *raw = slurp_file(path, &rawlen);
|
||||
unsigned char *data;
|
||||
|
||||
char *ext = strrchr(path, '.');
|
||||
|
||||
if (ext && !strcmp(ext, ".qoi")) {
|
||||
qoi_desc qoi;
|
||||
data = qoi_read(path, &qoi, 4);
|
||||
data = qoi_decode(raw, rawlen, &qoi, 4);
|
||||
tex->width = qoi.width;
|
||||
tex->height = qoi.height;
|
||||
n = qoi.channels;
|
||||
} else {
|
||||
data = stbi_load(path, &tex->width, &tex->height, &n, 4);
|
||||
data = stbi_load_from_memory(raw, rawlen, &tex->width, &tex->height, &n, 4);
|
||||
}
|
||||
free(raw);
|
||||
|
||||
if (data == NULL) {
|
||||
YughError("STBI failed to load file %s with message: %s\nOpening default instead.", path, stbi_failure_reason());
|
||||
|
|
1
source/engine/thirdparty/sokol/sokol_gfx.h
vendored
1
source/engine/thirdparty/sokol/sokol_gfx.h
vendored
|
@ -3897,6 +3897,7 @@ inline int sg_append_buffer(sg_buffer buf_id, const sg_range& data) { return sg_
|
|||
#define GL_TEXTURE_COMPARE_MODE 0x884C
|
||||
#define GL_TEXTURE_COMPARE_FUNC 0x884D
|
||||
#define GL_COMPARE_REF_TO_TEXTURE 0x884E
|
||||
#define GL_VIEWPORT 0x0BA2
|
||||
#endif
|
||||
|
||||
#ifndef GL_UNSIGNED_INT_2_10_10_10_REV
|
||||
|
|
7
source/engine/thirdparty/tinycdb/cdb_make.c
vendored
7
source/engine/thirdparty/tinycdb/cdb_make.c
vendored
|
@ -147,7 +147,14 @@ cdb_make_finish_internal(struct cdb_make *cdbmp)
|
|||
_cdb_make_fullwrite(cdbmp->cdb_fd, p, 2048) != 0)
|
||||
return -1;
|
||||
|
||||
/* TODO: Windows doesn't support fsync; simple workaround is to not do it!
|
||||
It does not seem that the lower level open(), read(), write() require it anyway.
|
||||
*/
|
||||
#ifdef _WIN32
|
||||
return 0;
|
||||
#else
|
||||
return fsync(cdbmp->cdb_fd);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -34,10 +34,6 @@
|
|||
|
||||
#include "string.h"
|
||||
|
||||
#include "nuklear.h"
|
||||
#include "sokol/sokol_gfx.h"
|
||||
#include "sokol/sokol_nuklear.h"
|
||||
|
||||
#define SOKOL_TRACE_HOOKS
|
||||
#define SOKOL_IMPL
|
||||
|
||||
|
|
22
tools/jso.c
22
tools/jso.c
|
@ -4,21 +4,6 @@
|
|||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
char *seprint(char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start (args, fmt);
|
||||
char test[128];
|
||||
int len = vsnprintf(test, 128, fmt, args);
|
||||
if (len > 128) {
|
||||
char test = malloc(len+1);
|
||||
vsnprintf(test, len+1, fmt, args);
|
||||
return test;
|
||||
}
|
||||
|
||||
return strdup(test);
|
||||
}
|
||||
|
||||
static JSContext *js = NULL;
|
||||
static JSRuntime *rt = NULL;
|
||||
|
||||
|
@ -46,18 +31,13 @@ int main (int argc, char **argv)
|
|||
void *script = malloc(fsize);
|
||||
fread(script,fsize,1,f);
|
||||
fclose(f);
|
||||
JSValue obj = JS_Eval(js, script, fsize, argv[i], JS_EVAL_FLAG_COMPILE_ONLY | JS_EVAL_FLAG_STRICT);
|
||||
JSValue obj = JS_Eval(js, script, fsize, argv[i], JS_EVAL_FLAG_COMPILE_ONLY);
|
||||
size_t out_len;
|
||||
uint8_t *out;
|
||||
out = JS_WriteObject(js, &out_len, obj, JS_WRITE_OBJ_BYTECODE);
|
||||
|
||||
printf(out);
|
||||
return 0;
|
||||
|
||||
char *out_name = seprint("%s.o", argv[i]);
|
||||
FILE *fo = fopen(out_name, "wb");
|
||||
fputs(out, fo);
|
||||
fclose(fo);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue