-noinst_HEADERS += engine/music.h
+noinst_HEADERS += engine/music.h engine/texture.h
lib_LTLIBRARIES += engine.la
-engine_la_SOURCES = engine/music.c engine/engine.c
+engine_la_SOURCES = engine/music.c engine/texture.c engine/engine.c
engine_la_CFLAGS = $(GLIB_CFLAGS)
engine_la_LDFLAGS = $(GLIB_LIBS)
engine_la_LDFLAGS += -module -avoid-version -export-symbols-regex _LTX_
--- /dev/null
+#include <stdio.h>
+#include <string.h>
+#include <glib-object.h>
+
+#include "exportable.h"
+#include "uobject.h"
+#include "texture.h"
+#include "upkg.h"
+
+#define TEXTURE_GET_PRIV(o) \
+ G_TYPE_INSTANCE_GET_PRIVATE(o, ENGINE_TEXTURE_TYPE, struct texture_priv)
+
+struct texture_priv {
+ unsigned type;
+
+ struct upkg_file *f;
+ size_t base, len;
+
+ unsigned char buf[2048];
+ unsigned long nbuf;
+};
+
+void exportable_init(UObjectExportable *e)
+{
+}
+
+G_DEFINE_DYNAMIC_TYPE(EngineTexture, engine_texture, U_OBJECT_TYPE);
+
+static int deserialize(UObject *o, struct upkg_file *f)
+{
+ struct texture_priv *priv = TEXTURE_GET_PRIV(o);
+ EngineTexture *t = ENGINE_TEXTURE(o);
+ const GValue *val;
+
+ U_OBJECT_CLASS(engine_texture_parent_class)->deserialize(o, f);
+
+ val = u_object_get_property(o, "USize");
+ if (!(val && G_VALUE_HOLDS(val, G_TYPE_ULONG)))
+ return -1;
+ t->usize = g_value_get_ulong(val);
+
+ val = u_object_get_property(o, "USize");
+ if (!(val && G_VALUE_HOLDS(val, G_TYPE_ULONG)))
+ return -1;
+ t->vsize = g_value_get_ulong(val);
+
+ printf("Texture size: %lux%lu\n", t->usize, t->vsize);
+
+ return 0;
+}
+
+void texture_register(GTypeModule *m)
+{
+ engine_texture_register_type(m);
+}
+
+static void engine_texture_init(EngineTexture *m)
+{
+}
+
+static void engine_texture_class_init(EngineTextureClass *class)
+{
+ UObjectClass *uo = U_OBJECT_CLASS(class);
+
+ g_type_class_add_private(class, sizeof (struct texture_priv));
+
+ uo->deserialize = deserialize;
+}
+
+static void engine_texture_class_finalize(EngineTextureClass *class)
+{
+}
--- /dev/null
+#ifndef TEXTURE_H_
+#define TEXTURE_H_
+
+#include <glib-object.h>
+#include "uobject.h"
+
+#define ENGINE_TEXTURE_TYPE (engine_texture_get_type())
+#define ENGINE_TEXTURE(obj) \
+ G_TYPE_CHECK_INSTANCE_CAST(obj, ENGINE_TEXTURE_TYPE, EngineTexture)
+#define ENGINE_TEXTURE_CLASS(class) \
+ G_TYPE_CHECK_CLASS_CAST(class, ENGINE_TEXTURE_TYPE, EngineTextureClass)
+#define ENGINE_IS_TEXTURE(obj) \
+ G_TYPE_CHECK_INSTANCE_TYPE(obj, ENGINE_TEXTURE_TYPE)
+#define ENGINE_IS_TEXTURE_CLASS(class) \
+ G_TYPE_CHECK_CLASS_TYPE(class, ENGINE_TEXTURE_TYPE, EngineTextureClass)
+
+typedef struct EngineTexture EngineTexture;
+typedef struct EngineTextureClass EngineTextureClass;
+
+struct EngineTexture {
+ UObject parent;
+
+ unsigned long usize, vsize;
+};
+
+struct EngineTextureClass {
+ UObjectClass parent;
+};
+
+GType engine_texture_get_type(void);
+void texture_register(GTypeModule *m);
+
+#endif