--- a/src/text.c Sun Apr 20 15:41:16 2025 +0200 +++ b/src/text.c Mon Apr 21 17:27:33 2025 +0200 @@ -29,6 +29,7 @@ #include "ascension/error.h" #include "ascension/ui/text.h" +#include <assert.h> #include <cx/printf.h> #include <GL/glew.h> @@ -37,11 +38,6 @@ AscSprite *sprite = (AscSprite*) node; AscText *text = (AscText*) node; - // Generate new texture, if required - if (asc_texture_uninitialized(&sprite->tex)) { - asc_texture_init_rectangle(&sprite->tex); - } - // Render text onto a surface TTF_Font *font = asc_font_load(text->font); static int alignments[] = { @@ -67,7 +63,7 @@ } // Transfer Image Data - asc_texture_from_surface(&sprite->tex, surface); + asc_texture_from_surface(sprite->texture, surface); // Free the surface SDL_FreeSurface(surface); @@ -76,7 +72,9 @@ static void asc_text_free(AscSceneNode *node) { AscText *text = (AscText*) node; AscSprite *sprite = (AscSprite*) node; - asc_texture_destroy(&sprite->tex); + asc_texture_destroy(sprite->texture, 1); + assert(sprite->texture->refcount == 0); + free(sprite->texture); cx_strfree(&text->text); free(node); } @@ -102,6 +100,8 @@ } // initialize + text->base.texture = malloc(sizeof(AscTexture)); + asc_texture_init_rectangle(text->base.texture, 1); asc_text_update(node); return node;