diff options
| author | Fabrice <fabrice@schaub-dev.xyz> | 2026-02-11 23:26:31 +0100 |
|---|---|---|
| committer | Fabrice <fabrice@schaub-dev.xyz> | 2026-02-11 23:26:31 +0100 |
| commit | 8536bcc71498c9109ef4254760edc4cd70ddcccd (patch) | |
| tree | bafe2d4b267a3f3fb0753dee0c852b28bcfb619e /src | |
| parent | 9a90a8f6a6df2603c510f90ec351edf5aca4f8f6 (diff) | |
working on vao
Diffstat (limited to 'src')
| -rw-r--r-- | src/rendering.cc | 62 | ||||
| -rw-r--r-- | src/rendering.h | 32 | ||||
| -rw-r--r-- | src/text.cc | 13 | ||||
| -rw-r--r-- | src/text.h | 9 |
4 files changed, 110 insertions, 6 deletions
diff --git a/src/rendering.cc b/src/rendering.cc index 65a89b1..06a40c7 100644 --- a/src/rendering.cc +++ b/src/rendering.cc @@ -153,4 +153,64 @@ bool wayc_atlas_packer_allocate(struct atlas_packer_s* packer, u32 width, packer->row_height = wayc_max(packer->row_height, height); return true; -}
\ No newline at end of file +} + +bool wayc_vbo_init(vbo_t* vbo, usize size) { + wayc_notnull(vbo); + + glCreateBuffers(1, vbo); + if (*vbo == 0) return false; + + glNamedBufferStorage(*vbo, size, NULL, GL_DYNAMIC_STORAGE_BIT); + return true; +} + +bool wayc_vbo_upload(vbo_t vbo, usize offset, usize size, const u8* data) { + wayc_notnull(data); + + glNamedBufferSubData(vbo, offset, size, data); // TODO: add error checking + return true; +} + +void wayc_vbo_use(vbo_t vbo) { glBindBuffer(GL_ARRAY_BUFFER, vbo); } + +void wayc_vbo_deinit(vbo_t* vbo) { + wayc_notnull(vbo); + glDeleteBuffers(1, vbo); +} + +bool wayc_ebo_init(ebo_t* ebo, usize size) { + wayc_notnull(ebo); + + glCreateBuffers(1, ebo); + if (*ebo == 0) return false; + + glNamedBufferStorage(*ebo, size, NULL, GL_DYNAMIC_STORAGE_BIT); + return true; +} + +bool wayc_ebo_upload(ebo_t ebo, usize offset, usize size, const u8* data) { + wayc_notnull(data); + + glNamedBufferSubData(ebo, offset, size, data); + return true; +} + +void wayc_ebo_use(ebo_t ebo) { glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); } + +void wayc_ebo_deinit(ebo_t* ebo) { + wayc_notnull(ebo); + glDeleteBuffers(1, ebo); +} + +bool wayc_vao_init(vao_t* vao, vbo_t vbo, ebo_t ebo, const vao_attr_s* attrs, + u32 attr_count) { + wayc_notnull(vao); + wayc_notnull(attrs); + + glCreateVertexArrays(1, vao); + if (*vao == 0) return false; +} + +void wayc_vao_use(vao_t vao); +void wayc_vao_deinit(vao_t* vao);
\ No newline at end of file diff --git a/src/rendering.h b/src/rendering.h index f8db68e..145fe60 100644 --- a/src/rendering.h +++ b/src/rendering.h @@ -79,3 +79,35 @@ struct atlas_packer_s { bool wayc_atlas_packer_allocate(struct atlas_packer_s* packer, u32 width, u32 height, ivec2 out); + +typedef u32 vbo_t; + +bool wayc_vbo_init(vbo_t* vbo, usize size); +bool wayc_vbo_upload(vbo_t vbo, usize offset, usize size, const u8* data); +void wayc_vbo_use(vbo_t vbo); +void wayc_vbo_deinit(vbo_t* vbo); + +typedef u32 ebo_t; + +bool wayc_ebo_init(ebo_t* ebo, usize size); +bool wayc_ebo_upload(ebo_t ebo, usize offset, usize size, const u8* data); +void wayc_ebo_use(ebo_t ebo); +void wayc_ebo_deinit(ebo_t* ebo); + +typedef u32 vao_t; + +enum vao_attr_type_e { + VAO_ATTR_TYPE_FLOAT = GL_FLOAT, +}; + +struct vao_attr_s { + u32 size; + vao_attr_type_e type; + bool normalized; + u32 offset; +}; + +bool wayc_vao_init(vao_t* vao, vbo_t vbo, ebo_t ebo, const vao_attr_s* attrs, + u32 attr_count); +void wayc_vao_use(vao_t vao); +void wayc_vao_deinit(vao_t* vao); diff --git a/src/text.cc b/src/text.cc index d02cc77..0635440 100644 --- a/src/text.cc +++ b/src/text.cc @@ -19,9 +19,8 @@ static bool wayc_font_cache_lookup(struct font_s* font, codepoint_t codepoint, return ok; } -[[maybe_unused]] static void wayc_font_cache_insert(struct font_s* font, - codepoint_t codepoint, - struct glyph_s glyph) { +static void wayc_font_cache_insert(struct font_s* font, codepoint_t codepoint, + struct glyph_s glyph) { wayc_notnull(font); wayc_hashmap_insert(&font->cache, &codepoint, &glyph); } @@ -29,8 +28,14 @@ static bool wayc_font_cache_lookup(struct font_s* font, codepoint_t codepoint, enum font_context_error_e wayc_font_context_init(struct font_context_s* ctx) { wayc_notnull(ctx); + u32 vao; + glCreateVertexArrays(1, &vao); + if (vao == 0) return FONT_CONTEXT_ERROR_VAO_CREATION; + + + FT_Error err = FT_Init_FreeType(&ctx->library); - if (err) return FONT_CONTEXT_ERROR_LIBRARY; + if (err) return FONT_CONTEXT_ERROR_LIBRARY_LOADING; return FONT_CONTEXT_ERROR_NONE; } @@ -8,13 +8,20 @@ typedef u32 codepoint_t; +struct text_vertex_s { + vec2 pos; + vec2 uv; +}; + enum font_context_error_e { FONT_CONTEXT_ERROR_NONE, - FONT_CONTEXT_ERROR_LIBRARY, + FONT_CONTEXT_ERROR_LIBRARY_LOADING, + FONT_CONTEXT_ERROR_VAO_CREATION, }; struct font_context_s { FT_Library library; + u32 vao; }; enum font_context_error_e wayc_font_context_init(struct font_context_s* ctx); |
