Sat, 02 Aug 2025 14:58:30 +0200
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;