]> git.lizzy.rs Git - dragonblocks_alpha.git/commitdiff
Client: unify error handling
authorElias Fleckenstein <eliasfleckenstein@web.de>
Sun, 24 Apr 2022 11:53:43 +0000 (13:53 +0200)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Sun, 24 Apr 2022 11:53:43 +0000 (13:53 +0200)
23 files changed:
src/client/client.c
src/client/client_auth.c
src/client/client_auth.h
src/client/client_entity.c
src/client/client_entity.h
src/client/client_inventory.c
src/client/client_inventory.h
src/client/font.c
src/client/font.h
src/client/game.c
src/client/game.h
src/client/gui.c
src/client/gui.h
src/client/interact.c
src/client/interact.h
src/client/shader.c
src/client/shader.h
src/client/sky.c
src/client/sky.h
src/client/terrain_gfx.c
src/client/terrain_gfx.h
src/client/window.c
src/client/window.h

index 667f6a2b14972debd3838175120ca1b451f930b2..55bfc4516c460bcf8472bd233dff68bb86927173 100644 (file)
@@ -146,12 +146,9 @@ int main(int argc, char **argv)
        client_player_init();
        client_entity_init();
        dragonnet_peer_run(client);
+       client_auth_init();
 
-       if (!client_auth_init())
-               return EXIT_FAILURE;
-
-       if (!game(&gfx_init))
-               return EXIT_FAILURE;
+       game(&gfx_init);
 
        dragonnet_peer_shutdown(client);
        client_auth_deinit();
index 0d16cea66746f64f8325ce4b76fa4ed04ed8e666..afa3ebde092363335bfc91a29aa5febad2efab58 100644 (file)
@@ -1,5 +1,6 @@
 #include <stddef.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <linenoise/linenoise.h>
 #include "client.h"
 #include "client_auth.h"
@@ -37,7 +38,7 @@ static void auth_loop()
        }
 }
 
-bool client_auth_init()
+void client_auth_init()
 {
        client_auth.name = NULL;
        pthread_cond_init(&client_auth.cv, NULL);
@@ -50,10 +51,13 @@ bool client_auth_init()
        auth_loop();
 
        flag_uns(&interrupt, &client_auth.cv);
-       bool success = client_auth.state == AUTH_SUCCESS;
-       pthread_mutex_unlock(&client_auth.mtx);
 
-       return success;
+       if (client_auth.state != AUTH_SUCCESS) {
+               fprintf(stderr, "[error] authentication failed due to interruption or read failure\n");
+               abort();
+       }
+
+       pthread_mutex_unlock(&client_auth.mtx);
 }
 
 void client_auth_deinit()
index 3d8d4e46016fa96b156c5ae57f4acd16b17122ae..c2dc651ec1ba73f7b355cde2a44c8ed47fa46a2a 100644 (file)
@@ -16,7 +16,7 @@ extern struct ClientAuth {
        pthread_mutex_t mtx;
 } client_auth;
 
-bool client_auth_init();
+void client_auth_init();
 void client_auth_deinit();
 
 #endif // _CLIENT_AUTH_H_
index 806d519c3681678f1f1c6dda2eca0c9b13c81a8d..c06e1e40653b1dc781df0711635bc36bb7131194 100644 (file)
@@ -165,16 +165,11 @@ void client_entity_deinit()
        pthread_mutex_destroy(&mtx_nametagged);
 }
 
-bool client_entity_gfx_init()
+void client_entity_gfx_init()
 {
        char *shader_def;
        asprintf(&shader_def, "#define VIEW_DISTANCE %lf\n", client_config.view_distance);
-
-       if (!shader_program_create(RESSOURCE_PATH "shaders/3d/entity", &shader_prog, shader_def)) {
-               fprintf(stderr, "[error] failed to create entity shader program\n");
-               return false;
-       }
-
+       shader_prog = shader_program_create(RESSOURCE_PATH "shaders/3d/entity", shader_def);
        free(shader_def);
 
        loc_VP = glGetUniformLocation(shader_prog, "VP"); GL_DEBUG
@@ -198,8 +193,6 @@ bool client_entity_gfx_init()
        light_shader_locate(&light_shader);
 
        client_entity_depth_offset(0.0f);
-
-       return true;
 }
 
 void client_entity_gfx_deinit()
