From 96511ac848c5806b737d6fcd2b62c56a3fbcc826 Mon Sep 17 00:00:00 2001 From: Quinn Date: Wed, 29 Jan 2025 12:13:42 +0100 Subject: [PATCH] cleanup renderer code --- src/window/renderer.c | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/src/window/renderer.c b/src/window/renderer.c index a7d7e17..9e83955 100644 --- a/src/window/renderer.c +++ b/src/window/renderer.c @@ -33,31 +33,21 @@ int renderer_init(SDL_Window** window, SDL_Renderer** renderer) { return 0; } +// draws a block at the specified position static inline int draw_block(SDL_Renderer* renderer, uint8_t x, uint8_t y) { return SDL_RenderFillRect(renderer, &(SDL_Rect){x * BLOCK_WIDTH + 1, y * BLOCK_HEIGHT + 1, BLOCK_WIDTH - 1, BLOCK_HEIGHT - 1}); } +// sets the colour32 from the colour8 static inline void set_colour(SDL_Renderer* renderer, Colour c) { (void)SDL_SetRenderDrawColor(renderer, colour_red32(c), colour_green32(c), colour_blue32(c), colour_alpha32(c)); } -void renderer_update(const RenderData* render_data) { - SDL_Renderer* renderer = render_data->renderer; - GameData* data = render_data->game_data; - - int success = 0; // if an error occurs, this value is <0 - - // clear render - success |= SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF); - success |= SDL_RenderClear(renderer); - - SelectedShape selected = render_data->game_data->selected; +// draw the selected block +static void render_selected(SDL_Renderer* renderer, SelectedShape selected) { Shape selected_shape = shape_from_id(selected.id); - Colour selected_colour = colour_from_id(selected.id); + set_colour(renderer, colour_from_id(selected.id)); - set_colour(renderer, selected_colour); - - // draw the selected block for (uint8_t y = 0; y < SHAPE_HEIGHT; y++) { ShapeRow shape_row = shape_get_row(selected_shape, y); @@ -68,21 +58,36 @@ void renderer_update(const RenderData* render_data) { if (is_set(shape_row, x)) draw_block(renderer, selected.x + x, selected.y + y); } +} - // draw the block data in the level +// draw the block data in the level +static void render_level(SDL_Renderer* renderer, GameData* data) { for (uint8_t y = 0; y < ROWS; y++) { Row row = data->row[y]; for (uint8_t x = 0; x < COLUMNS; x++) { if (row[x].packed != 0) { set_colour(renderer, row[x]); - success |= draw_block(renderer, x, y); + draw_block(renderer, x, y); } } } +} + +void renderer_update(const RenderData* render_data) { + SDL_Renderer* renderer = render_data->renderer; + + int success = 0; // if an error occurs, this value is <0 + + // clear render + success |= SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF); + success |= SDL_RenderClear(renderer); + + render_selected(renderer, render_data->game_data->selected); + render_level(renderer, render_data->game_data); if (success < 0) { - warn("\033[93mW\033[0m: something went wrong whilst renderering! SDL Error: %s\n", SDL_GetError()); + warn("something went wrong whilst renderering! SDL Error: %s\n", SDL_GetError()); return; }