fix segfault when a shader does not compile default tip

Sat, 21 Jun 2025 22:10:54 +0200

author
Mike Becker <universe@uap-core.de>
date
Sat, 21 Jun 2025 22:10:54 +0200
changeset 161
4c8b9c6d241f
parent 160
80700db530ff

fix segfault when a shader does not compile

relates to #690

src/2d.c file | annotate | diff | comparison | revisions
src/shader.c file | annotate | diff | comparison | revisions
src/sprite.c file | annotate | diff | comparison | revisions
--- a/src/2d.c	Thu Jun 19 19:22:07 2025 +0200
+++ b/src/2d.c	Sat Jun 21 22:10:54 2025 +0200
@@ -50,7 +50,6 @@
 
 static AscShaderProgram *asc_rectangle_shader_create(int flags) {
     AscShaderCodes codes;
-    // TODO: create a utility that rolls out those defines
     const char * const defines[] = {
         "#define FILL\n",
         "#define ROUNDED_CORNERS\n",
@@ -62,7 +61,7 @@
         .defines.frag_list = defines,
         .defines.frag_list_select = flags
     }, &codes)) {
-        asc_error("Loading sprite shader failed.");
+        asc_error("Loading rectangle shader failed.");
         return NULL;
     }
     AscRectangleShader *shader = asc_shader_create(codes, sizeof(*shader));
@@ -119,7 +118,7 @@
     if (border) shader_flags |= ASC_RECTANGLE_SHADER_FLAG_BORDER;
     if (round) shader_flags |= ASC_RECTANGLE_SHADER_FLAG_ROUND;
 
-    // Compute shader ID
+    // Lookup table for the shader ID
     const int shader_ids[] = {
         -1, // unused
         ASC_SHADER_RECTANGLE_FILL,
@@ -134,6 +133,7 @@
     // Look up and activate shader
     const AscRectangleShader *shader = asc_shader_lookup_or_create(
         shader_ids[shader_flags], asc_rectangle_shader_create, shader_flags);
+    if (shader == NULL) return;
     asc_shader_use(&shader->program, camera);
 
     // Upload uniforms
--- a/src/shader.c	Thu Jun 19 19:22:07 2025 +0200
+++ b/src/shader.c	Sat Jun 21 22:10:54 2025 +0200
@@ -235,6 +235,7 @@
     }
 #endif
     AscShaderProgram *prog = create_func(create_flags);
+    if (prog == NULL) return NULL;
     prog->id = id;
     cxListAdd(glctx->shaders, prog);
     return prog;
--- a/src/sprite.c	Thu Jun 19 19:22:07 2025 +0200
+++ b/src/sprite.c	Sat Jun 21 22:10:54 2025 +0200
@@ -99,6 +99,7 @@
             sprite->texture->target == GL_TEXTURE_RECTANGLE
                 ? asc_shader_lookup_or_create(ASC_SHADER_SPRITE_RECT, asc_sprite_shader_create, 1)
                 : asc_shader_lookup_or_create(ASC_SHADER_SPRITE_UV, asc_sprite_shader_create, 0);
+    if (shader == NULL) return;
     asc_shader_use(&shader->program, camera);
 
     // Upload model matrix

mercurial