index c97bc06d201e687048f99cc867ac2b63aba92b76..a0e43dffce244a2448249b2767ee3c14b2c51389 100644 (file)
@@ -47,7 +47,7 @@ extern ModelShader client_entity_shader;
 void client_entity_init();
 void client_entity_deinit();
 
-bool client_entity_gfx_init();
+void client_entity_gfx_init();
 void client_entity_gfx_deinit();
 void client_entity_gfx_update();
 void client_entity_depth_offset(f32 offset);
index 9c888370ce50c9cfe9f5e250b141ab164e5550b4..4bc4124209b45c01f3eee0aa5aa7b89c91c6af09 100644 (file)
@@ -15,16 +15,11 @@ static GLint _3d_loc_depthOffset;
 static ModelShader _3d_model_shader;
 static LightShader _3d_light_shader;
 
-bool client_inventory_init()
+void client_inventory_init()
 {
        char *_3d_shader_def;
        asprintf(&_3d_shader_def, "#define VIEW_DISTANCE %lf\n", client_config.view_distance);
-
-       if (!shader_program_create(RESSOURCE_PATH "shaders/3d/item", &_3d_shader_prog, _3d_shader_def)) {
-               fprintf(stderr, "[error] failed to create 3D item shader program\n");
-               return false;
-       }
-
+       _3d_shader_prog = shader_program_create(RESSOURCE_PATH "shaders/3d/item", _3d_shader_def);
        free(_3d_shader_def);
 
        _3d_loc_VP = glGetUniformLocation(_3d_shader_prog, "VP");
@@ -37,8 +32,6 @@ bool client_inventory_init()
        light_shader_locate(&_3d_light_shader);
 
        client_inventory_depth_offset(0.0f);
-
-       return true;
 }
 
 void client_inventory_deinit()
index 586f560042da1bf0aeeadd0a12cdf016cf1cc5b2..ab367f7bf5df37e1883ad155850067b1687e45f9 100644 (file)
@@ -5,7 +5,7 @@
 #include "client/client_player.h"
 #include "client/model.h"
 
-bool client_inventory_init();
+void client_inventory_init();
 void client_inventory_deinit();
 void client_inventory_update();
 
index 2370480ee1b0d718199a2afb75413cc7a6cacf78..8014d97618510e2e35929df83cb262755c3ce5e6 100644 (file)
@@ -32,16 +32,16 @@ static VertexLayout font_vertex_layout = {
        .size = sizeof(FontVertex),
 };
 
-bool font_init()
+void font_init()
 {
        if (FT_Init_FreeType(&font_library)) {
                fprintf(stderr, "[error] failed to initialize Freetype\n");
-               return false;
+               abort();
        }
 
        if (FT_New_Face(font_library, RESSOURCE_PATH "fonts/Minecraftia.ttf", 0, &font_face)) {
                fprintf(stderr, "[error] failed to load Minecraftia.ttf\n");
-               return false;
+               abort();
        }
 
        glPixelStorei(GL_UNPACK_ALIGNMENT, 1); GL_DEBUG
@@ -66,8 +66,6 @@ bool font_init()
 
        FT_Done_Face(font_face);
        FT_Done_FreeType(font_library);
-
-       return true;
 }
 
 void font_deinit()
index b7ba6bd9b5e38f462a68a1d09a8c28b8d56a7664..c1f05065e36b0f5fb0843cdf7b57df3ae43d9bee 100644 (file)
@@ -15,7 +15,7 @@ typedef struct {
        GLuint *textures;
 } Font;
 
-bool font_init();
+void font_init();
 void font_deinit();
 Font *font_create(const char *text);
 void font_delete(Font *font);
index 8891b187494cbc1c099f7f366228ac96a36b43bf..e96ed06f9b2d91064840f566474db164922a85dd 100644 (file)
@@ -88,52 +88,29 @@ static void game_loop()
        }
 }
 
