Quicjs optimizes similar to engine; objects lerp from their prototype

This commit is contained in:
John Alanbrook 2023-09-06 17:17:16 +00:00
parent 7ddf807efd
commit e78e673576
9 changed files with 64 additions and 76 deletions

View file

@ -23,6 +23,7 @@ endif
ifeq ($(DBG),1) ifeq ($(DBG),1)
CFLAGS += -g CFLAGS += -g
INFO += dbg INFO += dbg
LDFLAGS += -g
else else
CFLAGS += -DNDEBUG CFLAGS += -DNDEBUG
LDFLAGS += -s LDFLAGS += -s
@ -149,11 +150,11 @@ $(DISTDIR)/$(DIST): $(BIN)/$(NAME) source/shaders/* $(SCRIPTS) assets/*
@$(PKGCMD) @$(PKGCMD)
$(BIN)/libengine.a: $(OBJS) $(BIN)/libengine.a: $(OBJS)
@$(AR) r $@ $^ @$(AR) rcs $@ $^
$(BIN)/libquickjs.a: $(BIN)/libquickjs.a:
make -C quickjs clean make -C quickjs clean
make -C quickjs libquickjs.a libquickjs.lto.a CC=$(CC) make -C quickjs OPT=$(OPT) libquickjs.a libquickjs.lto.a CC=$(CC)
cp quickjs/libquickjs.* $(BIN) cp quickjs/libquickjs.* $(BIN)
$(OBJDIR)/%.o:%.c $(OBJDIR)/%.o:%.c

View file

@ -110,7 +110,7 @@ endif
CFLAGS+=$(DEFINES) CFLAGS+=$(DEFINES)
CFLAGS_DEBUG=$(CFLAGS) -O0 CFLAGS_DEBUG=$(CFLAGS) -O0
CFLAGS_SMALL=$(CFLAGS) -Os CFLAGS_SMALL=$(CFLAGS) -Os
CFLAGS_OPT=$(CFLAGS) -Oz CFLAGS_OPT=$(CFLAGS) -O2
CFLAGS_NOLTO:=$(CFLAGS_OPT) CFLAGS_NOLTO:=$(CFLAGS_OPT)
LDFLAGS=-g LDFLAGS=-g
ifdef CONFIG_LTO ifdef CONFIG_LTO
@ -132,6 +132,14 @@ else
LDEXPORT=-rdynamic LDEXPORT=-rdynamic
endif endif
ifeq ($(OPT), small)
USEFLAGS = $(CFLAGS_SMALL)
else ifeq ($(OPT), 1)
USEFLAGS = $(CFLAGS_OPT)
else
USEFLAGS = $(CFLAGS_DEBUG)
endif
PROGS=qjs$(EXE) qjsc$(EXE) run-test262 PROGS=qjs$(EXE) qjsc$(EXE) run-test262
ifneq ($(CROSS_PREFIX),) ifneq ($(CROSS_PREFIX),)
QJSC_CC=gcc QJSC_CC=gcc

View file

@ -126,7 +126,6 @@ struct sFont *MakeFont(const char *fontfile, int height) {
snprintf(fontpath, 256, "fonts/%s", fontfile); snprintf(fontpath, 256, "fonts/%s", fontfile);
unsigned char *ttf_buffer = slurp_file(fontfile, NULL); unsigned char *ttf_buffer = slurp_file(fontfile, NULL);
YughWarn("TTF BUFFER P IS %p", ttf_buffer);
unsigned char *bitmap = malloc(packsize * packsize); unsigned char *bitmap = malloc(packsize * packsize);
stbtt_packedchar glyphs[95]; stbtt_packedchar glyphs[95];

View file

@ -146,7 +146,7 @@ char *strdup(const char *s) {
return new; return new;
} }
unsigned char *slurp_file(const char *filename, long *size) unsigned char *slurp_file(const char *filename, size_t *size)
{ {
if (cdb_find(&game_cdb, filename, strlen(filename))) { if (cdb_find(&game_cdb, filename, strlen(filename))) {
unsigned vlen, vpos; unsigned vlen, vpos;
@ -154,6 +154,7 @@ unsigned char *slurp_file(const char *filename, long *size)
vlen = cdb_datalen(&game_cdb); vlen = cdb_datalen(&game_cdb);
char *data = malloc(vlen); char *data = malloc(vlen);
cdb_read(&game_cdb, data, vlen, vpos); cdb_read(&game_cdb, data, vlen, vpos);
if (size) *size = vlen;
return strdup(data); return strdup(data);
} }
@ -165,9 +166,9 @@ unsigned char *slurp_file(const char *filename, long *size)
if (!f) return NULL; if (!f) return NULL;
fseek(f, 0, SEEK_END); fseek(f, 0, SEEK_END);
long fsize = ftell(f); size_t fsize = ftell(f);
fseek(f, 0, SEEK_SET); rewind(f);
unsigned char *slurp = malloc(fsize + 1); void *slurp = malloc(fsize);
fread(slurp, fsize, 1, f); fread(slurp, fsize, 1, f);
fclose(f); fclose(f);
@ -178,37 +179,13 @@ unsigned char *slurp_file(const char *filename, long *size)
char *slurp_text(const char *filename) char *slurp_text(const char *filename)
{ {
if (cdb_find(&game_cdb, filename, strlen(filename))) { size_t len;
unsigned vlen, vpos; char *str = slurp_file(filename, &len);
vpos = cdb_datapos(&game_cdb); char *retstr = malloc(len+1);
vlen = cdb_datalen(&game_cdb); memcpy(retstr, str, len);
char *data = malloc(vlen); retstr[len] = 0;
cdb_read(&game_cdb, data, vlen, vpos); free(str);
return strdup(data); return retstr;
}
FILE *f;
char *buf;
jump:
f = fopen(filename, "r");
if (!f) {
YughWarn("File %s doesn't exist.", filename);
return NULL;
}
long int fsize;
fseek(f, 0, SEEK_END);
fsize = ftell(f);
buf = malloc(fsize + 1);
rewind(f);
size_t r = fread(buf, sizeof(char), fsize, f);
buf[r] = '\0';
fclose(f);
return buf;
} }
int slurp_write(const char *txt, const char *filename) { int slurp_write(const char *txt, const char *filename) {
@ -245,7 +222,7 @@ static int ftw_pack(const char *path, const struct stat *sb, int flag)
if (!pack) return 0; if (!pack) return 0;
long len; size_t len;
void *file = slurp_file(path, &len); void *file = slurp_file(path, &len);
cdb_make_add(&cdbm, &path[2], strlen(&path[2]), file, len); cdb_make_add(&cdbm, &path[2], strlen(&path[2]), file, len);

View file

@ -16,7 +16,7 @@ char *make_path(const char *file);
char *strdup(const char *s); char *strdup(const char *s);
unsigned char *slurp_file(const char *filename, long *size); unsigned char *slurp_file(const char *filename, size_t *size);
char *slurp_text(const char *filename); char *slurp_text(const char *filename);
int slurp_write(const char *txt, const char *filename); int slurp_write(const char *txt, const char *filename);

View file

@ -45,8 +45,6 @@ void script_startup() {
for (int i = 0; i < 100; i++) for (int i = 0; i < 100; i++)
num_cache[i] = int2js(i); num_cache[i] = int2js(i);
script_dofile("scripts/engine.js");
} }
JSValue num_cache[100] = {0}; JSValue num_cache[100] = {0};

View file

@ -87,6 +87,7 @@ static float timescale = 1.f;
static int sim_play = SIM_PLAY; static int sim_play = SIM_PLAY;
#ifdef __TINYC__ #ifdef __TINYC__
int backtrace(void **buffer, int size) { int backtrace(void **buffer, int size) {
extern uint64_t *__libc_stack_end; extern uint64_t *__libc_stack_end;
@ -148,6 +149,8 @@ void c_init() {
render_init(); render_init();
script_evalf("initialize();"); script_evalf("initialize();");
} }
int frame_fps() { int frame_fps() {
@ -289,6 +292,25 @@ double get_timescale()
return timescale; return timescale;
} }
static sapp_desc start_desc = {
.width = 720,
.height = 1080,
.high_dpi = 0,
.sample_count = 1,
.fullscreen = 1,
.window_title = "Yugine",
.enable_clipboard = false,
.clipboard_size = 0,
.enable_dragndrop = true,
.max_dropped_files = 1,
.max_dropped_file_path_length = 2048,
.init_cb = c_init,
.frame_cb = c_frame,
.cleanup_cb = c_clean,
.event_cb = c_event,
.logger.func = sg_logging,
};
sapp_desc sokol_main(int argc, char **argv) { sapp_desc sokol_main(int argc, char **argv) {
#ifndef NDEBUG #ifndef NDEBUG
#ifdef __linux__ #ifdef __linux__
@ -323,6 +345,8 @@ sapp_desc sokol_main(int argc, char **argv) {
phys2d_init(); phys2d_init();
script_startup(); script_startup();
script_dofile("scripts/engine.js");
int argsize = 0; int argsize = 0;
for (int i = 1; i < argc; i++) { for (int i = 1; i < argc; i++) {
@ -343,22 +367,9 @@ sapp_desc sokol_main(int argc, char **argv) {
sound_init(); sound_init();
input_init(); input_init();
return (sapp_desc){ start_desc.width = mainwin.width;
.width = mainwin.width, start_desc.height = mainwin.height;
.height = mainwin.height, start_desc.fullscreen = 0;
.high_dpi = 0,
.sample_count = 8, return start_desc;
.fullscreen = 0,
.window_title = "Yugine",
.enable_clipboard = false,
.clipboard_size = 0,
.enable_dragndrop = true,
.max_dropped_files = 1,
.max_dropped_file_path_length = 2048,
.init_cb = c_init,
.frame_cb = c_frame,
.cleanup_cb = c_clean,
.event_cb = c_event,
.logger.func = sg_logging,
};
} }

View file

@ -477,7 +477,8 @@ Object.defineProperty(Array.prototype, 'lerp', {
} }
}); });
Object.lerp = function(to, t) { Object.defineProperty(Object.prototype, 'lerp',{
value: function(to, t) {
var self = this; var self = this;
var obj = {}; var obj = {};
@ -486,7 +487,7 @@ Object.lerp = function(to, t) {
}); });
return obj; return obj;
}; }});
/* MATH EXTENSIONS */ /* MATH EXTENSIONS */
Object.defineProperty(Number.prototype, 'lerp', { Object.defineProperty(Number.prototype, 'lerp', {
@ -496,12 +497,6 @@ Object.defineProperty(Number.prototype, 'lerp', {
} }
}); });
Math.lerp = function(from, to, t) {
var v = (to - from) * t + from;
v = Math.clamp(v, from, to);
return v;
}
Math.clamp = function (x, l, h) { return x > h ? h : x < l ? l : x; } Math.clamp = function (x, l, h) { return x > h ? h : x < l ? l : x; }
Math.random_range = function(min,max) { return Math.random() * (max-min) + min; }; Math.random_range = function(min,max) { return Math.random() * (max-min) + min; };

