cleanup renderer code

This commit is contained in:
2025-01-29 12:13:42 +01:00
parent d3f89b0d10
commit 96511ac848

View File

@@ -33,31 +33,21 @@ int renderer_init(SDL_Window** window, SDL_Renderer** renderer) {
return 0; return 0;
} }
// draws a block at the specified position
static inline int draw_block(SDL_Renderer* renderer, uint8_t x, uint8_t y) { 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}); 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) { 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)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;
Shape selected_shape = shape_from_id(selected.id);
Colour selected_colour = colour_from_id(selected.id);
set_colour(renderer, selected_colour);
// draw the selected block // draw the selected block
static void render_selected(SDL_Renderer* renderer, SelectedShape selected) {
Shape selected_shape = shape_from_id(selected.id);
set_colour(renderer, colour_from_id(selected.id));
for (uint8_t y = 0; y < SHAPE_HEIGHT; y++) { for (uint8_t y = 0; y < SHAPE_HEIGHT; y++) {
ShapeRow shape_row = shape_get_row(selected_shape, 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)) if (is_set(shape_row, x))
draw_block(renderer, selected.x + x, selected.y + y); 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++) { for (uint8_t y = 0; y < ROWS; y++) {
Row row = data->row[y]; Row row = data->row[y];
for (uint8_t x = 0; x < COLUMNS; x++) { for (uint8_t x = 0; x < COLUMNS; x++) {
if (row[x].packed != 0) { if (row[x].packed != 0) {
set_colour(renderer, row[x]); 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) { 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; return;
} }