diff options
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 28 |
1 files changed, 21 insertions, 7 deletions
@@ -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; } |