summaryrefslogtreecommitdiff
path: root/files.c
diff options
context:
space:
mode:
Diffstat (limited to 'files.c')
-rw-r--r--files.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/files.c b/files.c
new file mode 100644
index 0000000..2116be4
--- /dev/null
+++ b/files.c
@@ -0,0 +1,50 @@
+/* file-handler.c
+ * Created: 2023-08-25
+ * Author: Aryadev Chavali
+ * Description: Implementations of writing and loading state->from files
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <stb/stb_image_write.h>
+
+#include "./lib.h"
+
+#define CHUNK_SIZE 1024
+
+bool write_to_png(state_t *state, const char *filepath)
+{
+ unsigned char *image_data =
+ calloc(3 * state->dwidth * state->dwidth, sizeof(*image_data));
+
+ size_t image_ptr = 0;
+
+ for (size_t i = 0; i < state->dwidth; ++i)
+ for (size_t j = 0; j < state->dwidth; ++j, image_ptr += 3)
+ {
+ unsigned char colour[3] = {0};
+ uint64_t sandpile = state->data[(i * state->dwidth) + j];
+ if (sandpile == 0)
+ colour[0] = colour[1] = colour[2] = 0;
+ else if (sandpile == 1)
+ colour[0] = colour[2] = 255;
+ else if (sandpile == 2)
+ {
+ colour[0] = 255;
+ colour[1] = colour[2] = 20;
+ }
+ else if (sandpile == 3)
+ {
+ colour[2] = 255;
+ colour[0] = colour[1] = 20;
+ }
+
+ memcpy(image_data + image_ptr, colour, sizeof(*colour) * 3);
+ }
+
+ stbi_write_png(filepath, state->dwidth, state->dwidth, 3, image_data,
+ 3 * state->dwidth);
+ free(image_data);
+ return true;
+}