-bool game(Flag *gfx_init)
+void game(Flag *gfx_init)
 {
-       if (!window_init())
-               return false;
-
-       if (!font_init())
-               return false;
-
+       window_init();
+       font_init();
        model_init();
-
-       if (!sky_init())
-               return false;
-
-       if (!terrain_gfx_init())
-               return false;
-
-       if (!client_entity_gfx_init())
-               return false;
-
+       sky_init();
+       terrain_gfx_init();
+       client_entity_gfx_init();
        client_player_gfx_init();
-
        camera_init();
-
-       if (!gui_init())
-               return false;
-
-       if (!interact_init())
-               return false;
-
+       gui_init();
+       interact_init();
        client_item_init();
-
-       if (!client_inventory_init())
-               return false;
-
+       client_inventory_init();
        client_node_init();
        client_terrain_start();
-
        debug_menu_init();
        input_init();
 
        flag_set(gfx_init);
-
        game_loop();
 
        client_terrain_stop();
-
        font_deinit();
        gui_deinit();
        model_deinit();
@@ -144,7 +121,5 @@ bool game(Flag *gfx_init)
        interact_deinit();
        client_item_deinit();
        client_inventory_deinit();
-
-       return true;
 }
 
index 107583aafd1bc98c7e620873d6c8a5d2dd22b63f..10e18f844e73a9f2509ffeb41b70e48a11cd3c9d 100644 (file)
@@ -6,7 +6,7 @@
 
 extern int game_fps;
 
-bool game(Flag *gfx_init);
+void game(Flag *gfx_init);
 void game_render(f64 dtime);
 
 #endif // _GAME_H_
index fbe7b9f81bf332372f33dc77e333647d002bce3a..9cda646956bec6e3297a98426e7ed7e03326a661 100644 (file)
 #include "client/shader.h"
 #include "client/window.h"
 
-static GUIElement root_element;
+static GUIElement root_element = {
+       .def = {
+               .pos = {0.0f, 0.0f},
+               .z_index = 0.0f,
+               .offset = {0, 0},
+               .align = {0.0f, 0.0f},
+               .scale = {0.0f, 0.0f},
+               .scale_type = SCALE_NONE,
+               .affect_parent_scale = false,
+               .text = NULL,
+               .image = NULL,
+               .text_color = {0.0f, 0.0f, 0.0f, 0.0f},
+               .bg_color = {0.0f, 0.0f, 0.0f, 0.0f},
+       },
+       .visible = true,
+       .pos = (v2f32)  {0.0f, 0.0f},
+       .scale = (v2f32) {0.0f, 0.0f},
+       .text = NULL,
+       .parent = &root_element,
+};
 
 static GLuint background_prog;
 static GLint background_loc_model;
@@ -231,63 +250,28 @@ static void transform_element(GUIElement *element)
 
 // public functions
 
-bool gui_init()
+void gui_init()
 {
        // initialize background pipeline
-
-       if (!shader_program_create(RESSOURCE_PATH "shaders/gui/background", &background_prog, NULL)) {
-               fprintf(stderr, "[error] failed to create GUI background shader program\n");
-               return false;
-       }
-
+       background_prog = shader_program_create(RESSOURCE_PATH "shaders/gui/background", NULL);
        background_loc_model = glGetUniformLocation(background_prog, "model"); GL_DEBUG
        background_loc_projection = glGetUniformLocation(background_prog, "projection"); GL_DEBUG
        background_loc_color = glGetUniformLocation(background_prog, "color"); GL_DEBUG
 
        // initialize image pipeline
-
-       if (!shader_program_create(RESSOURCE_PATH "shaders/gui/image", &image_prog, NULL)) {
-               fprintf(stderr, "[error] failed to create GUI image shader program\n");
-               return false;
-       }
-
+       image_prog = shader_program_create(RESSOURCE_PATH "shaders/gui/image", NULL);
        image_loc_model = glGetUniformLocation(image_prog, "model"); GL_DEBUG
        image_loc_projection = glGetUniformLocation(image_prog, "projection"); GL_DEBUG
 
        // initialize font pipeline
-
-       if (!shader_program_create(RESSOURCE_PATH "shaders/gui/font", &font_prog, NULL)) {
-               fprintf(stderr, "[error] failed to create GUI font shader program\n");
-               return false;
-       }
-
+       font_prog = shader_program_create(RESSOURCE_PATH "shaders/gui/font", NULL);
        font_loc_model = glGetUniformLocation(font_prog, "model"); GL_DEBUG
        font_loc_projection = glGetUniformLocation(font_prog, "projection"); GL_DEBUG
        font_loc_color = glGetUniformLocation(font_prog, "color"); GL_DEBUG
 
        // initialize GUI root element
-
-       root_element.def.pos = (v2f32) {0.0f, 0.0f};
-       root_element.def.z_index = 0.0f;
-       root_element.def.offset = (v2s32) {0, 0};
-       root_element.def.align = (v2f32) {0.0f, 0.0f};
-       root_element.def.scale = (v2f32) {0.0f, 0.0f};
-       root_element.def.scale_type = SCALE_NONE;
-       root_element.def.affect_parent_scale = false;
-       root_element.def.text = NULL;
-       root_element.def.image = NULL;
-       root_element.def.text_color = (v4f32) {0.0f, 0.0f, 0.0f, 0.0f};
-       root_element.def.bg_color = (v4f32) {0.0f, 0.0f, 0.0f, 0.0f};
-       root_element.visible = true;
-       root_element.pos = (v2f32)  {0.0f, 0.0f};
-       root_element.scale = (v2f32) {0.0f, 0.0f};
-       root_element.text = NULL;
-       root_element.parent = &root_element;
        array_ini(&root_element.children, sizeof(GUIElement *), 0);
-
        gui_update_projection();
-
-       return true;
 }
 
 void gui_deinit()
