aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--renderer.c184
-rw-r--r--renderer.h2
2 files changed, 93 insertions, 93 deletions
diff --git a/renderer.c b/renderer.c
index e1fb704..4720ac0 100644
--- a/renderer.c
+++ b/renderer.c
@@ -42,81 +42,6 @@ static int buf_idx;
static SDL_Window *window;
-void r_init(void) {
- /* init SDL window */
- SDL_Init(SDL_INIT_EVERYTHING);
- window = SDL_CreateWindow(
- NULL, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
- WIDTH, HEIGHT, SDL_WINDOW_OPENGL);
- SDL_GL_CreateContext(window);
-
- /* init gl */
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glDisable(GL_CULL_FACE);
- glDisable(GL_DEPTH_TEST);
- glEnable(GL_SCISSOR_TEST);
- glEnable(GL_TEXTURE_2D);
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- glEnableClientState(GL_COLOR_ARRAY);
-
- /* init texture */
- GLuint id;
- glGenTextures(1, &id);
- glBindTexture(GL_TEXTURE_2D, id);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, ATLAS_WIDTH, ATLAS_HEIGHT, 0,
- GL_ALPHA, GL_UNSIGNED_BYTE, atlas_texture);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- assert(glGetError() == 0);
-}
-
-
-static void handle_event(SDL_Event e, mu_Context *ctx) {
- switch (e.type) {
- case SDL_QUIT: {
- exit(EXIT_SUCCESS);
- }
- break; case SDL_MOUSEMOTION: {
- mu_input_mousemove(ctx, e.motion.x, e.motion.y);
- }
- break; case SDL_MOUSEWHEEL: {
- mu_input_scroll(ctx, 0, e.wheel.y * -30);
- }
- break; case SDL_TEXTINPUT: {
- mu_input_text(ctx, e.text.text);
- }
- break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: {
- int b = button_map[e.button.button & 0xff];
- if (b && e.type == SDL_MOUSEBUTTONDOWN) {
- mu_input_mousedown(ctx, e.button.x, e.button.y, b);
- }
- if (b && e.type == SDL_MOUSEBUTTONUP) {
- mu_input_mouseup(ctx, e.button.x, e.button.y, b);
- }
- }
- break; case SDL_KEYDOWN: case SDL_KEYUP: {
- int c = key_map[e.key.keysym.sym & 0xff];
- if (c && e.type == SDL_KEYDOWN) {
- mu_input_keydown(ctx, c);
- }
- if (c && e.type == SDL_KEYUP) {
- mu_input_keyup(ctx, c);
- }
- }
- }
-}
-
-
-void r_handle_input(mu_Context *ctx) {
- SDL_Event e;
- while (SDL_PollEvent(&e)) {
- handle_event(e, ctx);
- }
-}
-
-
static void flush(void) {
if (buf_idx == 0) { return; }
@@ -192,8 +117,46 @@ static void push_quad(mu_Rect dst, mu_Rect src, mu_Color color) {
}
-static void draw_rect(mu_Rect rect, mu_Color color) {
- push_quad(rect, atlas[ATLAS_WHITE], color);
+static void handle_event(SDL_Event e, mu_Context *ctx) {
+ switch (e.type) {
+ case SDL_QUIT: {
+ exit(EXIT_SUCCESS);
+ }
+ break; case SDL_MOUSEMOTION: {
+ mu_input_mousemove(ctx, e.motion.x, e.motion.y);
+ }
+ break; case SDL_MOUSEWHEEL: {
+ mu_input_scroll(ctx, 0, e.wheel.y * -30);
+ }
+ break; case SDL_TEXTINPUT: {
+ mu_input_text(ctx, e.text.text);
+ }
+ break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: {
+ int b = button_map[e.button.button & 0xff];
+ if (b && e.type == SDL_MOUSEBUTTONDOWN) {
+ mu_input_mousedown(ctx, e.button.x, e.button.y, b);
+ }
+ if (b && e.type == SDL_MOUSEBUTTONUP) {
+ mu_input_mouseup(ctx, e.button.x, e.button.y, b);
+ }
+ }
+ break; case SDL_KEYDOWN: case SDL_KEYUP: {
+ int c = key_map[e.key.keysym.sym & 0xff];
+ if (c && e.type == SDL_KEYDOWN) {
+ mu_input_keydown(ctx, c);
+ }
+ if (c && e.type == SDL_KEYUP) {
+ mu_input_keyup(ctx, c);
+ }
+ }
+ }
+}
+
+
+static void clear(mu_Color clr) {
+ flush();
+ glClearColor(clr.r / 255., clr.g / 255., clr.b / 255., clr.a / 255.);
+ glClear(GL_COLOR_BUFFER_BIT);
}
@@ -211,11 +174,8 @@ static void draw_text(const char *text, mu_Vec2 pos, mu_Color color) {
}
-static void draw_icon(int id, mu_Rect rect, mu_Color color) {
- mu_Rect src = atlas[id];
- int x = rect.x + (rect.w - src.w) / 2;
- int y = rect.y + (rect.h - src.h) / 2;
- push_quad(mu_rect(x, y, src.w, src.h), src, color);
+static void draw_rect(mu_Rect rect, mu_Color color) {
+ push_quad(rect, atlas[ATLAS_WHITE], color);
}
@@ -225,6 +185,14 @@ static void set_clip_rect(mu_Rect rect) {
}
+static void draw_icon(int id, mu_Rect rect, mu_Color color) {
+ mu_Rect src = atlas[id];
+ int x = rect.x + (rect.w - src.w) / 2;
+ int y = rect.y + (rect.h - src.h) / 2;
+ push_quad(mu_rect(x, y, src.w, src.h), src, color);
+}
+
+
static void render_command(mu_Command *cmd) {
switch (cmd->type) {
case MU_COMMAND_TEXT: {
@@ -243,10 +211,42 @@ static void render_command(mu_Command *cmd) {
}
-static void clear(mu_Color clr) {
- flush();
- glClearColor(clr.r / 255., clr.g / 255., clr.b / 255., clr.a / 255.);
- glClear(GL_COLOR_BUFFER_BIT);
+void r_init(void) {
+ /* init SDL window */
+ SDL_Init(SDL_INIT_EVERYTHING);
+ window = SDL_CreateWindow(
+ NULL, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
+ WIDTH, HEIGHT, SDL_WINDOW_OPENGL);
+ SDL_GL_CreateContext(window);
+
+ /* init gl */
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glDisable(GL_CULL_FACE);
+ glDisable(GL_DEPTH_TEST);
+ glEnable(GL_SCISSOR_TEST);
+ glEnable(GL_TEXTURE_2D);
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ glEnableClientState(GL_COLOR_ARRAY);
+
+ /* init texture */
+ GLuint id;
+ glGenTextures(1, &id);
+ glBindTexture(GL_TEXTURE_2D, id);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, ATLAS_WIDTH, ATLAS_HEIGHT, 0,
+ GL_ALPHA, GL_UNSIGNED_BYTE, atlas_texture);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ assert(glGetError() == 0);
+}
+
+
+void r_handle_input(mu_Context *ctx) {
+ SDL_Event e;
+ while (SDL_PollEvent(&e)) {
+ handle_event(e, ctx);
+ }
}
@@ -260,6 +260,12 @@ void r_render(mu_Context *ctx) {
}
+void r_present(void) {
+ flush();
+ SDL_GL_SwapWindow(window);
+}
+
+
int r_get_text_width(const char *text, int len) {
int res = 0;
for (const char *p = text; *p && len--; p++) {
@@ -279,9 +285,3 @@ int r_get_text_height(void) {
void r_get_window_size(int *w, int *h) {
SDL_GetWindowSize(window, w, h);
}
-
-
-void r_present(void) {
- flush();
- SDL_GL_SwapWindow(window);
-}
diff --git a/renderer.h b/renderer.h
index aa4446b..759bfd6 100644
--- a/renderer.h
+++ b/renderer.h
@@ -6,10 +6,10 @@
void r_init(void);
void r_handle_input(mu_Context *ctx);
void r_render(mu_Context *ctx);
+void r_present(void);
int r_get_text_width(const char *text, int len);
int r_get_text_height(void);
void r_get_window_size(int *w, int *h);
-void r_present(void);
#endif