Files
r36ultra_app/framebuffer_demo.c
2026-02-01 16:41:07 -03:00

737 lines
21 KiB
C

/* framebuffer_demo.c generated by valac 0.56.18, the Vala compiler
* generated from framebuffer_demo.vala, do not modify */
#include <glib-object.h>
#include <glib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gobject/gvaluecollector.h>
#define FRAMEBUFFER_DEMO_WIDTH 720
#define FRAMEBUFFER_DEMO_HEIGHT 720
#define FRAMEBUFFER_DEMO_BPP 4
#if !defined(VALA_STRICT_C)
#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ >= 14)
#pragma GCC diagnostic warning "-Wincompatible-pointer-types"
#elif defined(__clang__) && (__clang_major__ >= 16)
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
#endif
#endif
#if !defined(VALA_EXTERN)
#if defined(_MSC_VER)
#define VALA_EXTERN __declspec(dllexport) extern
#elif __GNUC__ >= 4
#define VALA_EXTERN __attribute__((visibility("default"))) extern
#else
#define VALA_EXTERN extern
#endif
#endif
#define TYPE_FRAMEBUFFER_DEMO (framebuffer_demo_get_type ())
#define FRAMEBUFFER_DEMO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_FRAMEBUFFER_DEMO, FramebufferDemo))
#define FRAMEBUFFER_DEMO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_FRAMEBUFFER_DEMO, FramebufferDemoClass))
#define IS_FRAMEBUFFER_DEMO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_FRAMEBUFFER_DEMO))
#define IS_FRAMEBUFFER_DEMO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_FRAMEBUFFER_DEMO))
#define FRAMEBUFFER_DEMO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_FRAMEBUFFER_DEMO, FramebufferDemoClass))
typedef struct _FramebufferDemo FramebufferDemo;
typedef struct _FramebufferDemoClass FramebufferDemoClass;
typedef struct _FramebufferDemoPrivate FramebufferDemoPrivate;
#define _framebuffer_demo_unref0(var) ((var == NULL) ? NULL : (var = (framebuffer_demo_unref (var), NULL)))
#define _g_string_free0(var) ((var == NULL) ? NULL : (var = (g_string_free (var, TRUE), NULL)))
#define _g_free0(var) (var = (g_free (var), NULL))
typedef struct _ParamSpecFramebufferDemo ParamSpecFramebufferDemo;
struct _FramebufferDemo {
GTypeInstance parent_instance;
volatile int ref_count;
FramebufferDemoPrivate * priv;
};
struct _FramebufferDemoClass {
GTypeClass parent_class;
void (*finalize) (FramebufferDemo *self);
};
struct _FramebufferDemoPrivate {
gint fb_fd;
guint8* framebuffer;
gint framebuffer_length1;
gint _framebuffer_size_;
};
struct _ParamSpecFramebufferDemo {
GParamSpec parent_instance;
};
static gint FramebufferDemo_private_offset;
static gpointer framebuffer_demo_parent_class = NULL;
VALA_EXTERN gpointer framebuffer_demo_ref (gpointer instance);
VALA_EXTERN void framebuffer_demo_unref (gpointer instance);
VALA_EXTERN GParamSpec* param_spec_framebuffer_demo (const gchar* name,
const gchar* nick,
const gchar* blurb,
GType object_type,
GParamFlags flags);
VALA_EXTERN void value_set_framebuffer_demo (GValue* value,
gpointer v_object);
VALA_EXTERN void value_take_framebuffer_demo (GValue* value,
gpointer v_object);
VALA_EXTERN gpointer value_get_framebuffer_demo (const GValue* value);
VALA_EXTERN GType framebuffer_demo_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (FramebufferDemo, framebuffer_demo_unref)
VALA_EXTERN FramebufferDemo* framebuffer_demo_new (void);
VALA_EXTERN FramebufferDemo* framebuffer_demo_construct (GType object_type);
VALA_EXTERN void framebuffer_demo_set_pixel (FramebufferDemo* self,
gint x,
gint y,
guint8 b,
guint8 g,
guint8 r,
guint8 a);
VALA_EXTERN void framebuffer_demo_fill_screen (FramebufferDemo* self,
guint8 b,
guint8 g,
guint8 r,
guint8 a);
VALA_EXTERN void framebuffer_demo_draw_rectangle (FramebufferDemo* self,
gint x,
gint y,
gint w,
gint h,
guint8 b,
guint8 g,
guint8 r,
guint8 a);
VALA_EXTERN void framebuffer_demo_draw_circle (FramebufferDemo* self,
gint cx,
gint cy,
gint radius,
guint8 b,
guint8 g,
guint8 r,
guint8 a);
VALA_EXTERN void framebuffer_demo_update (FramebufferDemo* self);
VALA_EXTERN gboolean framebuffer_demo_is_open (FramebufferDemo* self);
static gint framebuffer_demo_main (gchar** args,
gint args_length1);
static void framebuffer_demo_finalize (FramebufferDemo * obj);
static GType framebuffer_demo_get_type_once (void);
static inline gpointer
framebuffer_demo_get_instance_private (FramebufferDemo* self)
{
return G_STRUCT_MEMBER_P (self, FramebufferDemo_private_offset);
}
FramebufferDemo*
framebuffer_demo_construct (GType object_type)
{
FramebufferDemo* self = NULL;
guint8* _tmp2_;
FILE* _tmp3_;
FILE* _tmp4_;
self = (FramebufferDemo*) g_type_create_instance (object_type);
self->priv->fb_fd = open ("/dev/fb0", O_RDWR, (mode_t) 0);
if (self->priv->fb_fd < 0) {
FILE* _tmp0_;
FILE* _tmp1_;
_tmp0_ = stderr;
fprintf (_tmp0_, "Error: Cannot open framebuffer device /dev/fb0\n");
_tmp1_ = stderr;
fprintf (_tmp1_, "Make sure you have permissions (try running with sudo)\n");
return self;
}
_tmp2_ = g_new0 (guint8, (FRAMEBUFFER_DEMO_WIDTH * FRAMEBUFFER_DEMO_HEIGHT) * FRAMEBUFFER_DEMO_BPP);
self->priv->framebuffer = (g_free (self->priv->framebuffer), NULL);
self->priv->framebuffer = _tmp2_;
self->priv->framebuffer_length1 = (FRAMEBUFFER_DEMO_WIDTH * FRAMEBUFFER_DEMO_HEIGHT) * FRAMEBUFFER_DEMO_BPP;
self->priv->_framebuffer_size_ = self->priv->framebuffer_length1;
_tmp3_ = stdout;
fprintf (_tmp3_, "Framebuffer opened successfully\n");
_tmp4_ = stdout;
fprintf (_tmp4_, "Resolution: %dx%d, Format: BGRA\n", FRAMEBUFFER_DEMO_WIDTH, FRAMEBUFFER_DEMO_HEIGHT);
return self;
}
FramebufferDemo*
framebuffer_demo_new (void)
{
return framebuffer_demo_construct (TYPE_FRAMEBUFFER_DEMO);
}
void
framebuffer_demo_set_pixel (FramebufferDemo* self,
gint x,
gint y,
guint8 b,
guint8 g,
guint8 r,
guint8 a)
{
gboolean _tmp0_ = FALSE;
gboolean _tmp1_ = FALSE;
gboolean _tmp2_ = FALSE;
gint offset = 0;
guint8* _tmp3_;
gint _tmp3__length1;
guint8* _tmp4_;
gint _tmp4__length1;
guint8* _tmp5_;
gint _tmp5__length1;
guint8* _tmp6_;
gint _tmp6__length1;
g_return_if_fail (self != NULL);
if (x < 0) {
_tmp2_ = TRUE;
} else {
_tmp2_ = x >= FRAMEBUFFER_DEMO_WIDTH;
}
if (_tmp2_) {
_tmp1_ = TRUE;
} else {
_tmp1_ = y < 0;
}
if (_tmp1_) {
_tmp0_ = TRUE;
} else {
_tmp0_ = y >= FRAMEBUFFER_DEMO_HEIGHT;
}
if (_tmp0_) {
return;
}
offset = ((y * FRAMEBUFFER_DEMO_WIDTH) + x) * FRAMEBUFFER_DEMO_BPP;
_tmp3_ = self->priv->framebuffer;
_tmp3__length1 = self->priv->framebuffer_length1;
_tmp3_[offset + 0] = b;
_tmp4_ = self->priv->framebuffer;
_tmp4__length1 = self->priv->framebuffer_length1;
_tmp4_[offset + 1] = g;
_tmp5_ = self->priv->framebuffer;
_tmp5__length1 = self->priv->framebuffer_length1;
_tmp5_[offset + 2] = r;
_tmp6_ = self->priv->framebuffer;
_tmp6__length1 = self->priv->framebuffer_length1;
_tmp6_[offset + 3] = a;
}
void
framebuffer_demo_fill_screen (FramebufferDemo* self,
guint8 b,
guint8 g,
guint8 r,
guint8 a)
{
g_return_if_fail (self != NULL);
{
gint y = 0;
y = 0;
{
gboolean _tmp0_ = FALSE;
_tmp0_ = TRUE;
while (TRUE) {
if (!_tmp0_) {
gint _tmp1_;
_tmp1_ = y;
y = _tmp1_ + 1;
}
_tmp0_ = FALSE;
if (!(y < FRAMEBUFFER_DEMO_HEIGHT)) {
break;
}
{
gint x = 0;
x = 0;
{
gboolean _tmp2_ = FALSE;
_tmp2_ = TRUE;
while (TRUE) {
if (!_tmp2_) {
gint _tmp3_;
_tmp3_ = x;
x = _tmp3_ + 1;
}
_tmp2_ = FALSE;
if (!(x < FRAMEBUFFER_DEMO_WIDTH)) {
break;
}
framebuffer_demo_set_pixel (self, x, y, b, g, r, a);
}
}
}
}
}
}
}
void
framebuffer_demo_draw_rectangle (FramebufferDemo* self,
gint x,
gint y,
gint w,
gint h,
guint8 b,
guint8 g,
guint8 r,
guint8 a)
{
g_return_if_fail (self != NULL);
{
gint dy = 0;
dy = 0;
{
gboolean _tmp0_ = FALSE;
_tmp0_ = TRUE;
while (TRUE) {
if (!_tmp0_) {
gint _tmp1_;
_tmp1_ = dy;
dy = _tmp1_ + 1;
}
_tmp0_ = FALSE;
if (!(dy < h)) {
break;
}
{
gint dx = 0;
dx = 0;
{
gboolean _tmp2_ = FALSE;
_tmp2_ = TRUE;
while (TRUE) {
if (!_tmp2_) {
gint _tmp3_;
_tmp3_ = dx;
dx = _tmp3_ + 1;
}
_tmp2_ = FALSE;
if (!(dx < w)) {
break;
}
framebuffer_demo_set_pixel (self, x + dx, y + dy, b, g, r, a);
}
}
}
}
}
}
}
void
framebuffer_demo_draw_circle (FramebufferDemo* self,
gint cx,
gint cy,
gint radius,
guint8 b,
guint8 g,
guint8 r,
guint8 a)
{
g_return_if_fail (self != NULL);
{
gint y = 0;
y = -radius;
{
gboolean _tmp0_ = FALSE;
_tmp0_ = TRUE;
while (TRUE) {
if (!_tmp0_) {
gint _tmp1_;
_tmp1_ = y;
y = _tmp1_ + 1;
}
_tmp0_ = FALSE;
if (!(y <= radius)) {
break;
}
{
gint x = 0;
x = -radius;
{
gboolean _tmp2_ = FALSE;
_tmp2_ = TRUE;
while (TRUE) {
if (!_tmp2_) {
gint _tmp3_;
_tmp3_ = x;
x = _tmp3_ + 1;
}
_tmp2_ = FALSE;
if (!(x <= radius)) {
break;
}
if (((x * x) + (y * y)) <= (radius * radius)) {
framebuffer_demo_set_pixel (self, cx + x, cy + y, b, g, r, a);
}
}
}
}
}
}
}
}
void
framebuffer_demo_update (FramebufferDemo* self)
{
gssize written = 0L;
guint8* _tmp1_;
gint _tmp1__length1;
guint8* _tmp2_;
gint _tmp2__length1;
g_return_if_fail (self != NULL);
if (self->priv->fb_fd < 0) {
FILE* _tmp0_;
_tmp0_ = stderr;
fprintf (_tmp0_, "Error: Framebuffer not opened\n");
return;
}
lseek (self->priv->fb_fd, (off_t) 0, SEEK_SET);
_tmp1_ = self->priv->framebuffer;
_tmp1__length1 = self->priv->framebuffer_length1;
_tmp2_ = self->priv->framebuffer;
_tmp2__length1 = self->priv->framebuffer_length1;
written = write (self->priv->fb_fd, _tmp1_, (gsize) _tmp2__length1);
if (written < ((gssize) 0)) {
FILE* _tmp3_;
_tmp3_ = stderr;
fprintf (_tmp3_, "Error writing to framebuffer\n");
}
}
gboolean
framebuffer_demo_is_open (FramebufferDemo* self)
{
gboolean result;
g_return_val_if_fail (self != NULL, FALSE);
result = self->priv->fb_fd >= 0;
return result;
}
static gchar*
g_file_stream_read_line (FILE* self)
{
gint c = 0;
GString* ret = NULL;
GString* _tmp3_;
gchar* result;
g_return_val_if_fail (self != NULL, NULL);
ret = NULL;
while (TRUE) {
GString* _tmp0_;
GString* _tmp2_;
c = fgetc (self);
if (!(c != EOF)) {
break;
}
_tmp0_ = ret;
if (_tmp0_ == NULL) {
GString* _tmp1_;
_tmp1_ = g_string_new ("");
_g_string_free0 (ret);
ret = _tmp1_;
}
if (c == ((gint) '\n')) {
break;
}
_tmp2_ = ret;
g_string_append_c ((GString*) _tmp2_, (gchar) c);
}
_tmp3_ = ret;
if (_tmp3_ == NULL) {
result = NULL;
_g_string_free0 (ret);
return result;
} else {
GString* _tmp4_;
gchar* _tmp5_;
_tmp4_ = ret;
_tmp5_ = ((GString*) _tmp4_)->str;
((GString*) _tmp4_)->str = NULL;
result = _tmp5_;
_g_string_free0 (ret);
return result;
}
}
static gint
framebuffer_demo_main (gchar** args,
gint args_length1)
{
FramebufferDemo* fb = NULL;
FramebufferDemo* _tmp0_;
FramebufferDemo* _tmp1_;
FILE* _tmp2_;
FramebufferDemo* _tmp3_;
FramebufferDemo* _tmp4_;
FramebufferDemo* _tmp5_;
FramebufferDemo* _tmp6_;
FramebufferDemo* _tmp7_;
FramebufferDemo* _tmp8_;
FILE* _tmp9_;
FILE* _tmp10_;
gchar* _tmp11_;
gchar* _tmp12_;
FramebufferDemo* _tmp13_;
FramebufferDemo* _tmp14_;
FILE* _tmp15_;
gint result;
_tmp0_ = framebuffer_demo_new ();
fb = _tmp0_;
_tmp1_ = fb;
if (!framebuffer_demo_is_open (_tmp1_)) {
result = 1;
_framebuffer_demo_unref0 (fb);
return result;
}
_tmp2_ = stdout;
fprintf (_tmp2_, "Drawing demo graphics...\n");
_tmp3_ = fb;
framebuffer_demo_fill_screen (_tmp3_, (guint8) 0, (guint8) 0, (guint8) 0, (guint8) 255);
_tmp4_ = fb;
framebuffer_demo_draw_rectangle (_tmp4_, 100, 100, 200, 150, (guint8) 0, (guint8) 0, (guint8) 255, (guint8) 255);
_tmp5_ = fb;
framebuffer_demo_draw_circle (_tmp5_, 500, 200, 80, (guint8) 0, (guint8) 255, (guint8) 0, (guint8) 255);
_tmp6_ = fb;
framebuffer_demo_draw_rectangle (_tmp6_, 200, 400, 300, 100, (guint8) 255, (guint8) 0, (guint8) 0, (guint8) 255);
_tmp7_ = fb;
framebuffer_demo_draw_circle (_tmp7_, 360, 360, 100, (guint8) 0, (guint8) 255, (guint8) 255, (guint8) 255);
_tmp8_ = fb;
framebuffer_demo_update (_tmp8_);
_tmp9_ = stdout;
fprintf (_tmp9_, "Graphics drawn! Press Enter to clear and exit...\n");
_tmp10_ = stdin;
_tmp11_ = g_file_stream_read_line (_tmp10_);
_tmp12_ = _tmp11_;
_g_free0 (_tmp12_);
_tmp13_ = fb;
framebuffer_demo_fill_screen (_tmp13_, (guint8) 0, (guint8) 0, (guint8) 0, (guint8) 255);
_tmp14_ = fb;
framebuffer_demo_update (_tmp14_);
_tmp15_ = stdout;
fprintf (_tmp15_, "Done!\n");
result = 0;
_framebuffer_demo_unref0 (fb);
return result;
}
int
main (int argc,
char ** argv)
{
return framebuffer_demo_main (argv, argc);
}
static void
value_framebuffer_demo_init (GValue* value)
{
value->data[0].v_pointer = NULL;
}
static void
value_framebuffer_demo_free_value (GValue* value)
{
if (value->data[0].v_pointer) {
framebuffer_demo_unref (value->data[0].v_pointer);
}
}
static void
value_framebuffer_demo_copy_value (const GValue* src_value,
GValue* dest_value)
{
if (src_value->data[0].v_pointer) {
dest_value->data[0].v_pointer = framebuffer_demo_ref (src_value->data[0].v_pointer);
} else {
dest_value->data[0].v_pointer = NULL;
}
}
static gpointer
value_framebuffer_demo_peek_pointer (const GValue* value)
{
return value->data[0].v_pointer;
}
static gchar*
value_framebuffer_demo_collect_value (GValue* value,
guint n_collect_values,
GTypeCValue* collect_values,
guint collect_flags)
{
if (collect_values[0].v_pointer) {
FramebufferDemo * object;
object = collect_values[0].v_pointer;
if (object->parent_instance.g_class == NULL) {
return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
}
value->data[0].v_pointer = framebuffer_demo_ref (object);
} else {
value->data[0].v_pointer = NULL;
}
return NULL;
}
static gchar*
value_framebuffer_demo_lcopy_value (const GValue* value,
guint n_collect_values,
GTypeCValue* collect_values,
guint collect_flags)
{
FramebufferDemo ** object_p;
object_p = collect_values[0].v_pointer;
if (!object_p) {
return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
}
if (!value->data[0].v_pointer) {
*object_p = NULL;
} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
*object_p = value->data[0].v_pointer;
} else {
*object_p = framebuffer_demo_ref (value->data[0].v_pointer);
}
return NULL;
}
GParamSpec*
param_spec_framebuffer_demo (const gchar* name,
const gchar* nick,
const gchar* blurb,
GType object_type,
GParamFlags flags)
{
ParamSpecFramebufferDemo* spec;
g_return_val_if_fail (g_type_is_a (object_type, TYPE_FRAMEBUFFER_DEMO), NULL);
spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
G_PARAM_SPEC (spec)->value_type = object_type;
return G_PARAM_SPEC (spec);
}
gpointer
value_get_framebuffer_demo (const GValue* value)
{
g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_FRAMEBUFFER_DEMO), NULL);
return value->data[0].v_pointer;
}
void
value_set_framebuffer_demo (GValue* value,
gpointer v_object)
{
FramebufferDemo * old;
g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_FRAMEBUFFER_DEMO));
old = value->data[0].v_pointer;
if (v_object) {
g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_FRAMEBUFFER_DEMO));
g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
value->data[0].v_pointer = v_object;
framebuffer_demo_ref (value->data[0].v_pointer);
} else {
value->data[0].v_pointer = NULL;
}
if (old) {
framebuffer_demo_unref (old);
}
}
void
value_take_framebuffer_demo (GValue* value,
gpointer v_object)
{
FramebufferDemo * old;
g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_FRAMEBUFFER_DEMO));
old = value->data[0].v_pointer;
if (v_object) {
g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_FRAMEBUFFER_DEMO));
g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
value->data[0].v_pointer = v_object;
} else {
value->data[0].v_pointer = NULL;
}
if (old) {
framebuffer_demo_unref (old);
}
}
static void
framebuffer_demo_class_init (FramebufferDemoClass * klass,
gpointer klass_data)
{
framebuffer_demo_parent_class = g_type_class_peek_parent (klass);
((FramebufferDemoClass *) klass)->finalize = framebuffer_demo_finalize;
g_type_class_adjust_private_offset (klass, &FramebufferDemo_private_offset);
}
static void
framebuffer_demo_instance_init (FramebufferDemo * self,
gpointer klass)
{
self->priv = framebuffer_demo_get_instance_private (self);
self->ref_count = 1;
}
static void
framebuffer_demo_finalize (FramebufferDemo * obj)
{
FramebufferDemo * self;
self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_FRAMEBUFFER_DEMO, FramebufferDemo);
g_signal_handlers_destroy (self);
if (self->priv->fb_fd >= 0) {
close (self->priv->fb_fd);
}
self->priv->framebuffer = (g_free (self->priv->framebuffer), NULL);
}
static GType
framebuffer_demo_get_type_once (void)
{
static const GTypeValueTable g_define_type_value_table = { value_framebuffer_demo_init, value_framebuffer_demo_free_value, value_framebuffer_demo_copy_value, value_framebuffer_demo_peek_pointer, "p", value_framebuffer_demo_collect_value, "p", value_framebuffer_demo_lcopy_value };
static const GTypeInfo g_define_type_info = { sizeof (FramebufferDemoClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) framebuffer_demo_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (FramebufferDemo), 0, (GInstanceInitFunc) framebuffer_demo_instance_init, &g_define_type_value_table };
static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
GType framebuffer_demo_type_id;
framebuffer_demo_type_id = g_type_register_fundamental (g_type_fundamental_next (), "FramebufferDemo", &g_define_type_info, &g_define_type_fundamental_info, 0);
FramebufferDemo_private_offset = g_type_add_instance_private (framebuffer_demo_type_id, sizeof (FramebufferDemoPrivate));
return framebuffer_demo_type_id;
}
GType
framebuffer_demo_get_type (void)
{
static volatile gsize framebuffer_demo_type_id__once = 0;
if (g_once_init_enter (&framebuffer_demo_type_id__once)) {
GType framebuffer_demo_type_id;
framebuffer_demo_type_id = framebuffer_demo_get_type_once ();
g_once_init_leave (&framebuffer_demo_type_id__once, framebuffer_demo_type_id);
}
return framebuffer_demo_type_id__once;
}
gpointer
framebuffer_demo_ref (gpointer instance)
{
FramebufferDemo * self;
self = instance;
g_atomic_int_inc (&self->ref_count);
return instance;
}
void
framebuffer_demo_unref (gpointer instance)
{
FramebufferDemo * self;
self = instance;
if (g_atomic_int_dec_and_test (&self->ref_count)) {
FRAMEBUFFER_DEMO_GET_CLASS (self)->finalize (self);
g_type_free_instance ((GTypeInstance *) self);
}
}