Fix Linux and Windows build issues; texture looks in CDBs first

This commit is contained in:
John Alanbrook 2023-09-18 15:45:51 +00:00
parent c9c05d931d
commit 60d078321c
13 changed files with 54 additions and 63 deletions

View file

@ -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)

View file

@ -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;
}
});

View file

@ -1,14 +1,10 @@
var files = {};
function load(file) {
var modtime = cmd(0, file);
if (modtime === 0) {
Log.stack();
return false;
}
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");

View file

@ -177,3 +177,4 @@ Cmdline.register_cmd("t", function() {
Log.warn("Testing not implemented yet.");
Game.quit();
}, "Test suite.");

View file

@ -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)

View file

@ -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)))

View file

@ -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);

View file

@ -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);

View file

@ -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());

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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;