/*- * Copyright (C) 2025 Alessandro Iezzi * * This file is part of Tris Game. * * Tris Game is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Tris Game is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Tris Game. If not, see . */ #include #include #include #include "../ui/ui.h" #define RANGE_GL 2.0f static float xstep; static float ystep; static int width; static int height; typedef struct Engine { void (*draw_frame)(); } Engine; static Engine engine; /* FPS */ static time_t start; static int frames; static time_t end; void engine_init(int w, int h) { width = w; height = h; ui_init(w, h); xstep = RANGE_GL / (float) w; ystep = RANGE_GL / (float) h; } void engine_draw_line(int x1, int y1, int x2, int y2) { float _x1 = x1 * xstep - 1; float _y1 = (height - y1) * ystep - 1; float _x2 = x2 * xstep - 1; float _y2 = (height - y2) * ystep - 1; glVertex2f(_x1, _y1); glVertex2f(_x2, _y2); } static void engine_calculate_fps() { frames ++; end = time(NULL); if (end - start >= 1.0) { printf("FPS: %d\n", frames); frames = 0; start = time(NULL); } } static void draw_frames() { glClearColor(0.0f, 0.0f, 0.2f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_LINE_SMOOTH); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); engine.draw_frame(); engine_calculate_fps(); } void engine_loop(void (*draw_frame)()) { engine.draw_frame = draw_frame; ui_set_loop_listener(draw_frames); /* FPS calculation */ start = time(NULL); frames = 0; ui_loop(); }