View file

@ -104,6 +104,11 @@ Cmdline.register_cmd("e", function(pawn) {
Game.quit(); Game.quit();
}, "Print input documentation for a given object in a markdown table." ); }, "Print input documentation for a given object in a markdown table." );
Cmdline.register_cmd("t", function() {
Log.warn("Testing not implemented yet.");
Game.quit();
}, "Test suite.");
function run(file) function run(file)
{ {
var modtime = cmd(119, file); var modtime = cmd(119, file);
@ -1142,18 +1147,12 @@ var Window = {
set height(h) { cmd(126, h); }, set height(h) { cmd(126, h); },
get width() { return cmd(48); }, get width() { return cmd(48); },
get height() { return cmd(49); }, get height() { return cmd(49); },
dimensions:[0,0], get dimensions() { return [this.width, this.height]; },
}; };
Window.icon = function(path) { cmd(90, path); }; Window.icon = function(path) { cmd(90, path); };
Window.icon.doc = "Set the icon of the window using the PNG image at path."; Window.icon.doc = "Set the icon of the window using the PNG image at path.";
Signal.register("window_resize", function(w, h) {
Window.width = w;
Window.height = h;
Window.dimensions = [w, h];
});
var IO = { var IO = {
exists(file) { return cmd(65, file);}, exists(file) { return cmd(65, file);},
slurp(file) { slurp(file) {