]> git.draconx.ca Git - upkg.git/commitdiff
Begin work on Engine.Texture.
authorNick Bowler <nbowler@draconx.ca>
Wed, 10 Jun 2009 23:21:08 +0000 (19:21 -0400)
committerNick Bowler <nbowler@draconx.ca>
Wed, 10 Jun 2009 23:21:08 +0000 (19:21 -0400)
src/engine/Makefile.inc
src/engine/engine.c
src/engine/texture.c [new file with mode: 0644]
src/engine/texture.h [new file with mode: 0644]

index 62ad7027c1e0de03d3036ba16af79d212aa645f9..897ba2b4b297529e769f3731771d880a15c35453 100644 (file)
@@ -1,7 +1,7 @@
-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_
index 732a94a057841215616303b18902108bd95ef305..38b503683ca1f4692cfd3a65029d6e5505866bde 100644 (file)
@@ -2,11 +2,13 @@
 #include <glib-object.h>
 
 #include "music.h"
+#include "texture.h"
 
 #define init engine_LTX_init
 
 int init(GTypeModule *m)
 {
        music_register(m);
+       texture_register(m);
        return 0;
 }
diff --git a/src/engine/texture.c b/src/engine/texture.c
new file mode 100644 (file)
index 0000000..1b64590
--- /dev/null
@@ -0,0 +1,72 @@
+#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)
+{
+}
diff --git a/src/engine/texture.h b/src/engine/texture.h
new file mode 100644 (file)
index 0000000..cfb53f5
--- /dev/null
@@ -0,0 +1,33 @@
+#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