index 1ce958492bed40f5231c8bc3edf327be1693f68b..b7c3087cdcaa0e384dc7e9ff064e87fc98a362eb 100644 (file)
@@ -43,7 +43,7 @@ typedef struct GUIElement {
        Array children;
 } GUIElement;
 
-bool gui_init();
+void gui_init();
 void gui_deinit();
 void gui_update_projection();
 void gui_render();
index 2aefa7e155aa1d727b91ede2082051b61ede3eab..25401d7e134f4cfc2b0b24e63a5c0ef2960337e4 100644 (file)
@@ -40,13 +40,9 @@ static Mesh selection_mesh = {
        .free_data = false,
 };
 
-bool interact_init()
+void interact_init()
 {
-       if (!shader_program_create(RESSOURCE_PATH "shaders/3d/selection", &shader_prog, NULL)) {
-               fprintf(stderr, "[error] failed to create selection shader program\n");
-               return false;
-       }
-
+       shader_prog = shader_program_create(RESSOURCE_PATH "shaders/3d/selection", NULL);
        loc_MVP = glGetUniformLocation(shader_prog, "MVP"); GL_DEBUG
        loc_color = glGetUniformLocation(shader_prog, "color"); GL_DEBUG
 
@@ -72,8 +68,6 @@ bool interact_init()
                .text_color = {0.0f, 0.0f, 0.0f, 0.0f},
                .bg_color = {0.0f, 0.0f, 0.0f, 0.0f},
        });
-
-       return true;
 }
 
 void interact_deinit()
index c39e8baeed26738c18e585406655bbaff8a83a74..3c9a96d6dd6a85849a1b9e2e5629a15af61311fd 100644 (file)
@@ -11,7 +11,7 @@ extern struct InteractPointed {
        NodeType node;
 } interact_pointed;
 
-bool interact_init();
+void interact_init();
 void interact_deinit();
 void interact_tick();
 void interact_render();
