diff options
Diffstat (limited to 'rfont.c3l/rfont.c3')
| -rw-r--r-- | rfont.c3l/rfont.c3 | 198 |
1 files changed, 112 insertions, 86 deletions
diff --git a/rfont.c3l/rfont.c3 b/rfont.c3l/rfont.c3 index 3c7af6a..0743258 100644 --- a/rfont.c3l/rfont.c3 +++ b/rfont.c3l/rfont.c3 @@ -1,5 +1,4 @@ -/* -* +/** * Copyright (C) 2026 andromeda * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. @@ -7,8 +6,7 @@ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. -* -*/ +**/ module rfont; @@ -20,110 +18,138 @@ alias Surface = void*; struct Render_data { - float* verts; - float* tcoords; - ushort* elements; - Texture atlas; - usz nverts; - usz nelements; + float* verts; + float* tcoords; + ushort* elements; + Texture atlas; + usz nverts; + usz nelements; } -alias Renderer_proc_size = fn usz(); -alias Renderer_proc_initPtr = fn void(void*); -alias Renderer_proc_create_atlas = fn Texture(void*, uint, uint); -alias Renderer_proc_free_atlas = fn void(void*, Texture); +alias Renderer_proc_size = fn usz(); +alias Renderer_proc_initPtr = fn void(void*); +alias Renderer_proc_create_atlas = fn Texture(void*, uint, uint); +alias Renderer_proc_free_atlas = fn void(void*, Texture); alias Renderer_proc_bitmap_to_atlas = fn void(void*, Texture, uint, uint, uint, char*, float, float, float*, float*); -alias Renderer_proc_render = fn void(void*, Render_data*); +alias Renderer_proc_render = fn void(void*, Render_data*); alias Renderer_proc_set_framebuffer = fn void(void*, uint, uint); -alias Renderer_proc_set_color = fn void(void*, float, float, float, float); -alias Renderer_proc_set_surface = fn void(void*, Surface); -alias Renderer_proc_freePtr = fn void(void*); +alias Renderer_proc_set_color = fn void(void*, float, float, float, float); +alias Renderer_proc_set_surface = fn void(void*, Surface); +alias Renderer_proc_freePtr = fn void(void*); struct Renderer_proc { - Renderer_proc_size size; - Renderer_proc_initPtr initPtr; - Renderer_proc_create_atlas create_atlas; - Renderer_proc_free_atlas free_atlas; - Renderer_proc_bitmap_to_atlas bitmap_to_atlas; - Renderer_proc_render render; - Renderer_proc_set_framebuffer set_framebuffer; - Renderer_proc_set_color set_color; - Renderer_proc_set_surface set_surface; - Renderer_proc_freePtr freePtr; + Renderer_proc_size size; + Renderer_proc_initPtr initPtr; + Renderer_proc_create_atlas create_atlas; + Renderer_proc_free_atlas free_atlas; + Renderer_proc_bitmap_to_atlas bitmap_to_atlas; + Renderer_proc_render render; + Renderer_proc_set_framebuffer set_framebuffer; + Renderer_proc_set_color set_color; + Renderer_proc_set_surface set_surface; + Renderer_proc_freePtr freePtr; } struct Renderer { - void* ctx; - Renderer_proc proc; + void* ctx; + Renderer_proc proc; } struct Font { - Src* src; - float fheight; - float descent; - float numOfLongHorMetrics; - float space_adv; - uint maxHeight; - Glyph[MAX_GLYPHS] glyphs; - usz glyph_len; - Texture atlas; - usz atlasWidth; - usz atlasHeight; - float atlasX; - float atlasY; - float[INIT_VERTS*3] verts; - float[INIT_VERTS*2] tcoords; - ushort[INIT_VERTS*6] elements; + Src* src; + float fheight; + float descent; + float numOfLongHorMetrics; + float space_adv; + uint maxHeight; + Glyph[MAX_GLYPHS] glyphs; + usz glyph_len; + Texture atlas; + usz atlasWidth; + usz atlasHeight; + float atlasX; + float atlasY; + float[INIT_VERTS * 3] verts; + float[INIT_VERTS * 2] tcoords; + ushort[INIT_VERTS * 6] elements; } struct Glyph { - uint codepoint; - usz size; - int x; - int x2; - int y; - int y2; - Font* font; - int src; - float w; - float h; - float x1; - float y1; - float advance; + uint codepoint; + usz size; + int x; + int x2; + int y; + int y2; + Font* font; + int src; + float w; + float h; + float x1; + float y1; + float advance; } alias Src = void; alias Glyph_fallback_callback = fn Glyph(Renderer*, Font*, uint, usz); -extern fn CChar* codepoint_to_utf8(uint) @cname("RFont_codepoint_to_utf8"); -extern fn Font* font_init(Renderer*, ZString, uint, usz, usz) @cname("RFont_font_init"); -extern fn Font* font_init_ptr(Renderer*, ZString, uint, usz, usz, Font*) @cname("RFont_font_init_ptr"); -extern fn Font* font_init_data(Renderer*, char*, uint, usz, usz) @cname("RFont_font_init_data"); -extern fn Font* font_init_data_ptr(Renderer*, char*, uint, usz, usz, Font*) @cname("RFont_font_init_data_ptr"); -extern fn void font_free(Renderer*, Font*) @cname("RFont_font_free"); -extern fn void font_free_ptr(Renderer*, Font*) @cname("RFont_font_free_ptr"); -extern fn Glyph_fallback_callback set_glyph_fallback_callback(Glyph_fallback_callback) @cname("RFont_set_glyph_fallback_callback"); -extern fn Glyph font_add_char(Renderer*, Font*, CChar, usz) @cname("RFont_font_add_char"); -extern fn Glyph font_add_codepoint(Renderer*, Font*, uint, usz) @cname("RFont_font_add_codepoint"); -extern fn Glyph font_add_codepoint_ex(Renderer*, Font*, uint, usz, char) @cname("RFont_font_add_codepoint_ex"); -extern fn void font_add_string(Renderer*, Font*, ZString, usz*, usz) @cname("RFont_font_add_string"); -extern fn void font_add_string_len(Renderer*, Font*, ZString, usz, usz*, usz) @cname("RFont_font_add_string_len"); -extern fn void text_area(Renderer*, Font*, ZString, uint, uint*, uint*) @cname("RFont_text_area"); -extern fn void text_area_spacing(Renderer*, Font*, ZString, float, uint, uint*, uint*) @cname("RFont_text_area_spacing"); -extern fn void text_area_len(Renderer*, Font*, ZString, usz, uint, usz, float, uint*, uint*) @cname("RFont_text_area_len"); -extern fn void draw_text(Renderer*, Font*, ZString, float, float, uint) @cname("RFont_draw_text"); -extern fn void draw_text_spacing(Renderer*, Font*, ZString, float, float, uint, float) @cname("RFont_draw_text_spacing"); -extern fn void draw_text_len(Renderer*, Font*, ZString, usz, float, float, uint, float) @cname("RFont_draw_text_len"); -extern fn usz renderer_size(Renderer*) @cname("RFont_renderer_size"); -extern fn Renderer* renderer_init(Renderer_proc) @cname("RFont_renderer_init"); -extern fn void renderer_initPtr(Renderer_proc, void*, Renderer*) @cname("RFont_renderer_initPtr"); -extern fn void renderer_set_framebuffer(Renderer*, uint, uint) @cname("RFont_renderer_set_framebuffer"); -extern fn void renderer_set_surface(Renderer*, Surface) @cname("RFont_renderer_set_surface"); -extern fn void renderer_set_color(Renderer*, float, float, float, float) @cname("RFont_renderer_set_color"); -extern fn void renderer_free(Renderer*) @cname("RFont_renderer_free"); -extern fn void renderer_freePtr(Renderer*) @cname("RFont_renderer_freePtr"); +extern fn CChar* codepoint_to_utf8(uint) @cname("RFont_codepoint_to_utf8"); +extern fn Font* font_init(Renderer*, ZString, uint, usz, usz) @cname("RFont_font_init"); +extern fn Font* font_init_ptr(Renderer*, ZString, uint, usz, usz, Font*) @cname("RFont_font_init_ptr"); +extern fn Font* font_init_data(Renderer*, char*, uint, usz, usz) @cname("RFont_font_init_data"); +extern fn Font* font_init_data_ptr(Renderer*, char*, uint, usz, usz, Font*) @cname("RFont_font_init_data_ptr"); +extern fn void font_free(Renderer*, Font*) @cname("RFont_font_free"); +extern fn void font_free_ptr(Renderer*, Font*) @cname("RFont_font_free_ptr"); +extern fn Glyph_fallback_callback set_glyph_fallback_callback( + Glyph_fallback_callback +) @cname("RFont_set_glyph_fallback_callback"); +extern fn Glyph font_add_char(Renderer*, Font*, CChar, usz) @cname("RFont_font_add_char"); +extern fn Glyph font_add_codepoint(Renderer*, Font*, uint, usz) @cname("RFont_font_add_codepoint"); +extern fn Glyph font_add_codepoint_ex(Renderer*, Font*, uint, usz, char) @cname("RFont_font_add_codepoint_ex"); +extern fn void font_add_string(Renderer*, Font*, ZString, usz*, usz) @cname("RFont_font_add_string"); +extern fn void font_add_string_len(Renderer*, Font*, ZString, usz, usz*, usz) @cname("RFont_font_add_string_len"); +extern fn void text_area(Renderer*, Font*, ZString, uint, uint*, uint*) @cname("RFont_text_area"); +extern fn void text_area_spacing( + Renderer*, + Font*, + ZString, + float, + uint, + uint*, + uint* +) @cname("RFont_text_area_spacing"); +extern fn void text_area_len( + Renderer*, + Font*, + ZString, + usz, + uint, + usz, + float, + uint*, + uint* +) @cname("RFont_text_area_len"); +extern fn void draw_text(Renderer*, Font*, ZString, float, float, uint) @cname("RFont_draw_text"); +extern fn void draw_text_spacing( + Renderer*, + Font*, + ZString, + float, + float, + uint, + float +) @cname("RFont_draw_text_spacing"); +extern fn void draw_text_len(Renderer*, Font*, ZString, usz, float, float, uint, float) @cname("RFont_draw_text_len"); +extern fn usz renderer_size(Renderer*) @cname("RFont_renderer_size"); +extern fn Renderer* renderer_init(Renderer_proc) @cname("RFont_renderer_init"); +extern fn void renderer_initPtr(Renderer_proc, void*, Renderer*) @cname("RFont_renderer_initPtr"); +extern fn void renderer_set_framebuffer(Renderer*, uint, uint) @cname("RFont_renderer_set_framebuffer"); +extern fn void renderer_set_surface(Renderer*, Surface) @cname("RFont_renderer_set_surface"); +extern fn void renderer_set_color(Renderer*, float, float, float, float) @cname("RFont_renderer_set_color"); +extern fn void renderer_free(Renderer*) @cname("RFont_renderer_free"); +extern fn void renderer_freePtr(Renderer*) @cname("RFont_renderer_freePtr");
\ No newline at end of file |
