From 3f073ddee13b08941467c98f4c46698eee7a1f43 Mon Sep 17 00:00:00 2001
From: katherine <ageha@airen-no-jikken.icu>
Date: Thu, 11 Feb 2021 17:18:37 -0700
Subject: optimise

---
 02-wolfautomata/src/main.c | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)

(limited to '02-wolfautomata')

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)
-- 
cgit v1.2.3