diff options
| author | 2019-10-29 23:14:29 -0400 | |
|---|---|---|
| committer | 2019-10-29 23:14:29 -0400 | |
| commit | eb9142d314203273f2609164fc52c4e0ab25f2a7 (patch) | |
| tree | 0a50d78cdc81538a181c29acc9665cbd2a3f11e1 /frontends | |
| parent | 396d4a3d3b211143835266bfd2ee431e051cf34c (diff) | |
| download | cetris-eb9142d314203273f2609164fc52c4e0ab25f2a7.tar.gz cetris-eb9142d314203273f2609164fc52c4e0ab25f2a7.tar.bz2 cetris-eb9142d314203273f2609164fc52c4e0ab25f2a7.zip | |
reuse the same textures for each part
Diffstat (limited to 'frontends')
| -rw-r--r-- | frontends/sdl/cetris_sdl.h | 7 | ||||
| -rw-r--r-- | frontends/sdl/sdl_ui.c | 39 |
2 files changed, 30 insertions, 16 deletions
diff --git a/frontends/sdl/cetris_sdl.h b/frontends/sdl/cetris_sdl.h index 2ad0a7b..02f7a13 100644 --- a/frontends/sdl/cetris_sdl.h +++ b/frontends/sdl/cetris_sdl.h @@ -42,3 +42,10 @@ typedef struct { color_scheme_t scheme; float count_down; } game_board_t; + +typedef struct { + SDL_Texture *main; + SDL_Texture *queue; + SDL_Texture *hold; +} solo_game; + diff --git a/frontends/sdl/sdl_ui.c b/frontends/sdl/sdl_ui.c index 855bfee..ce2690e 100644 --- a/frontends/sdl/sdl_ui.c +++ b/frontends/sdl/sdl_ui.c @@ -103,9 +103,9 @@ void draw_block(int x, int y, int width, int height, SDL_Color c, SDL_Color off) SDL_RenderDrawRect(render, &b); } -void draw_board(game_board_t* board, int x, int y, int w, int h) { - SDL_Texture *m = SDL_CreateTexture(render, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, w, h + 5); +void draw_board(SDL_Texture *m, game_board_t* board, int x, int y, int w, int h) { SDL_SetRenderTarget(render, m); + SDL_RenderClear(render); SDL_Rect background = {0, 0, w, h + 5}; @@ -187,16 +187,16 @@ void draw_board(game_board_t* board, int x, int y, int w, int h) { SDL_Rect dest = {x, y, w, h}; //SDL_RenderCopyEx(render, m, NULL, &dest, 0, NULL, SDL_FLIP_NONE); SDL_RenderCopy(render, m, NULL, &dest); - - SDL_DestroyTexture(m); } -void draw_held_piece(game_board_t* board, int x, int y, int w, int h) { +void draw_held_piece(SDL_Texture *m, game_board_t* board, int x, int y, int w, int h) { if (w < 8) return; if (h < 8) return; - SDL_Texture *m = SDL_CreateTexture(render, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, w, h); SDL_SetRenderTarget(render, m); + SDL_RenderClear(render); + + SDL_RenderClear(render); int block_width = (w - 4) / 4; int block_height = (h - 4) / 4; @@ -242,17 +242,16 @@ void draw_held_piece(game_board_t* board, int x, int y, int w, int h) { SDL_Rect dest = {x, y, w, h}; //SDL_RenderCopyEx(render, m, NULL, &dest, 0, NULL, SDL_FLIP_NONE); SDL_RenderCopy(render, m, NULL, &dest); - - SDL_DestroyTexture(m); } -void draw_piece_queue(game_board_t* board, int x, int y, int w, int h) { +void draw_piece_queue(SDL_Texture *m, game_board_t* board, int x, int y, int w, int h) { if (w < 8) return; if (h < 32) return; - SDL_Texture *m = SDL_CreateTexture(render, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, w, h); SDL_SetRenderTarget(render, m); + SDL_RenderClear(render); + int block_width = ((w - 4) / 4); int block_height = ((h - 5) / 5) / 3; @@ -307,7 +306,6 @@ void draw_piece_queue(game_board_t* board, int x, int y, int w, int h) { //SDL_RenderCopyEx(render, m, NULL, &dest, 0, NULL, SDL_FLIP_NONE); SDL_RenderCopy(render, m, NULL, &dest); - SDL_DestroyTexture(m); } void draw_timer(game_board_t *board, int x, int y) { @@ -328,20 +326,26 @@ void draw_timer(game_board_t *board, int x, int y) { free(buf); } -void draw() { +void draw(solo_game *s) { SDL_SetRenderDrawColor(render, main_board.scheme.main.r, main_board.scheme.main.g, main_board.scheme.main.b, main_board.scheme.main.a); SDL_RenderClear(render); - draw_board(&main_board, (W / 2) - 125, (H / 2) - 250, 250, 500); - draw_held_piece(&main_board, (W / 2) - 230, (H / 2) - 250, 100, 100); - draw_piece_queue(&main_board, (W / 2) + 130, (H / 2) - 250, 100, 450); + draw_board(s->main, &main_board, (W / 2) - 125, (H / 2) - 250, 250, 500); + draw_held_piece(s->hold, &main_board, (W / 2) - 230, (H / 2) - 250, 100, 100); + draw_piece_queue(s->queue, &main_board, (W / 2) + 130, (H / 2) - 250, 100, 450); draw_timer(&main_board, 20, 20); SDL_RenderPresent(render); } +void load_solo(solo_game* s) { + s->main = SDL_CreateTexture(render, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 250, 505); + s->queue = SDL_CreateTexture(render, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 100, 450); + s->hold = SDL_CreateTexture(render, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 100, 100); +} + int main(void) { setup_sdl(); @@ -390,6 +394,9 @@ int main(void) { main_board.scheme = light_mode; } + solo_game screen; + load_solo(&screen); + main_board.count_down = 3; init_game(&g, &config); main_board.game = &g; @@ -445,7 +452,7 @@ int main(void) { } } - draw(); + draw(&screen); if (main_board.count_down < 0 && g.waiting) { cetris_start_game(&g); |