diff options
Diffstat (limited to '02-wolfautomata')
-rw-r--r-- | 02-wolfautomata/src/main.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/02-wolfautomata/src/main.c b/02-wolfautomata/src/main.c index d884280..ded18d3 100644 --- a/02-wolfautomata/src/main.c +++ b/02-wolfautomata/src/main.c @@ -38,9 +38,10 @@ int main(int argc, char **argv) uint8_t automaton = 0; unsigned x, y; - ALLEGRO_DISPLAY* d = NULL; - ALLEGRO_TIMER* t = NULL; - ALLEGRO_EVENT_QUEUE* eq = NULL; + ALLEGRO_DISPLAY *d = NULL; + ALLEGRO_BITMAP *b = NULL; + ALLEGRO_TIMER *t = NULL; + ALLEGRO_EVENT_QUEUE *eq = NULL; ALLEGRO_EVENT e; DO_INIT(al_init(), "allegro"); @@ -52,6 +53,8 @@ int main(int argc, char **argv) al_set_new_display_option(ALLEGRO_SINGLE_BUFFER, 1, ALLEGRO_REQUIRE); DO_INIT(d = al_create_display(DISP_WIDTH, DISP_HEIGHT), "display"); + al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP); + DO_INIT(b = al_create_bitmap(DISP_WIDTH, 1), "buffer"); al_register_event_source(eq, al_get_keyboard_event_source()); al_register_event_source(eq, al_get_display_event_source(d)); @@ -128,17 +131,23 @@ reset: break; } + al_lock_bitmap(b, ALLEGRO_PIXEL_FORMAT_ANY, ALLEGRO_LOCK_WRITEONLY); + + al_set_target_bitmap(b); + /* draw line */ for (x = 0; x < DISP_WIDTH; x++) { - if (bit_get(bits[DISP_HEIGHT - goframes], x)) { - al_draw_filled_rectangle( - (float)x, (float)(DISP_HEIGHT - goframes), - (float)(x + 1), (float)(DISP_HEIGHT - goframes + 1), - al_map_rgb(255, 255, 255) - ); - } + if (bit_get(bits[DISP_HEIGHT - goframes], x)) + al_put_pixel(x, 0, al_map_rgb(255, 255, 255)); + else + al_put_pixel(x, 0, al_map_rgb(0, 0, 0)); } + al_unlock_bitmap(b); + + al_set_target_backbuffer(d); + al_draw_bitmap(b, 0, DISP_HEIGHT - goframes, 0); + al_flip_display(); goframes--; @@ -153,6 +162,8 @@ done: if (d) al_destroy_display(d); + if (b) + al_destroy_bitmap(b); if (t) al_destroy_timer(t); if (eq) |