diff options
| author | Levent Kaya <levent@dev> | 2025-11-03 16:51:18 +0300 |
|---|---|---|
| committer | Levent Kaya <levent@dev> | 2025-11-03 16:51:18 +0300 |
| commit | d322babce46ee9041aabd3471be002323f3481c6 (patch) | |
| tree | 1dd947ca3860abe6841e58427857e52b7f07fade | |
| parent | 91cfe0c6b969c10987c8a06cd9048ff4b01a1788 (diff) | |
[feature] eliminate the dependency of mathlib linking
| -rw-r--r-- | emu/fbgl_viewer.c | 35 | ||||
| -rw-r--r-- | fbgl.h | 19 |
2 files changed, 51 insertions, 3 deletions
diff --git a/emu/fbgl_viewer.c b/emu/fbgl_viewer.c new file mode 100644 index 0000000..c6e077d --- /dev/null +++ b/emu/fbgl_viewer.c @@ -0,0 +1,35 @@ +#include <stdio.h> +#include <SDL2/SDL.h> + +#define SCREEN_WIDTH 800 +#define SCREEN_HEIGHT 600 +#define SCREEN_TITLE "FBGL Viewer" + +int main() +{ + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + printf("Couldn't initialize SDL: %s\n", SDL_GetError()); + return EXIT_FAILURE; + } + + SDL_Window *window = SDL_CreateWindow(SCREEN_TITLE, + SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + SCREEN_WIDTH, SCREEN_HEIGHT, 0); + if (!window) { + printf("Failed to open %d x %d window: %s\n", SCREEN_WIDTH, + SCREEN_HEIGHT, SDL_GetError()); + return EXIT_FAILURE; + } + + SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, 0); + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 250); + SDL_RenderClear(renderer); + SDL_RenderPresent(renderer); + SDL_Delay(2000); + SDL_DestroyWindow(window); + SDL_DestroyRenderer(renderer); + SDL_Quit(); + + return 0; +} @@ -189,10 +189,23 @@ bool fbgl_is_key_pressed(fbgl_key_t key); (uint8_t)(b * 255))) #define FBGL_F32RGBA_TO_U32(r, g, b, a) ((uint32_t)(((uint8_t)(a * 255) << 24) | ((uint8_t)(r * 255) << 16) | ((uint8_t)(g * 255) << 8) | (uint8_t)(b * 255)) +#define FBGL_INLINE static inline + // Inside functions static void i_fbgl_die(const char *s); static void i_fbgl_disable_raw_mode(); static void i_fbgl_enable_raw_mode(); +FBGL_INLINE i_fbgl_abs_int(int x); + + FBGL_INLINE i_fbgl_sqrt_int(int x); + + FBGL_INLINE i_fbgl_abs_int(int x) { + return x < 0 ? -x : x; + } + + FBGL_INLINE i_fbgl_sqrt_int(int x) { + return x * x; + } static void i_fbgl_die(const char *s) { @@ -330,8 +343,8 @@ void fbgl_put_pixel(int x, int y, uint32_t color, fbgl_t *fb) void fbgl_draw_line(fbgl_point_t x, fbgl_point_t y, uint32_t color, fbgl_t *buffer) { - const int32_t dx = abs(y.x - x.x); - const int32_t dy = abs(y.y - x.y); + const int32_t dx = i_fbgl_abs_int(y.x - x.x); + const int32_t dy = i_fbgl_abs_int(y.y - x.y); const int32_t sx = (x.x < y.x) ? 1 : -1; const int32_t sy = (x.y < y.y) ? 1 : -1; @@ -435,7 +448,7 @@ void fbgl_draw_circle_filled(int x, int y, int radius, uint32_t color, fbgl_t *fb) { for (int yy = -radius; yy <= radius; ++yy) { - int half_width = (int)sqrt(radius * radius - yy * yy); + int half_width = (int)i_fbgl_sqrt_int(radius * radius - yy * yy); int row_start = x - half_width; int row_end = x + half_width; |
