summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/main.c b/src/main.c
index ce01357..0edc5fb 100644
--- a/src/main.c
+++ b/src/main.c
@@ -7,6 +7,8 @@
World world;
Camera camera;
+_Atomic bool loaded;
+
void sleep(double seconds)
{
struct timespec req, rem;
@@ -26,10 +28,12 @@ VOXEL_RESULT render_main(void *)
Renderer renderer;
if (window_init_gl() != VOXEL_OK)
- return VOXEL_ERROR;
+ goto error;
if (renderer_init(&renderer) != VOXEL_OK)
- return VOXEL_ERROR;
+ goto error;
+
+ loaded = true;
while (!window_closed()) {
if (window.resize) {
@@ -46,6 +50,11 @@ VOXEL_RESULT render_main(void *)
renderer_free(&renderer);
return VOXEL_OK;
+
+error:
+ window_close();
+ loaded = true;
+ return VOXEL_ERROR;
}
#define TPS 20
@@ -57,6 +66,9 @@ VOXEL_RESULT logic_main(void *)
last_tick = 0;
next_tick = 0;
+ while (!loaded)
+ ;
+
while (!window_closed()) {
world_update(&world, &camera);
@@ -75,13 +87,14 @@ VOXEL_RESULT input_main(void *)
last_tick = 0;
next_tick = 0;
+ while (!loaded)
+ ;
+
while (!window_closed()) {
window_update();
- if (key_down(GLFW_KEY_ESCAPE)) {
- window.close = true;
- break;
- }
+ if (key_down(GLFW_KEY_ESCAPE))
+ window_close();
camera_update(&camera);
@@ -96,6 +109,7 @@ VOXEL_RESULT input_main(void *)
VOXEL_RESULT main(void)
{
thrd_t render_thread, logic_thread, input_thread;
+ loaded = false;
if (window_init() != VOXEL_OK)
return VOXEL_ERROR;
@@ -112,7 +126,7 @@ VOXEL_RESULT main(void)
thrd_join(render_thread, NULL);
world_free(&world);
- window_close();
+ window_free();
return VOXEL_OK;
}