index 632106c04e5f689973f315a640a873dac9020d8b..eeea589517ef1a7ab6ce12755806d091fe4407ad 100644 (file)
@@ -72,7 +72,7 @@ static GLuint compile_shader(GLenum type, const char *path, const char *name, GL
        if (!success) {
                char errbuf[BUFSIZ];
                glGetShaderInfoLog(id, BUFSIZ, NULL, errbuf); GL_DEBUG
-               fprintf(stderr, "[error] failed to compile %s shader: %s", name, errbuf);
+               fprintf(stderr, "[error] failed to compile shader %s: %s", full_path, errbuf);
                glDeleteShader(id); GL_DEBUG
                return 0;
        }
@@ -82,7 +82,7 @@ static GLuint compile_shader(GLenum type, const char *path, const char *name, GL
        return id;
 }
 
-bool shader_program_create(const char *path, GLuint *idptr, const char *def)
+GLuint shader_program_create(const char *path, const char *def)
 {
        GLuint id = glCreateProgram(); GL_DEBUG
 
@@ -93,13 +93,13 @@ bool shader_program_create(const char *path, GLuint *idptr, const char *def)
 
        if (!(vert = compile_shader(GL_VERTEX_SHADER, path, "vertex", id, def))) {
                glDeleteProgram(id); GL_DEBUG
-               return false;
+               abort();
        }
 
        if (!(frag = compile_shader(GL_FRAGMENT_SHADER, path, "fragment", id, def))) {
                glDeleteShader(vert); GL_DEBUG
                glDeleteProgram(id); GL_DEBUG
-               return false;
+               abort();
        }
 
        glLinkProgram(id); GL_DEBUG
@@ -111,11 +111,10 @@ bool shader_program_create(const char *path, GLuint *idptr, const char *def)
        if (!success) {
                char errbuf[BUFSIZ];
                glGetProgramInfoLog(id, BUFSIZ, NULL, errbuf); GL_DEBUG
-               fprintf(stderr, "[error] failed to link shader program: %s\n", errbuf);
+               fprintf(stderr, "[error] failed to link shader program %s: %s\n", path, errbuf);
                glDeleteProgram(id); GL_DEBUG
                return false;
        }
 
-       *idptr = id;
-       return true;
+       return id;
 }
index 490a7fc8e8b8f47dff1ea0a97f37b523e31498da..f92666645f8d50c345a2395733d0963d5d0578ca 100644 (file)
@@ -5,6 +5,6 @@
 #include <GL/gl.h>
 #include <stdbool.h>
 
-bool shader_program_create(const char *path, GLuint *idptr, const char *def);
+GLuint shader_program_create(const char *path, const char *def);
 
 #endif // _SHADER_H_
index 2268f51147a8c8a14f03f8d8e863d183005a2491..101782dd0fd538b76385dbf48d954f22e5f05484 100644 (file)
@@ -70,7 +70,7 @@ static GLint clouds_loc_VP;
 static GLint clouds_loc_daylight;
 static Mesh clouds_mesh;
 
-bool sky_init()
+void sky_init()
 {
        clouds_mesh = skybox_mesh;
        SkyboxVertex skybox_vertices[6][6], clouds_vertices[6][6];
@@ -86,13 +86,8 @@ bool sky_init()
 
        // skybox
 
-       if (!shader_program_create(RESSOURCE_PATH "shaders/sky/skybox", &skybox_prog, NULL)) {
-               fprintf(stderr, "[error] failed to create skybox shader program\n");
-               return false;
-       }
-
+       skybox_prog = shader_program_create(RESSOURCE_PATH "shaders/sky/skybox", NULL);
        glProgramUniform1iv(skybox_prog, glGetUniformLocation(skybox_prog, "textures"), 2, (GLint[]) {0, 1}); GL_DEBUG
-
        skybox_loc_VP = glGetUniformLocation(skybox_prog, "VP"); GL_DEBUG
        skybox_loc_daylight = glGetUniformLocation(skybox_prog, "daylight"); GL_DEBUG
        skybox_texture_day = texture_load_cubemap(RESSOURCE_PATH "textures/skybox/day", true)->txo;
@@ -102,27 +97,17 @@ bool sky_init()
 
        // sun
 
-       if (!shader_program_create(RESSOURCE_PATH "shaders/sky/sun", &sun_prog, NULL)) {
-               fprintf(stderr, "[error] failed to create sun shader program\n");
-               return false;
-       }
-
+       sun_prog = shader_program_create(RESSOURCE_PATH "shaders/sky/sun", NULL);
        sun_loc_MVP = glGetUniformLocation(sun_prog, "MVP"); GL_DEBUG
        sun_texture = texture_load(RESSOURCE_PATH "textures/sun.png", false)->txo;
 
        // clouds
 
-       if (!shader_program_create(RESSOURCE_PATH "shaders/sky/clouds", &clouds_prog, NULL)) {
-               fprintf(stderr, "[error] failed to create clouds shader program\n");
-               return false;
-       }
-
+       clouds_prog = shader_program_create(RESSOURCE_PATH "shaders/sky/clouds", NULL);
        clouds_loc_VP = glGetUniformLocation(clouds_prog, "VP"); GL_DEBUG
        clouds_loc_daylight = glGetUniformLocation(clouds_prog, "daylight"); GL_DEBUG
        clouds_mesh.data = clouds_vertices;
        mesh_upload(&clouds_mesh);
-
-       return true;
 }
 
 void sky_deinit()
index 027abe714e4e5f3867f1da8ef4ecc468709b9123..300071433619c5d431087fdfb9027f8b8227fad6 100644 (file)
@@ -3,7 +3,7 @@
 
 #include <stdbool.h>
 
-bool sky_init();
+void sky_init();
 void sky_deinit();
 void sky_render();
 
index ff6ec70a71f6e591f4c61046efe8cb8ba4347c20..401b42e208d0be93a2125f5550a4837e5ef7f482 100644 (file)
@@ -213,7 +213,7 @@ static Model *create_chunk_model(ChunkRenderData *data)
        return model;
 }
 
