diff options
author | Mitya Selivanov <automainint@guattari.tech> | 2025-04-06 23:04:02 +0200 |
---|---|---|
committer | Mitya Selivanov <automainint@guattari.tech> | 2025-04-06 23:04:02 +0200 |
commit | e2ad36c4cd9f757b3843ac59c5c436819b70f442 (patch) | |
tree | e445f1d412dd10c67bca17424c382cadd11540ef /graphics.c | |
parent | 7ecc024796fc2e63c4e1731691d36817edc14916 (diff) | |
download | reduced_system_layer-e2ad36c4cd9f757b3843ac59c5c436819b70f442.zip |
Dynamic libraries; Refactor
Diffstat (limited to 'graphics.c')
-rwxr-xr-x | graphics.c | 36 |
1 files changed, 23 insertions, 13 deletions
@@ -141,6 +141,7 @@ typedef struct graphics_request_ { f64 width; } line; struct { + i32 font; vec4_f32 color; Box area; vec2 max_size; @@ -148,6 +149,7 @@ typedef struct graphics_request_ { c32 * text; } text_area; struct { + i32 font; vec4_f32 color; Box area; vec2 max_size; @@ -218,8 +220,8 @@ void fill_triangles_to_buffer (Pixel_Buffer dst, vec4_f32 color, vec2 position, void fill_quad_to_buffer (Pixel_Buffer dst, vec4_f32 color, vec2 vertices[4]); void fill_ellipse_to_buffer (Pixel_Buffer dst, vec4_f32 color, Box area); void fill_line_to_buffer (Pixel_Buffer dst, vec4_f32 color, vec2 vertices[2], f64 width); -void draw_text_area_to_buffer (Pixel_Buffer dst, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text); -void draw_text_cursor_to_buffer(Pixel_Buffer dst, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection); +void draw_text_area_to_buffer (Pixel_Buffer dst, i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text); +void draw_text_cursor_to_buffer(Pixel_Buffer dst, i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection); void draw_pixels_cached (Box area, Pixel_Buffer src); void fill_rectangle_cached (vec4_f32 color, Box area); @@ -228,8 +230,8 @@ void fill_triangles_cached (vec4_f32 color, vec2 position, vec2 scale, i64 num_ void fill_quad_cached (vec4_f32 color, vec2 vertices[4]); void fill_ellipse_cached (vec4_f32 color, Box area); void fill_line_cached (vec4_f32 color, vec2 vertices[2], f64 width); -void draw_text_area_cached (vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text); -void draw_text_cursor_cached(vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection); +void draw_text_area_cached (i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text); +void draw_text_cursor_cached(i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection); void draw_pixels (Box area, Pixel_Buffer src); void fill_rectangle (vec4_f32 color, Box area); @@ -238,8 +240,8 @@ void fill_triangles (vec4_f32 color, vec2 position, vec2 scale, i64 num_triangl void fill_quad (vec4_f32 color, vec2 vertices[4]); void fill_ellipse (vec4_f32 color, Box area); void fill_line (vec4_f32 color, vec2 vertices[2], f64 width); -void draw_text_area (vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text); -void draw_text_cursor(vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection); +void draw_text_area (i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text); +void draw_text_cursor(i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection); void perform_graphics_request(Graphics_Context context, Graphics_Request req); @@ -809,7 +811,7 @@ void external_font_render_to_buffer(Pixel_Buffer dst, i32 font, vec4_f32 color, } #endif // !defined(GRAPHICS_ENABLE_EXTERNAL_FONT) -void draw_text_area_to_buffer(Pixel_Buffer dst, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text) { +void draw_text_area_to_buffer(Pixel_Buffer dst, i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text) { if (text == NULL || num_chars <= 0 || max_size.x < EPSILON || max_size.y < EPSILON) return; @@ -830,7 +832,7 @@ void draw_text_area_to_buffer(Pixel_Buffer dst, vec4_f32 color, Box area, vec2 m draw_text_(dst, color, area.x, area.y, kx, ky, num_chars, text); } -void draw_text_cursor_to_buffer(Pixel_Buffer dst, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection) { +void draw_text_cursor_to_buffer(Pixel_Buffer dst, i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection) { if (max_size.x < EPSILON || max_size.y < EPSILON) return; @@ -1361,12 +1363,13 @@ void fill_line_cached(vec4_f32 color, vec2 vertices[2], f64 width) { ); } -void draw_text_area_cached(vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text) { +void draw_text_area_cached(i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text) { perform_graphics_request( (Graphics_Context) {0}, (Graphics_Request) { .op = GRAPHICS_DRAW_TEXT_AREA, .text_area = { + .font = font, .color = color, .area = area, .max_size = max_size, @@ -1377,12 +1380,13 @@ void draw_text_area_cached(vec4_f32 color, Box area, vec2 max_size, i64 num_char ); } -void draw_text_cursor_cached(vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection) { +void draw_text_cursor_cached(i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection) { perform_graphics_request( (Graphics_Context) {0}, (Graphics_Request) { .op = GRAPHICS_DRAW_TEXT_CURSOR, .text_cursor = { + .font = font, .color = color, .area = area, .max_size = max_size, @@ -1499,12 +1503,13 @@ void fill_line(vec4_f32 color, vec2 vertices[2], f64 width) { ); } -void draw_text_area(vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text) { +void draw_text_area(i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text) { perform_graphics_request( (Graphics_Context) { .disable_cache = 1, }, (Graphics_Request) { .op = GRAPHICS_DRAW_TEXT_AREA, .text_area = { + .font = font, .color = color, .area = area, .max_size = max_size, @@ -1515,12 +1520,13 @@ void draw_text_area(vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 ); } -void draw_text_cursor(vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection) { +void draw_text_cursor(i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection) { perform_graphics_request( (Graphics_Context) { .disable_cache = 1, }, (Graphics_Request) { .op = GRAPHICS_DRAW_TEXT_CURSOR, .text_cursor = { + .font = font, .color = color, .area = area, .max_size = max_size, @@ -1586,6 +1592,7 @@ static void graphics_request_hash_(Blake2b_State *S, Graphics_Request req) { break; case GRAPHICS_DRAW_TEXT_AREA: + blake2b_update(S, (u8 *) &req.text_area.font, sizeof req.text_area.font); blake2b_update(S, (u8 *) &req.text_area.color, sizeof req.text_area.color); blake2b_update(S, (u8 *) &req.text_area.area, sizeof req.text_area.area); blake2b_update(S, (u8 *) &req.text_area.max_size, sizeof req.text_area.max_size); @@ -1598,6 +1605,7 @@ static void graphics_request_hash_(Blake2b_State *S, Graphics_Request req) { break; case GRAPHICS_DRAW_TEXT_CURSOR: + blake2b_update(S, (u8 *) &req.text_cursor.font, sizeof req.text_cursor.font); blake2b_update(S, (u8 *) &req.text_cursor.color, sizeof req.text_cursor.color); blake2b_update(S, (u8 *) &req.text_cursor.area, sizeof req.text_cursor.area); blake2b_update(S, (u8 *) &req.text_cursor.max_size, sizeof req.text_cursor.max_size); @@ -1927,6 +1935,7 @@ static void perform_graphics_request_to_buffer_(Pixel_Buffer dst, Graphics_Reque case GRAPHICS_DRAW_TEXT_AREA: draw_text_area_to_buffer( dst, + req.text_area.font, req.text_area.color, req.text_area.area, req.text_area.max_size, @@ -1938,6 +1947,7 @@ static void perform_graphics_request_to_buffer_(Pixel_Buffer dst, Graphics_Reque case GRAPHICS_DRAW_TEXT_CURSOR: draw_text_cursor_to_buffer( dst, + req.text_cursor.font, req.text_cursor.color, req.text_cursor.area, req.text_cursor.max_size, @@ -2244,7 +2254,7 @@ BENCHMARK("draw text area") { BENCHMARK_BEGIN; { c32 text[] = { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'S', 'a', 'i', 'l', 'o', 'r', '!', }; - draw_text_area_to_buffer(_test_pixels, _test_color, (Box) { .x = 100, .y = 100, .width = 300, .height = 200, }, (vec2) { 100, 200 }, sizeof text / sizeof *text, text); + draw_text_area_to_buffer(_test_pixels, 0, _test_color, (Box) { .x = 100, .y = 100, .width = 300, .height = 200, }, (vec2) { 100, 200 }, sizeof text / sizeof *text, text); } BENCHMARK_END; } |