summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rendering.cc62
-rw-r--r--src/rendering.h32
-rw-r--r--src/text.cc13
-rw-r--r--src/text.h9
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;
}
diff --git a/src/text.h b/src/text.h
index 73b4e03..a328c00 100644
--- a/src/text.h
+++ b/src/text.h
@@ -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);