]> git.draconx.ca Git - upkg.git/blobdiff - src/engine/texture.gob
Ensure object property references are released.
[upkg.git] / src / engine / texture.gob
index 3db176e045982b31de94268bed9031a7f63cf889..981c89891ab25b499e354a58b4391086e4de828b 100644 (file)
@@ -1,7 +1,7 @@
 %alltop{
 /*
  *  upkg: tool for manipulating Unreal Tournament packages.
- *  Copyright © 2009-2011 Nick Bowler
+ *  Copyright © 2009-2012, 2020 Nick Bowler
  *
  *  This program is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -52,7 +52,7 @@ struct engine_texture_data *decode_mipmap(UObject *uo)
        long datalen;
 
        buflen = upkg_export_read(f, buf, sizeof buf);
-       if (uo->pkg->version >= 63) {
+       if (f->pkg->version >= 63) {
                /*
                 * There's an offset to the end of the image data here; not
                 * clear why it's useful since it's implied by the very next
@@ -84,8 +84,10 @@ struct engine_texture_data *decode_mipmap(UObject *uo)
 
        /* At this point, the current file offset should match the one recorded
         * above. */
-       if (uo->pkg->version >= 63 && end_offset != (f->base + f->offset))
+       if (f->pkg->version >= 63 && end_offset != (f->base + f->offset)) {
+               u_err(uo, "mipmap end offset does not match data size");
                goto err_free;
+       }
 
        /* Read in the remaining fields */
        buflen = upkg_export_read(f, buf, 10);
@@ -115,7 +117,10 @@ class Engine:Texture from U:Object (dynamic)
        private unsigned VClamp;
        private unsigned VBits;
 
-       private Engine:Palette *Palette;
+       private float DrawScale;
+
+       private Engine:Palette *Palette = NULL destroywith g_object_unref;
+       private Engine:Texture *DetailTexture = NULL destroywith g_object_unref;
 
        private struct engine_texture_data **mipmap_data;
        private unsigned char mipmap_count;
@@ -136,6 +141,8 @@ class Engine:Texture from U:Object (dynamic)
                for (int i = 0; i < self->_priv->mipmap_count; i++) {
                        data[i] = decode_mipmap(uo);
                        if (!data[i]) {
+                               u_err(uo, "error decoding mipmap level %d", i);
+
                                /* Unwind the allocations. */
                                for (; i >= 0; i--)
                                        free(data[i]);
@@ -265,10 +272,23 @@ class Engine:Texture from U:Object (dynamic)
                , link
                );
 
+       property FLOAT DrawScale
+               ( nick = "Draw Scale"
+               , blurb = "Relative size to parent surface"
+               , link
+               );
+
        property OBJECT Palette
                ( nick = "Palette"
                , blurb = "Reference to the texture's palette."
                , object_type = Engine:Palette
                , link
                );
+
+       property OBJECT DetailTexture
+               ( nick = "Detail Texture"
+               , blurb = "Reference to the corresponding detail texture."
+               , object_type = Engine:Texture
+               , link
+               );
 }