summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.c31
1 files changed, 25 insertions, 6 deletions
diff --git a/main.c b/main.c
index 9edb8bf..c20662d 100644
--- a/main.c
+++ b/main.c
@@ -4,8 +4,12 @@
* Description: Entry point of program
*/
#include <malloc.h>
+#include <stdbool.h>
#include <stdio.h>
+#include <pthread.h>
+#include <unistd.h>
+
#include <raylib.h>
#include <raymath.h>
@@ -17,6 +21,8 @@ struct State
size_t window_len;
int multiplier;
+
+ bool thread_alive;
};
typedef struct State state_t;
@@ -44,22 +50,32 @@ void step(state_t *state)
}
}
+void *compute_thread(void *input)
+{
+ state_t *state = input;
+ while (state->thread_alive)
+ step(state);
+ return NULL;
+}
+
int main(void)
{
- state_t state = {NULL, 256, 512, 0};
+ state_t state = {NULL, 512, 512, 0, true};
state.data = calloc(state.dwidth * state.dwidth, sizeof(*state.data));
state.multiplier = state.window_len / state.dwidth;
- Camera2D camera = {0};
- camera.zoom = 1.0f;
+ const float zoom = 0.125f;
+ Camera2D camera = {0};
+ camera.zoom = 1.0f;
+
+ pthread_t step_thread;
+ pthread_create(&step_thread, NULL, &compute_thread, &state);
+
InitWindow(state.window_len, state.window_len, "Abelian sand pile");
SetTargetFPS(60);
- const float zoom = 0.125f;
while (!WindowShouldClose())
{
- step(&state);
-
if (IsKeyPressed(KEY_UP) || IsKeyDown(KEY_UP))
{
Vector2 centre = {state.window_len / 2, state.window_len / 2};
@@ -110,6 +126,9 @@ int main(void)
EndMode2D();
EndDrawing();
}
+
+ if (state.thread_alive)
+ pthread_cancel(step_thread);
CloseWindow();
return 0;
}