diff -r 6234b7ea48f3 -r e1f682a8a145 src/sprite.c --- a/src/sprite.c Sun Apr 20 15:41:16 2025 +0200 +++ b/src/sprite.c Mon Apr 21 17:27:33 2025 +0200 @@ -33,6 +33,8 @@ #include static void asc_sprite_free(AscSceneNode *node) { + AscSprite *sprite = (AscSprite *) node; + sprite->texture->refcount--; free(node); } @@ -40,7 +42,8 @@ AscSprite *sprite = calloc(1, sizeof(AscSprite)); // special sprite parameters - sprite->tex = args.texture; + args.texture->refcount++; + sprite->texture = args.texture; // basic node parameters AscSceneNode *node = (AscSceneNode *) sprite; @@ -52,8 +55,8 @@ node->position.x = (float) args.x; node->position.y = (float) args.y; - node->scale.x = (float) (args.width == 0 ? args.texture.width : args.width); - node->scale.y = (float) (args.height == 0 ? args.texture.height : args.height); + node->scale.x = (float) (args.width == 0 ? args.texture->width : args.width); + node->scale.y = (float) (args.height == 0 ? args.texture->height : args.height); return node; } @@ -67,12 +70,12 @@ GL_FALSE, node->data.world_transform); // Bind texture - if (node->tex.target == GL_TEXTURE_RECTANGLE) { - asc_texture_bind(&node->tex, shader->rect_tex, 0); + if (node->texture->target == GL_TEXTURE_RECTANGLE) { + asc_texture_bind(node->texture, shader->rect_tex, 0); asc_texture_bind(&ASC_DEFAULT_TEXTURES.empty_1x1_2d, shader->uv_tex, 1); } else { asc_texture_bind(&ASC_DEFAULT_TEXTURES.empty_1x1_rect, shader->rect_tex, 0); - asc_texture_bind(&node->tex, shader->uv_tex, 1); + asc_texture_bind(node->texture, shader->uv_tex, 1); } // Apply depth