add tweaks
This commit is contained in:
@@ -18,14 +18,12 @@ int main(int argc, char **argv) {
|
|||||||
int ok = 0;
|
int ok = 0;
|
||||||
|
|
||||||
ma_arena_t *arena = ma_create(ma_default_reserve_size);
|
ma_arena_t *arena = ma_create(ma_default_reserve_size);
|
||||||
|
|
||||||
if (cache_code_modified(s8_lit("../src/core/core_math_gen.py"), s8_null)) {
|
if (cache_code_modified(s8_lit("../src/core/core_math_gen.py"), s8_null)) {
|
||||||
os_set_working_dir("../src/core");
|
os_set_working_dir("../src/core");
|
||||||
os_systemf("py core_math_gen.py");
|
os_systemf("py core_math_gen.py");
|
||||||
os_set_working_dir("../../build");
|
os_set_working_dir("../../build");
|
||||||
}
|
}
|
||||||
|
mt_app(arena);
|
||||||
meta_app(arena);
|
|
||||||
mt_wasm_app(arena);
|
mt_wasm_app(arena);
|
||||||
|
|
||||||
b32 run_server = false;
|
b32 run_server = false;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
void meta_app(ma_arena_t *arena) {
|
void mt_app(ma_arena_t *arena) {
|
||||||
sb8_t *h = sb8_serial_begin(arena);
|
sb8_t *h = sb8_serial_begin(arena);
|
||||||
sb8_t *c = sb8_serial_begin(arena);
|
sb8_t *c = sb8_serial_begin(arena);
|
||||||
|
|
||||||
|
|||||||
@@ -326,17 +326,22 @@ fn void lex_token_ex(lexer_t *lex, lex_t *token) {
|
|||||||
|
|
||||||
token->len = (i32)(lex->at - token->str);
|
token->len = (i32)(lex->at - token->str);
|
||||||
|
|
||||||
if (token->kind == lex_kind_integer || token->kind == lex_kind_real) {
|
if (token->kind == lex_kind_integer) {
|
||||||
|
s8_t string_to_lex = token->string;
|
||||||
if (token->suffix != lex_suffix_none) {
|
if (token->suffix != lex_suffix_none) {
|
||||||
s8_t string_value = ti_enum_value_to_name(token->suffix, type(lex_suffix_t));
|
s8_t string_value = ti_enum_value_to_name(token->suffix, type(lex_suffix_t));
|
||||||
s8_t prefix = s8_lit("lex_suffix_");
|
s8_t prefix = s8_lit("lex_suffix_");
|
||||||
token->len -= string_value.len - prefix.len;
|
string_to_lex.len -= string_value.len - prefix.len;
|
||||||
}
|
}
|
||||||
}
|
token->integer = u64_from_s8(string_to_lex, 10);
|
||||||
if (token->kind == lex_kind_integer) {
|
|
||||||
token->integer = u64_from_s8(token->string, 10);
|
|
||||||
} else if (token->kind == lex_kind_real) {
|
} else if (token->kind == lex_kind_real) {
|
||||||
token->real = f64_from_s8(token->string);
|
s8_t string_to_lex = token->string;
|
||||||
|
if (token->suffix != lex_suffix_none) {
|
||||||
|
s8_t string_value = ti_enum_value_to_name(token->suffix, type(lex_suffix_t));
|
||||||
|
s8_t prefix = s8_lit("lex_suffix_");
|
||||||
|
string_to_lex.len -= string_value.len - prefix.len;
|
||||||
|
}
|
||||||
|
token->real = f64_from_s8(string_to_lex);
|
||||||
} else if (token->kind == lex_kind_string) {
|
} else if (token->kind == lex_kind_string) {
|
||||||
token->str += 1;
|
token->str += 1;
|
||||||
token->len -= 2;
|
token->len -= 2;
|
||||||
|
|||||||
@@ -50,6 +50,17 @@ struct type_member_t {
|
|||||||
b8 dont_serialize;
|
b8 dont_serialize;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct mt_tweak_t mt_tweak_t;
|
||||||
|
struct mt_tweak_t {
|
||||||
|
type_t *type;
|
||||||
|
s8_t name;
|
||||||
|
void *ptr;
|
||||||
|
f32 min, max;
|
||||||
|
};
|
||||||
|
#define mt_embed_file(name, path)
|
||||||
|
#define mt_tweak_f32(name, default, min, max)
|
||||||
|
#define mt_tweak_b32(name, default)
|
||||||
|
|
||||||
//
|
//
|
||||||
// serialization to string
|
// serialization to string
|
||||||
#define ti_deserial_data(ARENA, DATA, TYPE) (TYPE *)ti__deserial_data(ARENA, DATA, type(TYPE))
|
#define ti_deserial_data(ARENA, DATA, TYPE) (TYPE *)ti__deserial_data(ARENA, DATA, type(TYPE))
|
||||||
|
|||||||
@@ -24,18 +24,19 @@
|
|||||||
// #include "render/backup_font.c"
|
// #include "render/backup_font.c"
|
||||||
#include "render/font.c"
|
#include "render/font.c"
|
||||||
#include "render/render_opengl.c"
|
#include "render/render_opengl.c"
|
||||||
|
|
||||||
#include "wasm_app.gen.c"
|
#include "wasm_app.gen.c"
|
||||||
|
|
||||||
#include "ui_iter.c"
|
#include "ui_iter.c"
|
||||||
#include "ui.c"
|
#include "ui.c"
|
||||||
|
|
||||||
#define mt_embed_file(variable, path)
|
|
||||||
|
|
||||||
fn void app_init(f32 dpr) {
|
fn void app_init(f32 dpr) {
|
||||||
ma_arena_t *perm = &tcx._perm;
|
ma_arena_t *perm = &tcx._perm;
|
||||||
mt_embed_file(font_liberation_mono, "package/liberation-mono.ttf");
|
mt_embed_file(font_liberation_mono, "package/liberation-mono.ttf");
|
||||||
rn_init(perm, s8_array(font_liberation_mono), 50 * dpr);
|
rn_init(perm, s8_array(font_liberation_mono), 50 * dpr);
|
||||||
ui_demo_init(perm);
|
ui_demo_init(perm);
|
||||||
|
mt_tweak_b32(memes, true);
|
||||||
|
mt_tweak_f32(scrollasdasd, 32.0f, 0, 100.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn b32 app_update(app_frame_t *frame) {
|
fn b32 app_update(app_frame_t *frame) {
|
||||||
|
|||||||
@@ -1691,3 +1691,10 @@ u8 font_liberation_mono[] = {
|
|||||||
255,255,0,3,0,1,0,0,0,14,0,0,0,24,0,32,0,0,0,2,0,1,0,1,2,160,0,1,0,4,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,201,137,111,49,0,0,0,0,189,118,137,36,
|
255,255,0,3,0,1,0,0,0,14,0,0,0,24,0,32,0,0,0,2,0,1,0,1,2,160,0,1,0,4,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,201,137,111,49,0,0,0,0,189,118,137,36,
|
||||||
0,0,0,0,202,159,29,99,
|
0,0,0,0,202,159,29,99,
|
||||||
};
|
};
|
||||||
|
gb b32 memes = true;
|
||||||
|
gb f32 scrollasdasd = 32.0f;
|
||||||
|
mt_tweak_t tweak_table[] = {
|
||||||
|
{type(b32), s8_const_lit("memes"), &memes, 0, 0},
|
||||||
|
{type(f32), s8_const_lit("scrollasdasd"), &scrollasdasd, 0, 100.f},
|
||||||
|
|
||||||
|
};
|
||||||
|
|||||||
@@ -1,12 +1,26 @@
|
|||||||
|
typedef struct cg_tweak_t cg_tweak_t;
|
||||||
|
struct cg_tweak_t {
|
||||||
|
cg_tweak_t *next;
|
||||||
|
type_t *type;
|
||||||
|
s8_t name;
|
||||||
|
s8_t value;
|
||||||
|
s8_t min, max;
|
||||||
|
};
|
||||||
|
|
||||||
void mt_wasm_app(ma_arena_t *arena) {
|
void mt_wasm_app(ma_arena_t *arena) {
|
||||||
sb8_t *include_paths = sb8(arena);
|
sb8_t *include_paths = sb8(arena);
|
||||||
sb8_append(include_paths, OS_GetAbsolutePath(&Perm, s8_lit("../src")));
|
sb8_append(include_paths, OS_GetAbsolutePath(&Perm, s8_lit("../src")));
|
||||||
cg_files_t files = cg_lex_files(arena, s8_lit("../src/wasm_app/main.c"), include_paths);
|
cg_files_t files = cg_lex_files(arena, s8_lit("../src/wasm_app/main.c"), include_paths);
|
||||||
|
|
||||||
|
cg_tweak_t *first_tweak = NULL;
|
||||||
|
cg_tweak_t *last_tweak = NULL;
|
||||||
|
|
||||||
sb8_t *sb_embeds = sb8_serial_begin(arena);
|
sb8_t *sb_embeds = sb8_serial_begin(arena);
|
||||||
for (cg_file_t *it = files.first; it; it = it->next) {
|
for (cg_file_t *it = files.first; it; it = it->next) {
|
||||||
parser_t *par = parser_make(arena, it->tokens.data);
|
parser_t *par = parser_make(arena, it->tokens.data);
|
||||||
for (;par->at->kind != lex_kind_eof;) {
|
for (;par->at->kind != lex_kind_eof;) {
|
||||||
|
b32 matched = false;
|
||||||
|
|
||||||
if (par->at->inside_macro == false && parser_matchi(par, s8_lit("mt_embed_file"))) {
|
if (par->at->inside_macro == false && parser_matchi(par, s8_lit("mt_embed_file"))) {
|
||||||
parser_expect(par, lex_kind_open_paren);
|
parser_expect(par, lex_kind_open_paren);
|
||||||
lex_t *var_name = parser_expect(par, lex_kind_ident);
|
lex_t *var_name = parser_expect(par, lex_kind_ident);
|
||||||
@@ -16,11 +30,52 @@ void mt_wasm_app(ma_arena_t *arena) {
|
|||||||
s8_t relpath = s8_printf(arena, "../%S", path->string);
|
s8_t relpath = s8_printf(arena, "../%S", path->string);
|
||||||
s8_t content = OS_ReadFile(&Perm, relpath);
|
s8_t content = OS_ReadFile(&Perm, relpath);
|
||||||
cg_byte_array_from_data_ex(sb_embeds, content, var_name->string);
|
cg_byte_array_from_data_ex(sb_embeds, content, var_name->string);
|
||||||
} else {
|
matched = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (par->at->inside_macro == false && parser_matchi(par, s8_lit("mt_tweak_b32"))) {
|
||||||
|
cg_tweak_t *tweak = ma_push_type(arena, cg_tweak_t);
|
||||||
|
tweak->type = type(b32);
|
||||||
|
tweak->min = tweak->max = s8_lit("0");
|
||||||
|
parser_expect(par, lex_kind_open_paren);
|
||||||
|
tweak->name = parser_expect(par, lex_kind_ident)->string;
|
||||||
|
parser_expect(par, lex_kind_comma);
|
||||||
|
tweak->value = parser_next(par)->string;
|
||||||
|
parser_expect(par, lex_kind_close_paren);
|
||||||
|
SLLQ_APPEND(first_tweak, last_tweak, tweak);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (par->at->inside_macro == false && parser_matchi(par, s8_lit("mt_tweak_f32"))) {
|
||||||
|
cg_tweak_t *tweak = ma_push_type(arena, cg_tweak_t);
|
||||||
|
tweak->type = type(f32);
|
||||||
|
parser_expect(par, lex_kind_open_paren);
|
||||||
|
tweak->name = parser_expect(par, lex_kind_ident)->string;
|
||||||
|
parser_expect(par, lex_kind_comma);
|
||||||
|
tweak->value = parser_next(par)->string;
|
||||||
|
parser_expect(par, lex_kind_comma);
|
||||||
|
tweak->min = parser_next(par)->string;
|
||||||
|
parser_expect(par, lex_kind_comma);
|
||||||
|
tweak->max = parser_next(par)->string;
|
||||||
|
parser_expect(par, lex_kind_close_paren);
|
||||||
|
SLLQ_APPEND(first_tweak, last_tweak, tweak);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!matched) {
|
||||||
parser_next(par);
|
parser_next(par);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (cg_tweak_t *it = first_tweak; it; it = it->next) {
|
||||||
|
sb8_printf(sb_embeds, "gb %S %S = %S;\n", it->type->name, it->name, it->value);
|
||||||
|
}
|
||||||
|
sb8_printf(sb_embeds, "mt_tweak_t tweak_table[] = {\n");
|
||||||
|
for (cg_tweak_t *it = first_tweak; it; it = it->next) {
|
||||||
|
sb8_printf(sb_embeds, "{type(%S), s8_const_lit(\"%S\"), &%S, %S, %S},\n", it->type->name, it->name, it->name, it->min, it->max);
|
||||||
|
}
|
||||||
|
sb8_printf(sb_embeds, "\n};\n");
|
||||||
|
|
||||||
|
|
||||||
s8_t embeds = sb8_serial_end(arena, sb_embeds);
|
s8_t embeds = sb8_serial_end(arena, sb_embeds);
|
||||||
os_write_file(cg_cpath(arena), embeds);
|
os_write_file(cg_cpath(arena), embeds);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user