summaryrefslogtreecommitdiff
path: root/source/renderer/renderer.h
blob: 6d9b7f612625b097d729f97265fe0c2466a8c922 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#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);

// ==================== QUADS ====================
u32 gl_setup_colored_quad(u32 sp);
void gl_draw_colored_quad(
	GLRenderer* renderer,
	Vec3 position,
	Vec2 size,
	Vec3 color
    );

// batched renderer
void gl_setup_colored_quad_optimized(
	GLRenderer* renderer, 
	u32 sp
	);
void gl_draw_colored_quad_optimized(
	GLRenderer* renderer,
	Vec3 position,
	Vec2 size,
	Vec3 color
	);
void gl_cq_flush(GLRenderer *renderer);

// ==================== LINE ====================
void gl_setup_line(GLRenderer *renderer, u32 sp);
void gl_draw_line(
	GLRenderer *renderer,
	Vec3 start,
	Vec3 end,
	Vec3 color
	);
void gl_line_flush(GLRenderer *renderer);

// ==================== FONT RENDERING ====================
void gl_setup_text(TextState *uistate);
void gl_render_text(GLRenderer *renderer, 
		    char *text, 
		    Vec2 position, 
		    Vec3 color, 
		    r32 font_size);
void gl_text_flush(GLRenderer *renderer, u32 render_count);