summaryrefslogtreecommitdiff
path: root/src/main/engine/engine.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/engine/engine.c')
-rw-r--r--src/main/engine/engine.c50
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;
+}