add null safety in case a sprite is created without texture parameters

Sat, 02 Aug 2025 14:58:30 +0200

author
Mike Becker <universe@uap-core.de>
date
Sat, 02 Aug 2025 14:58:30 +0200
changeset 241
b53bd6ab2a47
parent 240
5ed38debd4a7
child 242
6eeb987f1681

add null safety in case a sprite is created without texture parameters

src/sprite.c file | annotate | diff | comparison | revisions
--- a/src/sprite.c	Sat Aug 02 13:20:51 2025 +0200
+++ b/src/sprite.c	Sat Aug 02 14:58:30 2025 +0200
@@ -29,11 +29,11 @@
 
 #include "ascension/context.h"
 #include "ascension/glcontext.h"
-#include "ascension/error.h"
 #include "ascension/mesh.h"
 #include "ascension/shader.h"
 #include "ascension/constants.h"
 
+#include <assert.h>
 
 typedef struct asc_sprite_shader_s {
     AscShaderProgram program;
@@ -58,7 +58,9 @@
 static void asc_sprite_destroy(AscSceneNode *node) {
     asc_ptr_cast(AscSprite, sprite, node);
     asc_mesh_destroy(&sprite->mesh);
-    sprite->texture->refcount--;
+    if (sprite->texture != NULL) {
+        sprite->texture->refcount--;
+    }
 }
 
 static void asc_sprite_update(AscSceneNode *node) {
@@ -67,6 +69,7 @@
     // calculate texture parameters
     asc_vec2f uv_scale;
     if (sprite->texture_scale_mode == ASC_TEXTURE_SCALE_REPEAT) {
+        assert(sprite->texture != NULL);
         uv_scale = asc_texture_calculate_uv_scale(sprite->texture,
             ASC_VEC2U(sprite->width, sprite->height), sprite->texture_scale);
     } else {
@@ -108,8 +111,10 @@
     AscSprite *sprite = cxZallocDefault(sizeof(AscSprite));
 
     // sprite parameters
-    args.texture->refcount++;
     sprite->texture = args.texture;
+    if (args.texture != NULL) {
+        args.texture->refcount++;
+    }
     sprite->width = args.width;
     sprite->height = args.height;
     sprite->texture_scale_mode = args.texture_scale_mode;

mercurial