it's working on web and in window, waow

This commit is contained in:
Krzosa Karol
2025-01-22 11:08:16 +01:00
parent 802141a234
commit e54265fcac
24 changed files with 3320 additions and 1957 deletions

View File

@@ -0,0 +1,66 @@
fn_wasm_import void wasm_clear(void);
fn_wasm_import void wasm_draw_text(isize str, i32 len, f32 x, f32 y, isize font_str, i32 font_len, i32 font_size, f32 r, f32 g, f32 b, f32 a);
fn_wasm_import void wasm_draw_rect(f32 x, f32 y, f32 w, f32 h, f32 r, f32 g, f32 b, f32 a);
fn_wasm_import f32 wasm_measure_text(isize str, i32 len, isize font_str, i32 font_len, i32 font_size);
fn_wasm_import f32 wasm_get_font_height(isize font_str, i32 font_len, i32 font_size);
fn_wasm_import void wasm_set_clip(f32 x, f32 y, f32 w, f32 h);
gb_read_only s8_t font_face = s8_const_lit("consolas");
typedef struct rn_font_t rn_font_t;
struct rn_font_t {
f32 size;
};
typedef struct rn_state_t rn_state_t;
struct rn_state_t {
rn_font_t *main_font;
app_frame_t *frame;
};
rn_state_t rn_state;
// fn f64 get_font_height(void) {
// return wasm_get_font_height((isize) font_face.str, font_face.len, m*wasm_dpr) / wasm_dpr;
// }
fn void rn_init(ma_arena_t *perm, f32 font_size) {
rn_state.main_font = ma_push_type(perm, rn_font_t);
rn_state.main_font->size = font_size;
}
fn void rn_draw_rect(r2f32_t rect, v4f32_t color) {
wasm_draw_rect(wasm_dpr * rect.min.x, wasm_dpr * rect.min.y, wasm_dpr * (rect.max.x - rect.min.x), wasm_dpr * (rect.max.y - rect.min.y), color.r * 255.f, color.g * 255.f, color.b * 255.f, color.a);
}
fn void rn_draw_rect_border(r2f32_t rect, v4f32_t color, f32 border_thickness) {
}
fn v2f32_t rn_measure_string(rn_font_t *font, s8_t string) {
f32 x = wasm_measure_text((isize)string.str, string.len, (isize) font_face.str, font_face.len, rn_state.main_font->size) / wasm_dpr;
return (v2f32_t){x, rn_state.main_font->size};
}
fn v2f32_t rn_draw_string(rn_font_t *font, v2f32_t pos, v4f32_t color, s8_t string) {
wasm_draw_text((isize)string.str, string.len, wasm_dpr * pos.x, wasm_dpr * pos.y, (isize) font_face.str, font_face.len, rn_state.main_font->size, color.r * 255.f, color.g * 255.f, color.b * 255.f, color.a);
v2f32_t size = rn_measure_string(font, string);
return size;
}
fn v2f32_t rn_draw_stringf(rn_font_t *font, v2f32_t pos, v4f32_t color, char *str, ...) {
S8_FMT(tcx.temp, str, string);
return rn_draw_string(font, pos, color, string);
}
fn void rn_set_clip(r2f32_t rect) {
wasm_set_clip(wasm_dpr * rect.min.x, wasm_dpr * rect.min.y, wasm_dpr * (rect.max.x - rect.min.x), wasm_dpr * (rect.max.y - rect.min.y));
}
fn void rn_begin(app_frame_t *frame) {
rn_state.frame = frame;
r2f32_t window_rect = r2f32(0, 0, rn_state.frame->window_size.x, rn_state.frame->window_size.y);
wasm_clear();
rn_draw_rect(window_rect, white_color_global);
}
fn void rn_end() {
}