From 2c7a3449642f05dc8ca386d137f4521632b19f79 Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Wed, 10 Jun 2009 19:21:08 -0400 Subject: [PATCH] Begin work on Engine.Texture. --- src/engine/Makefile.inc | 4 +-- src/engine/engine.c | 2 ++ src/engine/texture.c | 72 +++++++++++++++++++++++++++++++++++++++++ src/engine/texture.h | 33 +++++++++++++++++++ 4 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 src/engine/texture.c create mode 100644 src/engine/texture.h diff --git a/src/engine/Makefile.inc b/src/engine/Makefile.inc index 62ad702..897ba2b 100644 --- a/src/engine/Makefile.inc +++ b/src/engine/Makefile.inc @@ -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_ diff --git a/src/engine/engine.c b/src/engine/engine.c index 732a94a..38b5036 100644 --- a/src/engine/engine.c +++ b/src/engine/engine.c @@ -2,11 +2,13 @@ #include #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 index 0000000..1b64590 --- /dev/null +++ b/src/engine/texture.c @@ -0,0 +1,72 @@ +#include +#include +#include + +#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 index 0000000..cfb53f5 --- /dev/null +++ b/src/engine/texture.h @@ -0,0 +1,33 @@ +#ifndef TEXTURE_H_ +#define TEXTURE_H_ + +#include +#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 -- 2.43.2