Forráskód Böngészése

feat: add error checking for renderer initialization

Douglas Andreani 1 éve
szülő
commit
d12b7e5896
3 módosított fájl, 29 hozzáadás és 13 törlés
  1. 4 1
      src/main.c
  2. 10 6
      src/renderer.c
  3. 15 6
      src/renderer.h

+ 4 - 1
src/main.c

@@ -33,7 +33,10 @@ void key_callback(GLFWwindow *window, int key, int scancode, int action, int mod
 int main() {
 
 	Renderer renderer = {0};
-	renderer_init(&renderer, WINDOW_WIDTH, WINDOW_HEIGHT);
+	RENDERER_ERROR err = renderer_init(&renderer, WINDOW_WIDTH, WINDOW_HEIGHT);
+	if (err != RENDERER_ERROR_OK) {
+		ERROR_AND_QUIT(err, "could not initialize glfw");
+	}
 	
 	//assert(renderer != NULL && "failed to initialize renderer");
 	

+ 10 - 6
src/renderer.c

@@ -60,26 +60,28 @@ void renderer_init_nk(Renderer* renderer) {
 
 
 
-void renderer_init(Renderer *renderer, int width, int height) {
+RENDERER_ERROR renderer_init(Renderer *renderer, int width, int height) {
 
     
     renderer->width = width;
     renderer->height = height;
 
-    renderer_init_glfw(renderer, width, height);
+    RENDERER_ERROR err = renderer_init_glfw(renderer, width, height);
+    if (err != RENDERER_ERROR_OK) return err;
+    
     renderer_init_shaders(renderer);
     renderer_init_quad(renderer);
     renderer_init_textures(renderer);
 	
-    return;
+    return RENDERER_ERROR_GLFW;
 
 }
 
-void renderer_init_glfw(Renderer* renderer, int width, int height)
+RENDERER_ERROR renderer_init_glfw(Renderer* renderer, int width, int height)
 {
     if (!glfwInit()) {
         fprintf(stderr, "[GFLW] failed to init!\n");
-        return;
+        return RENDERER_ERROR_GLFW;
     }
 
     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
@@ -95,11 +97,13 @@ void renderer_init_glfw(Renderer* renderer, int width, int height)
     if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
     {
         fprintf(stderr, "Failed to initialize GLAD\n");
-        return;
+        return RENDERER_ERROR_GLAD;
     }
     glViewport(0, 0, renderer->width, renderer->width);
     glfwGetWindowSize(renderer->window, &width, &height);
 
+    return RENDERER_ERROR_OK;
+
 }
 
 void renderer_init_textures(Renderer *renderer) {

+ 15 - 6
src/renderer.h

@@ -13,6 +13,17 @@
 #define DEFAULT_PROGRAM 0
 #define NUKLEAR_PROGRAM 1
 
+typedef int RENDERER_ERROR;
+#define RENDERER_ERROR_OK 0
+#define RENDERER_ERROR_GLFW -1
+#define RENDERER_ERROR_GLAD -2
+
+#define ERROR_AND_QUIT(R, ...) \
+( R==RENDERER_ERROR_GLFW ? fprintf(stderr, "GLFW: %s\n", __VA_ARGS__) \
+ : R==RENDERER_ERROR_GLAD ? fprintf(stderr, "GLAD: %s\n", __VA_ARGS__) \
+ : 0); exit(1)
+
+
 #if 0
 struct nk_glfw_vertex {
 	float position[2];
@@ -55,19 +66,17 @@ typedef struct {
 } Renderer;
 
 
-void renderer_init(Renderer *renderer, int width, int height);
+RENDERER_ERROR renderer_init(Renderer *renderer, int width, int height);
+RENDERER_ERROR renderer_init_glfw(Renderer* renderer, int width, int height);
+
 void renderer_init_shaders(Renderer *renderer);
 void renderer_init_textures(Renderer *renderer);
 void renderer_init_quad(Renderer *renderer);
-
 void renderer_destroy(Renderer* renderer);
 
 void render_quad(Renderer* renderer, vec2 pos, vec2 size, vec4 color);
-
-
-
 void renderer_init_nk(Renderer* renderer);
-void renderer_init_glfw(Renderer* renderer, int width, int height);
+
 
 void read_shader_source(GLchar* source, const char* file_path);
 static const char* shader_type_as_cstr(GLuint shader);