-bool terrain_gfx_init()
+void terrain_gfx_init()
 {
        GLint texture_units;
        glGetIntegerv(GL_MAX_TEXTURE_UNITS, &texture_units); GL_DEBUG
@@ -225,12 +225,7 @@ bool terrain_gfx_init()
                texture_units,
                client_config.view_distance
        );
-
-       if (!shader_program_create(RESSOURCE_PATH "shaders/3d/terrain", &shader_prog, shader_def)) {
-               fprintf(stderr, "[error] failed to create terrain shader program\n");
-               return false;
-       }
-
+       shader_prog = shader_program_create(RESSOURCE_PATH "shaders/3d/terrain", shader_def);
        free(shader_def);
 
        loc_VP = glGetUniformLocation(shader_prog, "VP"); GL_DEBUG
@@ -246,8 +241,6 @@ bool terrain_gfx_init()
 
        light_shader.prog = shader_prog;
        light_shader_locate(&light_shader);
-
-       return true;
 }
 
 void terrain_gfx_deinit()
index d41bce803455db77aea21a0fff33f9a2e2128b90..d2a0cc93854f8d969a0ea78ef55c41483097c2e6 100644 (file)
@@ -10,7 +10,7 @@ typedef struct {
        v3f32 color;
 } __attribute__((packed)) TerrainVertex;
 
-bool terrain_gfx_init();
+void terrain_gfx_init();
 void terrain_gfx_deinit();
 void terrain_gfx_update();
 void terrain_gfx_make_chunk_model(TerrainChunk *chunk);
index f1b65b5d8cc271dda53127e5f317242e4a541df4..5f6cca8bedf862ab9ed58ae0b832e043a4a3ee84 100644 (file)
@@ -1,4 +1,5 @@
 #include <stdio.h>
+#include <stdlib.h>
 #include <GL/glew.h>
 #include <GL/gl.h>
 #include "client/client_config.h"
@@ -73,11 +74,11 @@ void window_exit_fullscreen()
        debug_menu_changed(ENTRY_FULLSCREEN);
 }
 
-bool window_init()
+void window_init()
 {
        if(!glfwInit()) {
                fprintf(stderr, "[error] failed to initialize GLFW\n");
-               return false;
+               abort();
        }
 
        glfwWindowHint(GLFW_SAMPLES, client_config.antialiasing);
@@ -98,7 +99,7 @@ bool window_init()
        if (!window.handle) {
                fprintf(stderr, "[error] failed to create window\n");
                glfwTerminate();
-               return false;
+               abort();
        }
 
        glfwMakeContextCurrent(window.handle);
@@ -108,13 +109,11 @@ bool window_init()
 
        if (glewInit() != GLEW_OK) {
                fprintf(stderr, "[error] failed to initialize GLEW\n");
-               return false;
+               abort();
        }
 
        glfwSetFramebufferSizeCallback(window.handle, &framebuffer_size_callback);
        glfwSetCursorPosCallback(window.handle, &cursor_pos_callback);
        glfwSetWindowPosCallback(window.handle, &window_pos_callback);
        glfwSetMouseButtonCallback(window.handle, &mouse_button_callback);
-
-       return true;
 }
index 7f657e3d066598b4cf61f0c440eed3a3fc8670d8..aae5ed617535654c74ea02d53ec223ab380d3311 100644 (file)
@@ -14,7 +14,7 @@ extern struct Window {
        mat4x4 projection;
 } window;
 
-bool window_init();
+void window_init();
 void window_enter_fullscreen();
 void window_exit_fullscreen();