diff options
Diffstat (limited to 'src/main/engine/engine.c')
-rw-r--r-- | src/main/engine/engine.c | 50 |
1 files changed, 13 insertions, 37 deletions
diff --git a/src/main/engine/engine.c b/src/main/engine/engine.c index 3abfbcc..a555a89 100644 --- a/src/main/engine/engine.c +++ b/src/main/engine/engine.c @@ -73,7 +73,6 @@ engine_new(int w, int h) log_error(_log, "Error allocating memory for engine"); exit(EXIT_FAILURE); } - engine->circles = list_create(); engine->lines = list_create(); engine->ui = ui_new(w, h); @@ -88,13 +87,6 @@ engine_set_window_title(Engine *engine, const char *title) ui_set_title(engine->ui, title); } -void -engine_draw_circle(float cx, float cy, float r, int num_segments, int outline) -{ - if (engine == NULL || engine->circles == NULL) return; - list_add(engine->circles, engine_circle_new(cx, cy, r, num_segments, outline)); -} - static Line * engine_new_line(float x1, float y1, float x2, float y2) { @@ -157,35 +149,11 @@ draw_lines() } static void -render_circle(Circle *circle) -{ - glBegin(GL_LINE_LOOP); - - for (int i = 0; i < circle->num_segments; i++) { - float theta = 2.0f * M_PI * i / circle->num_segments; - float x = circle->r * cosf(theta); - float y = circle->r * sinf(theta); - glVertex2f(circle->cx + x, circle->cy + y); - } - - glEnd(); -} - -static void -draw_circles() +draw_frames(void *data) { - if (engine == NULL || engine->circles == NULL || engine->circles->size <= 0) return; + if (data == NULL) return; - list_node_t *current = engine->circles->head; - do { - render_circle(current->data); - current = current->next; - } while (current != NULL); -} - -static void -draw_frames() -{ + Engine *engine = data; Color *bk = engine->rendering_background; glClearColor(bk->r, bk->g, bk->b, bk->a); @@ -195,7 +163,7 @@ draw_frames() glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); draw_lines(); - draw_circles(); + engine->draw_frame_listener->draw_frames(engine->draw_frame_listener->data); engine_calculate_fps(); } @@ -239,7 +207,7 @@ void engine_loop(void) { ui_set_resize_listener(engine_on_ui_expose); - ui_set_loop_listener(draw_frames); + ui_set_loop_listener(engine->ui, draw_frames, engine); /* FPS calculation */ start = time(NULL); @@ -313,3 +281,11 @@ engine_set_rendering_background_c(Engine *engine, Color *color) { engine_set_rendering_background(engine, color->r, color->g, color->b, color->a); } + +void +engine_set_rendering_listener(Engine *engine, void (*draw_frames)(void *data), void *data) +{ + engine->draw_frame_listener = malloc(sizeof(DrawFrameListener)); + engine->draw_frame_listener->draw_frames = draw_frames; + engine->draw_frame_listener->data = data; +} |