diff options
Diffstat (limited to 'source/renderer/renderer.h')
-rw-r--r-- | source/renderer/renderer.h | 87 |
1 files changed, 82 insertions, 5 deletions
diff --git a/source/renderer/renderer.h b/source/renderer/renderer.h index 806d832..6d9b7f6 100644 --- a/source/renderer/renderer.h +++ b/source/renderer/renderer.h @@ -1,5 +1,79 @@ #pragma once +#define STB_TRUETYPE_IMPLEMENTATION +#include "stb_truetype.h" + +#include "../core.h" +#include "../math.h" +#include "../array/array.h" + +#define BATCH_SIZE 2000 + +struct TextChar { + s64 lsb; + s64 advance; + Vec2 bbox0; + Vec2 bbox1; + Vec2 size; +}; + +struct TextState { + r32 scale; + u32 pixel_size; + s32 ascent; + s32 descent; + s32 linegap; + u32 texture_atlas_id; + u32 sp; + u32 vao; + u32 vbo; + u32 chunk_size; + IVec2 bbox0; + IVec2 bbox1; + stbtt_fontinfo font; + s32* char_indexes; + Mat4* transforms; + TextChar* char_map; +}; + +struct GLRenderer { + // colored quad + b8 cq_init; + u32 cq_sp; + u32 cq_vao; + // camera + Vec3 preset_up_dir; + Mat4 cam_proj; + // ui camera + b8 ui_cam_update; + Vec3 ui_cam_pos; + Vec3 ui_cam_look; + Mat4 ui_cam_view; + // game camera + b8 cam_update; + Vec3 cam_pos; + Vec3 cam_look; + Mat4 cam_view; + // Batched cq + // batching buffer + u32 cq_batch_sp; + u32 cq_batch_vao; + u32 cq_batch_vbo; + u32 cq_batch_count; + r32_array cq_pos_batch; + r32_array cq_color_batch; + // Batched line + u32 line_sp; + u32 line_vao; + u32 line_vbo; + u32 line_batch_count; + r32_array line_pos_batch; + r32_array line_color_batch; + + // ui text + TextState ui_text; +}; + u32 gl_shader_program(char *vs, char *fs); u32 gl_shader_program_from_path(const char *vspath, const char *fspath); @@ -17,7 +91,7 @@ void gl_setup_colored_quad_optimized( GLRenderer* renderer, u32 sp ); -void gl_draw_colored_quad_optimised( +void gl_draw_colored_quad_optimized( GLRenderer* renderer, Vec3 position, Vec2 size, @@ -26,18 +100,21 @@ void gl_draw_colored_quad_optimised( void gl_cq_flush(GLRenderer *renderer); // ==================== LINE ==================== -void gl_setup_colored_line(GLRenderer *renderer, u32 sp); -void gl_draw_colored_line( +void gl_setup_line(GLRenderer *renderer, u32 sp); +void gl_draw_line( GLRenderer *renderer, Vec3 start, Vec3 end, - Vec2 size, Vec3 color ); void gl_line_flush(GLRenderer *renderer); // ==================== FONT RENDERING ==================== void gl_setup_text(TextState *uistate); -void gl_render_text(GLRenderer *renderer, Vec2 position, Vec2 color, r32 size); +void gl_render_text(GLRenderer *renderer, + char *text, + Vec2 position, + Vec3 color, + r32 font_size); void gl_text_flush(GLRenderer *renderer, u32 render_count); |