src/text.c

changeset 89
e1f682a8a145
parent 82
4e1e698f4b0d
--- 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;

mercurial