aboutsummaryrefslogtreecommitdiff
path: root/src/graveyard/gl_renderer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/graveyard/gl_renderer.h')
-rw-r--r--src/graveyard/gl_renderer.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/graveyard/gl_renderer.h b/src/graveyard/gl_renderer.h
new file mode 100644
index 0000000..9c70c04
--- /dev/null
+++ b/src/graveyard/gl_renderer.h
@@ -0,0 +1,52 @@
+struct Gl_Render_Rect {
+ u32 vertex_array;
+ u32 vertex_buffer;
+ u32 shader;
+};
+
+struct Gl_Render_Font {
+ u32 vertex_array;
+ u32 vertex_buffer;
+ u32 index_buffer;
+ u32 texture;
+ u32 shader;
+ stbtt_bakedchar baked_chars[96];
+};
+
+class Gl_Renderer : public Renderer {
+private:
+ Gl_Render_Rect m_render_rect;
+ Gl_Render_Font m_render_font;
+
+ f32 m_projection_stbtt[4][4];
+ f32 m_projection[4][4];
+
+ i32 m_width;
+ i32 m_height;
+
+
+public:
+ Gl_Renderer();
+
+public:
+ bool init(f32 font_size, u8 *ttf_buff, const char *font_vs, const char *font_fs, const char *rect_vs, const char *rect_fs);
+
+ void viewport(i32 x, i32 y, i32 width, i32 height) override;
+ void draw_background(V3 color) override;
+ void draw_rect(Rect rect, V3 color) override;
+ void draw_text(const char *text, f32 x, f32 y) override;
+
+
+private:
+ bool get_functions();
+ bool init_text_drawing(u8 *ttf_buff, const char *vs_src, const char *fs_src, f32 font_size);
+ bool init_rect_drawing(const char *vs_src, const char *fs_src);
+
+ bool create_shader(u32 *shader, const char *vs_src, const char *fs_src);
+ bool compile_shader(u32 *id, const char *src, GLenum type);
+
+
+ // updates
+ void ortho(f32 mat44[4][4], f32 x0, f32 y0, f32 x1, f32 y1, f32 z0, f32 z1);
+};
+