cogl: Port Primitive away from CoglObject

- The associated CoglAttribute's are now stored in GPtrArray as suggested
by carlosg in
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3193?commit_id=19b619073b3c7d311c64e0a997558f943b38c94a#note_1849281
- cogl_primitive_set_attributes was dropped for "simplicity"
especially that nothing uses it.
- As this is the last remaining CoglObject subclass, the commit also drops
all the CoglObject related macros/types

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3193>
This commit is contained in:
Bilal Elmoussaoui 2023-09-19 12:19:17 +02:00 committed by Marge Bot
parent b4bd69e4e8
commit 2c4968fb41
46 changed files with 99 additions and 1062 deletions

View File

@ -3185,7 +3185,7 @@ _clutter_actor_draw_paint_volume_full (ClutterActor *self,
"ClutterActor (paint volume outline)"); "ClutterActor (paint volume outline)");
clutter_paint_node_add_primitive (pipeline_node, prim); clutter_paint_node_add_primitive (pipeline_node, prim);
clutter_paint_node_add_child (node, pipeline_node); clutter_paint_node_add_child (node, pipeline_node);
cogl_object_unref (prim); g_object_unref (prim);
if (label) if (label)
{ {

View File

@ -338,8 +338,8 @@ clutter_deform_effect_free_arrays (ClutterDeformEffect *self)
ClutterDeformEffectPrivate *priv = self->priv; ClutterDeformEffectPrivate *priv = self->priv;
g_clear_object (&priv->buffer); g_clear_object (&priv->buffer);
cogl_clear_object (&priv->primitive); g_clear_object (&priv->primitive);
cogl_clear_object (&priv->lines_primitive); g_clear_object (&priv->lines_primitive);
} }
static void static void

View File

@ -736,7 +736,7 @@ clutter_paint_operation_clear (ClutterPaintOperation *op)
case PAINT_OP_PRIMITIVE: case PAINT_OP_PRIMITIVE:
if (op->op.primitive != NULL) if (op->op.primitive != NULL)
cogl_object_unref (op->op.primitive); g_object_unref (op->op.primitive);
break; break;
} }
} }
@ -820,7 +820,7 @@ clutter_paint_op_init_primitive (ClutterPaintOperation *op,
clutter_paint_operation_clear (op); clutter_paint_operation_clear (op);
op->opcode = PAINT_OP_PRIMITIVE; op->opcode = PAINT_OP_PRIMITIVE;
op->op.primitive = cogl_object_ref (primitive); op->op.primitive = g_object_ref (primitive);
} }
static inline void static inline void
@ -989,7 +989,7 @@ clutter_paint_node_add_texture_rectangles (ClutterPaintNode *node,
* Adds a region described by a Cogl primitive to the @node. * Adds a region described by a Cogl primitive to the @node.
* *
* This function acquires a reference on @primitive, so it is safe * This function acquires a reference on @primitive, so it is safe
* to call cogl_object_unref() when it returns. * to call g_object_unref() when it returns.
*/ */
void void
clutter_paint_node_add_primitive (ClutterPaintNode *node, clutter_paint_node_add_primitive (ClutterPaintNode *node,
@ -998,7 +998,7 @@ clutter_paint_node_add_primitive (ClutterPaintNode *node,
ClutterPaintOperation operation = PAINT_OP_INIT; ClutterPaintOperation operation = PAINT_OP_INIT;
g_return_if_fail (CLUTTER_IS_PAINT_NODE (node)); g_return_if_fail (CLUTTER_IS_PAINT_NODE (node));
g_return_if_fail (cogl_is_primitive (primitive)); g_return_if_fail (COGL_IS_PRIMITIVE (primitive));
clutter_paint_node_maybe_init_operations (node); clutter_paint_node_maybe_init_operations (node);

View File

@ -154,7 +154,7 @@ _cogl_pango_display_list_add_texture (CoglPangoDisplayList *dl,
/* Get rid of the vertex buffer so that it will be recreated */ /* Get rid of the vertex buffer so that it will be recreated */
if (node->d.texture.primitive != NULL) if (node->d.texture.primitive != NULL)
{ {
cogl_object_unref (node->d.texture.primitive); g_object_unref (node->d.texture.primitive);
node->d.texture.primitive = NULL; node->d.texture.primitive = NULL;
} }
} }
@ -463,10 +463,10 @@ _cogl_pango_display_list_node_free (CoglPangoDisplayListNode *node)
if (node->d.texture.texture != NULL) if (node->d.texture.texture != NULL)
g_object_unref (node->d.texture.texture); g_object_unref (node->d.texture.texture);
if (node->d.texture.primitive != NULL) if (node->d.texture.primitive != NULL)
cogl_object_unref (node->d.texture.primitive); g_object_unref (node->d.texture.primitive);
} }
else if (node->type == COGL_PANGO_DISPLAY_LIST_TRAPEZOID) else if (node->type == COGL_PANGO_DISPLAY_LIST_TRAPEZOID)
cogl_object_unref (node->d.trapezoid.primitive); g_object_unref (node->d.trapezoid.primitive);
if (node->pipeline) if (node->pipeline)
g_object_unref (node->pipeline); g_object_unref (node->pipeline);

View File

@ -30,7 +30,6 @@
#include <glib.h> #include <glib.h>
#include "cogl/cogl-object-private.h"
#include "cogl/cogl-texture.h" #include "cogl/cogl-texture.h"
#include "cogl/cogl-framebuffer.h" #include "cogl/cogl-framebuffer.h"

View File

@ -245,7 +245,7 @@ _cogl_clip_stack_push_primitive (CoglClipStack *stack,
sizeof (CoglClipStackPrimitive), sizeof (CoglClipStackPrimitive),
COGL_CLIP_STACK_PRIMITIVE); COGL_CLIP_STACK_PRIMITIVE);
entry->primitive = cogl_object_ref (primitive); entry->primitive = g_object_ref (primitive);
entry->matrix_entry = cogl_matrix_entry_ref (modelview_entry); entry->matrix_entry = cogl_matrix_entry_ref (modelview_entry);
@ -329,7 +329,7 @@ _cogl_clip_stack_unref (CoglClipStack *entry)
CoglClipStackPrimitive *primitive_entry = CoglClipStackPrimitive *primitive_entry =
(CoglClipStackPrimitive *) entry; (CoglClipStackPrimitive *) entry;
cogl_matrix_entry_unref (primitive_entry->matrix_entry); cogl_matrix_entry_unref (primitive_entry->matrix_entry);
cogl_object_unref (primitive_entry->primitive); g_object_unref (primitive_entry->primitive);
g_free (entry); g_free (entry);
break; break;
} }

View File

@ -29,8 +29,8 @@
#pragma once #pragma once
#include "cogl/cogl-object.h"
#include "cogl/cogl-list.h" #include "cogl/cogl-list.h"
#include "cogl/cogl-macros.h"
/* /*
* This implements a list of callbacks that can be used a bit like * This implements a list of callbacks that can be used a bit like

View File

@ -31,7 +31,6 @@
#include "cogl-config.h" #include "cogl-config.h"
#include "cogl/cogl-mutter.h" #include "cogl/cogl-mutter.h"
#include "cogl/cogl-object.h"
#include "cogl/cogl-private.h" #include "cogl/cogl-private.h"
#include "cogl/cogl-profile.h" #include "cogl/cogl-profile.h"
#include "cogl/cogl-util.h" #include "cogl/cogl-util.h"
@ -46,7 +45,6 @@
#include "cogl/cogl-onscreen-private.h" #include "cogl/cogl-onscreen-private.h"
#include "cogl/cogl-attribute-private.h" #include "cogl/cogl-attribute-private.h"
#include "cogl/cogl1-context.h" #include "cogl/cogl1-context.h"
#include "cogl/cogl-gtype-private.h"
#include "cogl/winsys/cogl-winsys-private.h" #include "cogl/winsys/cogl-winsys-private.h"
#include <gio/gio.h> #include <gio/gio.h>

View File

@ -32,7 +32,6 @@
#include "cogl-config.h" #include "cogl-config.h"
#include "cogl/cogl-dma-buf-handle.h" #include "cogl/cogl-dma-buf-handle.h"
#include "cogl/cogl-object.h"
#include <errno.h> #include <errno.h>
#include <gio/gio.h> #include <gio/gio.h>

View File

@ -32,7 +32,6 @@
#pragma once #pragma once
#include "cogl/cogl-framebuffer-driver.h" #include "cogl/cogl-framebuffer-driver.h"
#include "cogl/cogl-object-private.h"
#include "cogl/cogl-matrix-stack-private.h" #include "cogl/cogl-matrix-stack-private.h"
#include "cogl/cogl-journal-private.h" #include "cogl/cogl-journal-private.h"
#include "cogl/winsys/cogl-winsys-private.h" #include "cogl/winsys/cogl-winsys-private.h"

View File

@ -37,7 +37,6 @@
#include "cogl/cogl-context-private.h" #include "cogl/cogl-context-private.h"
#include "cogl/cogl-display-private.h" #include "cogl/cogl-display-private.h"
#include "cogl/cogl-renderer-private.h" #include "cogl/cogl-renderer-private.h"
#include "cogl/cogl-object-private.h"
#include "cogl/cogl-util.h" #include "cogl/cogl-util.h"
#include "cogl/cogl-texture-private.h" #include "cogl/cogl-texture-private.h"
#include "cogl/cogl-framebuffer-private.h" #include "cogl/cogl-framebuffer-private.h"
@ -50,7 +49,6 @@
#include "cogl/cogl1-context.h" #include "cogl/cogl1-context.h"
#include "cogl/cogl-private.h" #include "cogl/cogl-private.h"
#include "cogl/cogl-primitives-private.h" #include "cogl/cogl-primitives-private.h"
#include "cogl/cogl-gtype-private.h"
#include "cogl/winsys/cogl-winsys-private.h" #include "cogl/winsys/cogl-winsys-private.h"
enum enum

View File

@ -1,206 +0,0 @@
/*
* Cogl
*
* A Low Level GPU Graphics and Utilities API
*
* Copyright (C) 2010 Intel Corporation.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
*
*/
#pragma once
#include "cogl-config.h"
#include <glib.h>
#include <glib-object.h>
#include "cogl/cogl-object-private.h"
/* Move this to public headers? */
typedef struct _CoglGtypeObject CoglGtypeObject;
typedef struct _CoglGtypeClass CoglGtypeClass;
struct _CoglGtypeObject
{
GTypeInstance parent_instance;
guint dummy;
};
struct _CoglGtypeClass
{
GTypeClass base_class;
guint dummy;
};
#define I_(str) (g_intern_static_string ((str)))
/**/
#define _COGL_GTYPE_DEFINE_BASE_CLASS_BEGIN(Name,name) \
GType \
cogl_##name##_get_gtype (void) \
{ \
static size_t g_type_id = 0; \
if (g_once_init_enter (&g_type_id)) \
{ \
static const GTypeFundamentalInfo finfo = { \
(G_TYPE_FLAG_CLASSED | \
G_TYPE_FLAG_INSTANTIATABLE | \
G_TYPE_FLAG_DERIVABLE | \
G_TYPE_FLAG_DEEP_DERIVABLE), \
}; \
static const GTypeValueTable value_table = { \
_cogl_gtype_object_init_value, \
_cogl_gtype_object_free_value, \
_cogl_gtype_object_copy_value, \
_cogl_gtype_object_peek_pointer, \
"p", \
_cogl_gtype_object_collect_value, \
"p", \
_cogl_gtype_object_lcopy_value, \
}; \
const GTypeInfo node_info = { \
sizeof (CoglObjectClass), \
(GBaseInitFunc) _cogl_gtype_object_class_base_init, \
(GBaseFinalizeFunc) _cogl_gtype_object_class_base_finalize, \
(GClassInitFunc) _cogl_gtype_object_class_init, \
(GClassFinalizeFunc) NULL, \
NULL, \
sizeof (CoglObject), \
0, \
(GInstanceInitFunc) _cogl_gtype_object_init, \
&value_table, \
}; \
GType fundamental_type_id = \
g_type_register_fundamental (g_type_fundamental_next (), \
I_("Cogl" # Name), \
&node_info, &finfo, \
G_TYPE_FLAG_ABSTRACT); \
g_once_init_leave (&g_type_id, \
fundamental_type_id);
#define _COGL_GTYPE_DEFINE_BASE_CLASS_END() \
} \
return g_type_id; \
}
#define COGL_GTYPE_DEFINE_BASE_CLASS(Name,name,...) \
_COGL_GTYPE_DEFINE_BASE_CLASS_BEGIN(Name,name) \
{__VA_ARGS__;} \
_COGL_GTYPE_DEFINE_BASE_CLASS_END()
#define _COGL_GTYPE_DEFINE_TYPE_EXTENDED_BEGIN(Name,name,parent,flags) \
\
static void name##_init (Name *self); \
static void name##_class_init (Name##Class *klass); \
static gpointer name##_parent_class = NULL; \
static gint Name##_private_offset; \
\
static void \
name##_class_intern_init (gpointer klass) \
{ \
name##_parent_class = g_type_class_peek_parent (klass); \
name##_class_init ((Name##Class*) klass); \
} \
\
static inline gpointer \
name##_get_instance_private (Name *self) \
{ \
return (G_STRUCT_MEMBER_P (self, Name ##_private_offset)); \
} \
\
GType \
name##_get_gtype (void) \
{ \
static size_t g_type_id = 0; \
if (g_once_init_enter (&g_type_id)) \
{ \
GType fundamental_type_id = \
g_type_register_static_simple (parent, \
g_intern_static_string (#Name), \
sizeof (Name##Class), \
(GClassInitFunc) name##_class_intern_init, \
sizeof (Name), \
(GInstanceInitFunc) name##_init, \
(GTypeFlags) flags); \
{ /* custom code follows */
#define _COGL_GTYPE_DEFINE_TYPE_EXTENDED_END() \
/* following custom code */ \
} \
g_once_init_leave (&g_type_id, \
fundamental_type_id); \
} \
return g_type_id; \
} /* closes name##_get_type() */
#define COGL_GTYPE_DEFINE_CLASS(Name,name,...) \
typedef struct _Cogl##Name##Class Cogl##Name##Class; \
struct _Cogl##Name##Class { \
CoglObjectClass parent_class; \
}; \
_COGL_GTYPE_DEFINE_TYPE_EXTENDED_BEGIN(Cogl##Name, \
cogl_##name, \
cogl_object_get_gtype(), \
0) \
{__VA_ARGS__;} \
_COGL_GTYPE_DEFINE_TYPE_EXTENDED_END() \
static void \
cogl_##name##_init (Cogl##Name *instance) \
{ \
} \
static void \
cogl_##name##_class_init (Cogl##Name##Class *klass) \
{ \
}
void _cogl_gtype_object_init_value (GValue *value);
void _cogl_gtype_object_free_value (GValue *value);
void _cogl_gtype_object_copy_value (const GValue *src,
GValue *dst);
gpointer _cogl_gtype_object_peek_pointer (const GValue *value);
gchar *_cogl_gtype_object_collect_value (GValue *value,
guint n_collect_values,
GTypeCValue *collect_values,
guint collect_flags);
gchar *_cogl_gtype_object_lcopy_value (const GValue *value,
guint n_collect_values,
GTypeCValue *collect_values,
guint collect_flags);
void _cogl_gtype_object_class_base_init (CoglObjectClass *klass);
void _cogl_gtype_object_class_base_finalize (CoglObjectClass *klass);
void _cogl_gtype_object_class_init (CoglObjectClass *klass);
void _cogl_gtype_object_init (CoglObject *object);
COGL_EXPORT
void cogl_object_value_set_object (GValue *value,
gpointer object);
COGL_EXPORT
gpointer cogl_object_value_get_object (const GValue *value);
void _cogl_gtype_dummy_iface_init (gpointer iface);

View File

@ -1,153 +0,0 @@
#include "cogl/cogl-gtype-private.h"
#include <gobject/gvaluecollector.h>
void
_cogl_gtype_object_init_value (GValue *value)
{
value->data[0].v_pointer = NULL;
}
void
_cogl_gtype_object_free_value (GValue *value)
{
if (value->data[0].v_pointer != NULL)
cogl_object_unref (value->data[0].v_pointer);
}
void
_cogl_gtype_object_copy_value (const GValue *src,
GValue *dst)
{
if (src->data[0].v_pointer != NULL)
dst->data[0].v_pointer = cogl_object_ref (src->data[0].v_pointer);
else
dst->data[0].v_pointer = NULL;
}
gpointer
_cogl_gtype_object_peek_pointer (const GValue *value)
{
return value->data[0].v_pointer;
}
gchar *
_cogl_gtype_object_collect_value (GValue *value,
guint n_collect_values,
GTypeCValue *collect_values,
guint collect_flags)
{
CoglObject *object;
object = collect_values[0].v_pointer;
if (object == NULL)
{
value->data[0].v_pointer = NULL;
return NULL;
}
if (object->klass == NULL)
return g_strconcat ("invalid unclassed CoglObject pointer for "
"value type '",
G_VALUE_TYPE_NAME (value),
"'",
NULL);
value->data[0].v_pointer = cogl_object_ref (object);
return NULL;
}
gchar *
_cogl_gtype_object_lcopy_value (const GValue *value,
guint n_collect_values,
GTypeCValue *collect_values,
guint collect_flags)
{
CoglObject **object_p = collect_values[0].v_pointer;
if (object_p == NULL)
return g_strconcat ("value location for '",
G_VALUE_TYPE_NAME (value),
"' passed as NULL",
NULL);
if (value->data[0].v_pointer == NULL)
*object_p = NULL;
else if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
*object_p = value->data[0].v_pointer;
else
*object_p = cogl_object_ref (value->data[0].v_pointer);
return NULL;
}
void
_cogl_gtype_object_class_base_init (CoglObjectClass *klass)
{
}
void
_cogl_gtype_object_class_base_finalize (CoglObjectClass *klass)
{
}
void
_cogl_gtype_object_class_init (CoglObjectClass *klass)
{
}
void
_cogl_gtype_object_init (CoglObject *object)
{
}
void
_cogl_gtype_dummy_iface_init (gpointer iface)
{
}
/**
* cogl_object_value_set_object:
* @value: a #GValue initialized with %COGL_GTYPE_TYPE_OBJECT
* @object: (type Cogl.GtypeObject) (allow-none): a #CoglGtypeObject, or %NULL
*
* Sets the contents of a #GValue initialized with %COGL_GTYPE_TYPE_OBJECT.
*
*/
void
cogl_object_value_set_object (GValue *value,
gpointer object)
{
CoglObject *old_object;
old_object = value->data[0].v_pointer;
if (object != NULL)
{
/* take over ownership */
value->data[0].v_pointer = object;
}
else
value->data[0].v_pointer = NULL;
if (old_object != NULL)
cogl_object_unref (old_object);
}
/**
* cogl_object_value_get_object:
* @value: a #GValue initialized with %COGL_GTYPE_TYPE_OBJECT
*
* Retrieves a pointer to the #CoglGtypeObject contained inside
* the passed #GValue.
*
* Return value: (transfer none) (type Cogl.GtypeObject): a pointer to
* a #CoglGtypeObject, or %NULL
*/
gpointer
cogl_object_value_get_object (const GValue *value)
{
return value->data[0].v_pointer;
}

View File

@ -1,233 +0,0 @@
/*
* Cogl
*
* A Low Level GPU Graphics and Utilities API
*
* Copyright (C) 2008,2009,2010 Intel Corporation.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Authors:
* Robert Bragg <robert@linux.intel.com>
*/
#pragma once
#include <glib.h>
#include "cogl/cogl-types.h"
#include "cogl/cogl-object.h"
#include "cogl/cogl-debug.h"
/* XXX: sadly we didn't fully consider when we copied the cairo API
* for _set_user_data that the callback doesn't get a pointer to the
* instance which is desired in most cases. This means you tend to end
* up creating micro allocations for the private data just so you can
* pair up the data of interest with the original instance for
* identification when it is later destroyed.
*
* Internally we use a small hack to avoid needing these micro
* allocations by actually passing the instance as a second argument
* to the callback */
typedef void (*CoglUserDataDestroyInternalCallback) (void *user_data,
void *instance);
typedef struct _CoglObjectClass
{
GTypeClass base_class;
const char *name;
void *virt_free;
void *virt_unref;
} CoglObjectClass;
/* All Cogl objects inherit from this base object by adding a member:
*
* CoglObject _parent;
*
* at the top of its main structure. This structure is initialized
* when you call _cogl_#type_name#_object_new (new_object);
*/
struct _CoglObject
{
CoglObjectClass *klass; /* equivalent to GTypeInstance */
unsigned int ref_count;
};
/* Helper macro to encapsulate the common code for COGL reference
counted objects */
#ifdef COGL_OBJECT_DEBUG
#define _COGL_OBJECT_DEBUG_NEW(type_name, obj) \
COGL_NOTE (OBJECT, "COGL " G_STRINGIFY (type_name) " NEW %p %i", \
(obj), (obj)->ref_count)
#define _COGL_OBJECT_DEBUG_REF(type_name, object) G_STMT_START { \
CoglObject *__obj = (CoglObject *)object; \
COGL_NOTE (OBJECT, "COGL %s REF %p %i", \
(__obj)->klass->name, \
(__obj), (__obj)->ref_count); } G_STMT_END
#define _COGL_OBJECT_DEBUG_UNREF(type_name, object) G_STMT_START { \
CoglObject *__obj = (CoglObject *)object; \
COGL_NOTE (OBJECT, "COGL %s UNREF %p %i", \
(__obj)->klass->name, \
(__obj), (__obj)->ref_count - 1); } G_STMT_END
#define COGL_OBJECT_DEBUG_FREE(obj) \
COGL_NOTE (OBJECT, "COGL %s FREE %p", \
(obj)->klass->name, (obj))
#else /* !COGL_OBJECT_DEBUG */
#define _COGL_OBJECT_DEBUG_NEW(type_name, obj)
#define _COGL_OBJECT_DEBUG_REF(type_name, obj)
#define _COGL_OBJECT_DEBUG_UNREF(type_name, obj)
#define COGL_OBJECT_DEBUG_FREE(obj)
#endif /* COGL_OBJECT_DEBUG */
#define _COGL_GTYPE_INIT_CLASS(type_name) do { \
_cogl_##type_name##_class.base_class.g_type = cogl_##type_name##_get_gtype (); \
} while (0)
#define COGL_OBJECT_COMMON_DEFINE_WITH_CODE(TypeName, type_name, code) \
\
CoglObjectClass _cogl_##type_name##_class; \
static unsigned long _cogl_object_##type_name##_count; \
\
static inline void \
_cogl_object_##type_name##_inc (void) \
{ \
_cogl_object_##type_name##_count++; \
} \
\
static inline void \
_cogl_object_##type_name##_dec (void) \
{ \
_cogl_object_##type_name##_count--; \
} \
\
static void \
_cogl_object_##type_name##_indirect_free (CoglObject *obj) \
{ \
_cogl_##type_name##_free ((Cogl##TypeName *) obj); \
_cogl_object_##type_name##_dec (); \
} \
\
static void \
_cogl_object_##type_name##_class_init (void) \
{ \
_cogl_object_##type_name##_count = 0; \
\
if (_cogl_debug_instances == NULL) \
_cogl_debug_instances = \
g_hash_table_new (g_str_hash, g_str_equal); \
\
_cogl_##type_name##_class.virt_free = \
_cogl_object_##type_name##_indirect_free; \
_cogl_##type_name##_class.virt_unref = \
_cogl_object_default_unref; \
_cogl_##type_name##_class.name = "Cogl"#TypeName; \
\
g_hash_table_insert (_cogl_debug_instances, \
(void *) _cogl_##type_name##_class.name, \
&_cogl_object_##type_name##_count); \
\
{ code; } \
} \
\
static Cogl##TypeName * \
_cogl_##type_name##_object_new (Cogl##TypeName *new_obj) \
{ \
CoglObject *obj = (CoglObject *)&new_obj->_parent; \
obj->ref_count = 0; \
cogl_object_ref (obj); \
\
obj->klass = &_cogl_##type_name##_class; \
if (!obj->klass->virt_free) \
{ \
_cogl_object_##type_name##_class_init (); \
} \
\
_cogl_object_##type_name##_inc (); \
_COGL_OBJECT_DEBUG_NEW (TypeName, obj); \
return new_obj; \
}
#define COGL_OBJECT_DEFINE_WITH_CODE_GTYPE(TypeName, type_name, code) \
\
COGL_OBJECT_COMMON_DEFINE_WITH_CODE(TypeName, \
type_name, \
do { code; } while (0); \
_COGL_GTYPE_INIT_CLASS (type_name)) \
\
gboolean \
cogl_is_##type_name (void *object) \
{ \
CoglObject *obj = object; \
\
if (object == NULL) \
return FALSE; \
\
return obj->klass == &_cogl_##type_name##_class; \
}
#define COGL_OBJECT_DEFINE_WITH_CODE(TypeName, type_name, code) \
\
COGL_OBJECT_COMMON_DEFINE_WITH_CODE(TypeName, type_name, code) \
\
gboolean \
cogl_is_##type_name (void *object) \
{ \
CoglObject *obj = object; \
\
if (object == NULL) \
return FALSE; \
\
return obj->klass == &_cogl_##type_name##_class; \
}
#define COGL_OBJECT_INTERNAL_DEFINE_WITH_CODE(TypeName, type_name, code) \
\
COGL_OBJECT_COMMON_DEFINE_WITH_CODE(TypeName, type_name, code) \
\
gboolean \
_cogl_is_##type_name (void *object) \
{ \
CoglObject *obj = object; \
\
if (object == NULL) \
return FALSE; \
\
return obj->klass == &_cogl_##type_name##_class; \
}
#define COGL_OBJECT_DEFINE(TypeName, type_name) \
COGL_OBJECT_DEFINE_WITH_CODE_GTYPE (TypeName, type_name, (void) 0)
#define COGL_OBJECT_INTERNAL_DEFINE(TypeName, type_name) \
COGL_OBJECT_INTERNAL_DEFINE_WITH_CODE (TypeName, type_name, (void) 0)
COGL_EXPORT void
_cogl_object_default_unref (void *obj);

View File

@ -1,115 +0,0 @@
/*
* Cogl
*
* A Low Level GPU Graphics and Utilities API
*
* Copyright (C) 2007,2008,2009,2010 Intel Corporation.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Authors:
* Robert Bragg <robert@linux.intel.com>
*/
#include "cogl-config.h"
#include <glib.h>
#include <string.h>
#include "cogl/cogl-util.h"
#include "cogl/cogl-types.h"
#include "cogl/cogl-object-private.h"
#include "cogl/cogl-gtype-private.h"
COGL_GTYPE_DEFINE_BASE_CLASS (Object, object);
void *
cogl_object_ref (void *object)
{
CoglObject *obj = object;
g_return_val_if_fail (object != NULL, NULL);
obj->ref_count++;
return object;
}
void
_cogl_object_default_unref (void *object)
{
CoglObject *obj = object;
g_return_if_fail (object != NULL);
g_return_if_fail (obj->ref_count > 0);
if (--obj->ref_count < 1)
{
void (*free_func)(void *obj);
COGL_OBJECT_DEBUG_FREE (obj);
free_func = obj->klass->virt_free;
free_func (obj);
}
}
void
cogl_object_unref (void *obj)
{
void (* unref_func) (void *);
g_return_if_fail (obj != NULL);
unref_func = ((CoglObject *) obj)->klass->virt_unref;
unref_func (obj);
}
void
cogl_debug_object_foreach_type (CoglDebugObjectForeachTypeCallback func,
void *user_data)
{
GHashTableIter iter;
unsigned long *instance_count;
CoglDebugObjectTypeInfo info;
g_hash_table_iter_init (&iter, _cogl_debug_instances);
while (g_hash_table_iter_next (&iter,
(void *) &info.name,
(void *) &instance_count))
{
info.instance_count = *instance_count;
func (&info, user_data);
}
}
static void
print_instances_cb (const CoglDebugObjectTypeInfo *info,
void *user_data)
{
g_print ("\t%s: %lu\n", info->name, info->instance_count);
}
void
cogl_debug_object_print_instances (void)
{
g_print ("Cogl instances:\n");
cogl_debug_object_foreach_type (print_instances_cb, NULL);
}

View File

@ -1,141 +0,0 @@
/*
* Cogl
*
* A Low Level GPU Graphics and Utilities API
*
* Copyright (C) 2009,2010 Intel Corporation.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
*
*/
#pragma once
#include "cogl/cogl-types.h"
#include <glib-object.h>
G_BEGIN_DECLS
typedef struct _CoglObject CoglObject;
#define COGL_OBJECT(X) ((CoglObject *)X)
/**
* CoglObject: (ref-func cogl_object_ref) (unref-func cogl_object_unref)
* (set-value-func cogl_object_value_set_object)
* (get-value-func cogl_object_value_get_object)
*/
/**
* cogl_object_get_gtype:
*
* Returns: a #GType that can be used with the GLib type system.
*/
COGL_EXPORT
GType cogl_object_get_gtype (void);
/**
* cogl_object_ref: (skip)
* @object: a #CoglObject
*
* Increases the reference count of @object by 1
*
* Returns: the @object, with its reference count increased
*/
COGL_EXPORT void *
cogl_object_ref (void *object);
/**
* cogl_object_unref: (skip)
* @object: a #CoglObject
*
* Drecreases the reference count of @object by 1; if the reference
* count reaches 0, the resources allocated by @object will be freed
*/
COGL_EXPORT void
cogl_object_unref (void *object);
/**
* cogl_clear_object: (skip)
* @object_ptr: a pointer to a #CoglObject reference
*
* Clears a reference to a #CoglObject.
*
* @object_ptr must not be %NULL.
*
* If the reference is %NULL then this function does nothing.
* Otherwise, the reference count of the object is decreased using
* cogl_object_unref() and the pointer is set to %NULL.
*/
#define cogl_clear_object(object_ptr) g_clear_pointer ((object_ptr), cogl_object_unref)
/**
* CoglDebugObjectTypeInfo:
* @name: A human readable name for the type.
* @instance_count: The number of objects of this type that are
* currently in use
*
* This struct is used to pass information to the callback when
* cogl_debug_object_foreach_type() is called.
*/
typedef struct {
const char *name;
unsigned long instance_count;
} CoglDebugObjectTypeInfo;
/**
* CoglDebugObjectForeachTypeCallback:
* @info: A pointer to a struct containing information about the type.
*
* A callback function to use for cogl_debug_object_foreach_type().
*/
typedef void
(* CoglDebugObjectForeachTypeCallback) (const CoglDebugObjectTypeInfo *info,
void *user_data);
/**
* cogl_debug_object_foreach_type:
* @func: (scope call): A callback function for each type
* @user_data: (closure): A pointer to pass to @func
*
* Invokes @func once for each type of object that Cogl uses and
* passes a count of the number of objects for that type. This is
* intended to be used solely for debugging purposes to track down
* issues with objects leaking.
*/
COGL_EXPORT void
cogl_debug_object_foreach_type (CoglDebugObjectForeachTypeCallback func,
void *user_data);
/**
* cogl_debug_object_print_instances:
*
* Prints a list of all the object types that Cogl uses along with the
* number of objects of that type that are currently in use. This is
* intended to be used solely for debugging purposes to track down
* issues with objects leaking.
*/
COGL_EXPORT void
cogl_debug_object_print_instances (void);
G_END_DECLS

View File

@ -38,11 +38,9 @@
#include "cogl/cogl-framebuffer-private.h" #include "cogl/cogl-framebuffer-private.h"
#include "cogl/cogl-onscreen-template-private.h" #include "cogl/cogl-onscreen-template-private.h"
#include "cogl/cogl-context-private.h" #include "cogl/cogl-context-private.h"
#include "cogl/cogl-object-private.h"
#include "cogl/cogl1-context.h" #include "cogl/cogl1-context.h"
#include "cogl/cogl-closure-list-private.h" #include "cogl/cogl-closure-list-private.h"
#include "cogl/cogl-poll-private.h" #include "cogl/cogl-poll-private.h"
#include "cogl/cogl-gtype-private.h"
typedef struct _CoglOnscreenPrivate typedef struct _CoglOnscreenPrivate
{ {

View File

@ -40,7 +40,6 @@
#include "cogl/cogl-context.h" #include "cogl/cogl-context.h"
#include "cogl/cogl-framebuffer.h" #include "cogl/cogl-framebuffer.h"
#include "cogl/cogl-frame-info.h" #include "cogl/cogl-frame-info.h"
#include "cogl/cogl-object.h"
#include <glib-object.h> #include <glib-object.h>

View File

@ -34,7 +34,6 @@
#pragma once #pragma once
#include "cogl/cogl-object-private.h"
#include "cogl/cogl-buffer-private.h" #include "cogl/cogl-buffer-private.h"
#include <glib.h> #include <glib.h>

View File

@ -33,14 +33,13 @@
#pragma once #pragma once
#include "cogl/cogl-object-private.h"
#include "cogl/cogl-attribute-buffer-private.h" #include "cogl/cogl-attribute-buffer-private.h"
#include "cogl/cogl-attribute-private.h" #include "cogl/cogl-attribute-private.h"
#include "cogl/cogl-framebuffer.h" #include "cogl/cogl-framebuffer.h"
struct _CoglPrimitive struct _CoglPrimitive
{ {
CoglObject _parent; GObject parent_instance;
CoglIndices *indices; CoglIndices *indices;
CoglVerticesMode mode; CoglVerticesMode mode;
@ -49,11 +48,8 @@ struct _CoglPrimitive
int immutable_ref; int immutable_ref;
CoglAttribute **attributes; GPtrArray *attributes;
int n_attributes; int n_attributes;
int n_embedded_attributes;
CoglAttribute *embedded_attribute;
}; };
CoglPrimitive * CoglPrimitive *

View File

@ -34,20 +34,45 @@
#include "cogl-config.h" #include "cogl-config.h"
#include "cogl/cogl-util.h" #include "cogl/cogl-util.h"
#include "cogl/cogl-object-private.h"
#include "cogl/cogl-primitive.h" #include "cogl/cogl-primitive.h"
#include "cogl/cogl-primitive-private.h" #include "cogl/cogl-primitive-private.h"
#include "cogl/cogl-attribute-private.h" #include "cogl/cogl-attribute-private.h"
#include "cogl/cogl-framebuffer-private.h" #include "cogl/cogl-framebuffer-private.h"
#include "cogl/cogl-gtype-private.h"
#include <stdarg.h> #include <stdarg.h>
#include <string.h> #include <string.h>
static void _cogl_primitive_free (CoglPrimitive *primitive); G_DEFINE_TYPE (CoglPrimitive, cogl_primitive, G_TYPE_OBJECT);
COGL_OBJECT_DEFINE (Primitive, primitive); static void
COGL_GTYPE_DEFINE_CLASS (Primitive, primitive); cogl_primitive_dispose (GObject *object)
{
CoglPrimitive *primitive = COGL_PRIMITIVE (object);
g_ptr_array_free (primitive->attributes, TRUE);
if (primitive->indices)
g_object_unref (primitive->indices);
G_OBJECT_CLASS (cogl_primitive_parent_class)->dispose (object);
}
static void
cogl_primitive_class_init (CoglPrimitiveClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->dispose = cogl_primitive_dispose;
}
static void
cogl_primitive_init (CoglPrimitive *primitive)
{
primitive->first_vertex = 0;
primitive->immutable_ref = 0;
primitive->indices = NULL;
primitive->attributes = g_ptr_array_new_with_free_func (g_object_unref);
}
CoglPrimitive * CoglPrimitive *
cogl_primitive_new_with_attributes (CoglVerticesMode mode, cogl_primitive_new_with_attributes (CoglVerticesMode mode,
@ -58,17 +83,11 @@ cogl_primitive_new_with_attributes (CoglVerticesMode mode,
CoglPrimitive *primitive; CoglPrimitive *primitive;
int i; int i;
primitive = g_malloc0 (sizeof (CoglPrimitive) + primitive = g_object_new (COGL_TYPE_PRIMITIVE, NULL);
sizeof (CoglAttribute *) * (n_attributes - 1));
primitive->mode = mode; primitive->mode = mode;
primitive->first_vertex = 0;
primitive->n_vertices = n_vertices; primitive->n_vertices = n_vertices;
primitive->indices = NULL;
primitive->immutable_ref = 0;
primitive->n_attributes = n_attributes; primitive->n_attributes = n_attributes;
primitive->n_embedded_attributes = n_attributes;
primitive->attributes = &primitive->embedded_attribute;
for (i = 0; i < n_attributes; i++) for (i = 0; i < n_attributes; i++)
{ {
CoglAttribute *attribute = attributes[i]; CoglAttribute *attribute = attributes[i];
@ -76,10 +95,10 @@ cogl_primitive_new_with_attributes (CoglVerticesMode mode,
g_return_val_if_fail (COGL_IS_ATTRIBUTE (attribute), NULL); g_return_val_if_fail (COGL_IS_ATTRIBUTE (attribute), NULL);
primitive->attributes[i] = attribute; g_ptr_array_add (primitive->attributes, attribute);
} }
return _cogl_primitive_object_new (primitive); return primitive;
} }
/* This is just an internal convenience wrapper around /* This is just an internal convenience wrapper around
@ -375,23 +394,6 @@ cogl_primitive_new_p3t2c4 (CoglContext *ctx,
3); 3);
} }
static void
_cogl_primitive_free (CoglPrimitive *primitive)
{
int i;
for (i = 0; i < primitive->n_attributes; i++)
g_object_unref (primitive->attributes[i]);
if (primitive->attributes != &primitive->embedded_attribute)
g_free (primitive->attributes);
if (primitive->indices)
g_object_unref (primitive->indices);
g_free (primitive);
}
static void static void
warn_about_midscene_changes (void) warn_about_midscene_changes (void)
{ {
@ -404,61 +406,10 @@ warn_about_midscene_changes (void)
} }
} }
void
cogl_primitive_set_attributes (CoglPrimitive *primitive,
CoglAttribute **attributes,
int n_attributes)
{
int i;
g_return_if_fail (cogl_is_primitive (primitive));
if (G_UNLIKELY (primitive->immutable_ref))
{
warn_about_midscene_changes ();
return;
}
/* NB: we don't unref the previous attributes before refing the new
* in case we would end up releasing the last reference for an
* attribute that's actually in the new list too. */
for (i = 0; i < n_attributes; i++)
{
g_return_if_fail (COGL_IS_ATTRIBUTE (attributes[i]));
g_object_ref (attributes[i]);
}
for (i = 0; i < primitive->n_attributes; i++)
g_object_unref (primitive->attributes[i]);
/* First try to use the embedded storage associated with the
* primitive, else fallback to slice allocating separate storage for
* the attribute pointers... */
if (n_attributes <= primitive->n_embedded_attributes)
{
if (primitive->attributes != &primitive->embedded_attribute)
g_free (primitive->attributes);
primitive->attributes = &primitive->embedded_attribute;
}
else
{
if (primitive->attributes != &primitive->embedded_attribute)
g_free (primitive->attributes);
primitive->attributes =
g_malloc0 (sizeof (CoglAttribute *) * n_attributes);
}
memcpy (primitive->attributes, attributes,
sizeof (CoglAttribute *) * n_attributes);
primitive->n_attributes = n_attributes;
}
int int
cogl_primitive_get_first_vertex (CoglPrimitive *primitive) cogl_primitive_get_first_vertex (CoglPrimitive *primitive)
{ {
g_return_val_if_fail (cogl_is_primitive (primitive), 0); g_return_val_if_fail (COGL_IS_PRIMITIVE (primitive), 0);
return primitive->first_vertex; return primitive->first_vertex;
} }
@ -467,7 +418,7 @@ void
cogl_primitive_set_first_vertex (CoglPrimitive *primitive, cogl_primitive_set_first_vertex (CoglPrimitive *primitive,
int first_vertex) int first_vertex)
{ {
g_return_if_fail (cogl_is_primitive (primitive)); g_return_if_fail (COGL_IS_PRIMITIVE (primitive));
if (G_UNLIKELY (primitive->immutable_ref)) if (G_UNLIKELY (primitive->immutable_ref))
{ {
@ -481,7 +432,7 @@ cogl_primitive_set_first_vertex (CoglPrimitive *primitive,
int int
cogl_primitive_get_n_vertices (CoglPrimitive *primitive) cogl_primitive_get_n_vertices (CoglPrimitive *primitive)
{ {
g_return_val_if_fail (cogl_is_primitive (primitive), 0); g_return_val_if_fail (COGL_IS_PRIMITIVE (primitive), 0);
return primitive->n_vertices; return primitive->n_vertices;
} }
@ -490,7 +441,7 @@ void
cogl_primitive_set_n_vertices (CoglPrimitive *primitive, cogl_primitive_set_n_vertices (CoglPrimitive *primitive,
int n_vertices) int n_vertices)
{ {
g_return_if_fail (cogl_is_primitive (primitive)); g_return_if_fail (COGL_IS_PRIMITIVE (primitive));
primitive->n_vertices = n_vertices; primitive->n_vertices = n_vertices;
} }
@ -498,7 +449,7 @@ cogl_primitive_set_n_vertices (CoglPrimitive *primitive,
CoglVerticesMode CoglVerticesMode
cogl_primitive_get_mode (CoglPrimitive *primitive) cogl_primitive_get_mode (CoglPrimitive *primitive)
{ {
g_return_val_if_fail (cogl_is_primitive (primitive), 0); g_return_val_if_fail (COGL_IS_PRIMITIVE (primitive), 0);
return primitive->mode; return primitive->mode;
} }
@ -507,7 +458,7 @@ void
cogl_primitive_set_mode (CoglPrimitive *primitive, cogl_primitive_set_mode (CoglPrimitive *primitive,
CoglVerticesMode mode) CoglVerticesMode mode)
{ {
g_return_if_fail (cogl_is_primitive (primitive)); g_return_if_fail (COGL_IS_PRIMITIVE (primitive));
if (G_UNLIKELY (primitive->immutable_ref)) if (G_UNLIKELY (primitive->immutable_ref))
{ {
@ -523,7 +474,7 @@ cogl_primitive_set_indices (CoglPrimitive *primitive,
CoglIndices *indices, CoglIndices *indices,
int n_indices) int n_indices)
{ {
g_return_if_fail (cogl_is_primitive (primitive)); g_return_if_fail (COGL_IS_PRIMITIVE (primitive));
if (G_UNLIKELY (primitive->immutable_ref)) if (G_UNLIKELY (primitive->immutable_ref))
{ {
@ -552,7 +503,7 @@ cogl_primitive_copy (CoglPrimitive *primitive)
copy = cogl_primitive_new_with_attributes (primitive->mode, copy = cogl_primitive_new_with_attributes (primitive->mode,
primitive->n_vertices, primitive->n_vertices,
primitive->attributes, (CoglAttribute **)primitive->attributes->pdata,
primitive->n_attributes); primitive->n_attributes);
cogl_primitive_set_indices (copy, primitive->indices, primitive->n_vertices); cogl_primitive_set_indices (copy, primitive->indices, primitive->n_vertices);
@ -566,12 +517,12 @@ _cogl_primitive_immutable_ref (CoglPrimitive *primitive)
{ {
int i; int i;
g_return_val_if_fail (cogl_is_primitive (primitive), NULL); g_return_val_if_fail (COGL_IS_PRIMITIVE (primitive), NULL);
primitive->immutable_ref++; primitive->immutable_ref++;
for (i = 0; i < primitive->n_attributes; i++) for (i = 0; i < primitive->n_attributes; i++)
_cogl_attribute_immutable_ref (primitive->attributes[i]); _cogl_attribute_immutable_ref (primitive->attributes->pdata[i]);
return primitive; return primitive;
} }
@ -581,13 +532,13 @@ _cogl_primitive_immutable_unref (CoglPrimitive *primitive)
{ {
int i; int i;
g_return_if_fail (cogl_is_primitive (primitive)); g_return_if_fail (COGL_IS_PRIMITIVE (primitive));
g_return_if_fail (primitive->immutable_ref > 0); g_return_if_fail (primitive->immutable_ref > 0);
primitive->immutable_ref--; primitive->immutable_ref--;
for (i = 0; i < primitive->n_attributes; i++) for (i = 0; i < primitive->n_attributes; i++)
_cogl_attribute_immutable_unref (primitive->attributes[i]); _cogl_attribute_immutable_unref (primitive->attributes->pdata[i]);
} }
void void
@ -596,9 +547,8 @@ cogl_primitive_foreach_attribute (CoglPrimitive *primitive,
void *user_data) void *user_data)
{ {
int i; int i;
for (i = 0; i < primitive->n_attributes; i++) for (i = 0; i < primitive->n_attributes; i++)
if (!callback (primitive, primitive->attributes[i], user_data)) if (!callback (primitive, primitive->attributes->pdata[i], user_data))
break; break;
} }
@ -615,7 +565,7 @@ _cogl_primitive_draw (CoglPrimitive *primitive,
primitive->first_vertex, primitive->first_vertex,
primitive->n_vertices, primitive->n_vertices,
primitive->indices, primitive->indices,
primitive->attributes, (CoglAttribute **) primitive->attributes->pdata,
primitive->n_attributes, primitive->n_attributes,
flags); flags);
else else
@ -624,7 +574,7 @@ _cogl_primitive_draw (CoglPrimitive *primitive,
primitive->mode, primitive->mode,
primitive->first_vertex, primitive->first_vertex,
primitive->n_vertices, primitive->n_vertices,
primitive->attributes, (CoglAttribute **) primitive->attributes->pdata,
primitive->n_attributes, primitive->n_attributes,
flags); flags);
} }

View File

@ -51,27 +51,19 @@ typedef struct _CoglPrimitive CoglPrimitive;
G_BEGIN_DECLS G_BEGIN_DECLS
/** /**
* SECTION:cogl-primitive * CoglPrimitive:
* @short_description: Functions for creating, manipulating and drawing
* primitives
* *
* FIXME *Functions for creating, manipulating and drawing primitives
*/ */
/** #define COGL_TYPE_PRIMITIVE (cogl_primitive_get_type ())
* CoglPrimitive: (ref-func cogl_object_ref) (unref-func cogl_object_unref)
* (set-value-func cogl_object_value_set_object)
* (get-value-func cogl_object_value_get_object)
*/
/**
* cogl_primitive_get_gtype:
*
* Returns: a #GType that can be used with the GLib type system.
*/
COGL_EXPORT COGL_EXPORT
GType cogl_primitive_get_gtype (void); G_DECLARE_FINAL_TYPE (CoglPrimitive,
cogl_primitive,
COGL,
PRIMITIVE,
GObject)
/** /**
* CoglVertexP2: * CoglVertexP2:
* @x: The x component of a position attribute * @x: The x component of a position attribute
@ -293,7 +285,7 @@ cogl_primitive_new_with_attributes (CoglVerticesMode mode,
* </note> * </note>
* *
* Return value: (transfer full): A newly allocated #CoglPrimitive * Return value: (transfer full): A newly allocated #CoglPrimitive
* with a reference of 1. This can be freed using cogl_object_unref(). * with a reference of 1. This can be freed using g_object_unref().
*/ */
COGL_EXPORT CoglPrimitive * COGL_EXPORT CoglPrimitive *
cogl_primitive_new_p2 (CoglContext *context, cogl_primitive_new_p2 (CoglContext *context,
@ -343,7 +335,7 @@ cogl_primitive_new_p2 (CoglContext *context,
* </note> * </note>
* *
* Return value: (transfer full): A newly allocated #CoglPrimitive * Return value: (transfer full): A newly allocated #CoglPrimitive
* with a reference of 1. This can be freed using cogl_object_unref(). * with a reference of 1. This can be freed using g_object_unref().
*/ */
COGL_EXPORT CoglPrimitive * COGL_EXPORT CoglPrimitive *
cogl_primitive_new_p3 (CoglContext *context, cogl_primitive_new_p3 (CoglContext *context,
@ -395,7 +387,7 @@ cogl_primitive_new_p3 (CoglContext *context,
* </note> * </note>
* *
* Return value: (transfer full): A newly allocated #CoglPrimitive * Return value: (transfer full): A newly allocated #CoglPrimitive
* with a reference of 1. This can be freed using cogl_object_unref(). * with a reference of 1. This can be freed using g_object_unref().
*/ */
COGL_EXPORT CoglPrimitive * COGL_EXPORT CoglPrimitive *
cogl_primitive_new_p2c4 (CoglContext *context, cogl_primitive_new_p2c4 (CoglContext *context,
@ -447,7 +439,7 @@ cogl_primitive_new_p2c4 (CoglContext *context,
* </note> * </note>
* *
* Return value: (transfer full): A newly allocated #CoglPrimitive * Return value: (transfer full): A newly allocated #CoglPrimitive
* with a reference of 1. This can be freed using cogl_object_unref(). * with a reference of 1. This can be freed using g_object_unref().
*/ */
COGL_EXPORT CoglPrimitive * COGL_EXPORT CoglPrimitive *
cogl_primitive_new_p3c4 (CoglContext *context, cogl_primitive_new_p3c4 (CoglContext *context,
@ -499,7 +491,7 @@ cogl_primitive_new_p3c4 (CoglContext *context,
* </note> * </note>
* *
* Return value: (transfer full): A newly allocated #CoglPrimitive * Return value: (transfer full): A newly allocated #CoglPrimitive
* with a reference of 1. This can be freed using cogl_object_unref(). * with a reference of 1. This can be freed using g_object_unref().
*/ */
COGL_EXPORT CoglPrimitive * COGL_EXPORT CoglPrimitive *
cogl_primitive_new_p2t2 (CoglContext *context, cogl_primitive_new_p2t2 (CoglContext *context,
@ -551,7 +543,7 @@ cogl_primitive_new_p2t2 (CoglContext *context,
* </note> * </note>
* *
* Return value: (transfer full): A newly allocated #CoglPrimitive * Return value: (transfer full): A newly allocated #CoglPrimitive
* with a reference of 1. This can be freed using cogl_object_unref(). * with a reference of 1. This can be freed using g_object_unref().
*/ */
COGL_EXPORT CoglPrimitive * COGL_EXPORT CoglPrimitive *
cogl_primitive_new_p3t2 (CoglContext *context, cogl_primitive_new_p3t2 (CoglContext *context,
@ -603,7 +595,7 @@ cogl_primitive_new_p3t2 (CoglContext *context,
* </note> * </note>
* *
* Return value: (transfer full): A newly allocated #CoglPrimitive * Return value: (transfer full): A newly allocated #CoglPrimitive
* with a reference of 1. This can be freed using cogl_object_unref(). * with a reference of 1. This can be freed using g_object_unref().
*/ */
COGL_EXPORT CoglPrimitive * COGL_EXPORT CoglPrimitive *
cogl_primitive_new_p2t2c4 (CoglContext *context, cogl_primitive_new_p2t2c4 (CoglContext *context,
@ -655,7 +647,7 @@ cogl_primitive_new_p2t2c4 (CoglContext *context,
* </note> * </note>
* *
* Return value: (transfer full): A newly allocated #CoglPrimitive * Return value: (transfer full): A newly allocated #CoglPrimitive
* with a reference of 1. This can be freed using cogl_object_unref(). * with a reference of 1. This can be freed using g_object_unref().
*/ */
COGL_EXPORT CoglPrimitive * COGL_EXPORT CoglPrimitive *
cogl_primitive_new_p3t2c4 (CoglContext *context, cogl_primitive_new_p3t2c4 (CoglContext *context,
@ -717,19 +709,6 @@ COGL_EXPORT void
cogl_primitive_set_mode (CoglPrimitive *primitive, cogl_primitive_set_mode (CoglPrimitive *primitive,
CoglVerticesMode mode); CoglVerticesMode mode);
/**
* cogl_primitive_set_attributes: (skip)
* @primitive: A #CoglPrimitive object
* @attributes: an array of #CoglAttribute pointers
* @n_attributes: the number of elements in @attributes
*
* Replaces all the attributes of the given #CoglPrimitive object.
*/
COGL_EXPORT void
cogl_primitive_set_attributes (CoglPrimitive *primitive,
CoglAttribute **attributes,
int n_attributes);
/** /**
* cogl_primitive_set_indices: (skip) * cogl_primitive_set_indices: (skip)
* @primitive: A #CoglPrimitive * @primitive: A #CoglPrimitive
@ -783,18 +762,6 @@ cogl_primitive_get_indices (CoglPrimitive *primitive);
COGL_EXPORT CoglPrimitive * COGL_EXPORT CoglPrimitive *
cogl_primitive_copy (CoglPrimitive *primitive); cogl_primitive_copy (CoglPrimitive *primitive);
/**
* cogl_is_primitive:
* @object: A #CoglObject
*
* Gets whether the given object references a #CoglPrimitive.
*
* Returns: %TRUE if the @object references a #CoglPrimitive,
* %FALSE otherwise
*/
COGL_EXPORT gboolean
cogl_is_primitive (void *object);
/** /**
* CoglPrimitiveAttributeCallback: * CoglPrimitiveAttributeCallback:
* @primitive: The #CoglPrimitive whose attributes are being iterated * @primitive: The #CoglPrimitive whose attributes are being iterated

View File

@ -36,6 +36,8 @@
G_BEGIN_DECLS G_BEGIN_DECLS
#define I_(str) (g_intern_static_string ((str)))
typedef enum typedef enum
{ {
COGL_PRIVATE_FEATURE_TEXTURE_2D_FROM_EGL_IMAGE, COGL_PRIVATE_FEATURE_TEXTURE_2D_FROM_EGL_IMAGE,

View File

@ -30,7 +30,6 @@
#pragma once #pragma once
#include "cogl/cogl-object-private.h"
#include "cogl/cogl-pipeline-layer-state.h" #include "cogl/cogl-pipeline-layer-state.h"
typedef struct _CoglSpan typedef struct _CoglSpan

View File

@ -32,7 +32,6 @@
#include <X11/Xutil.h> #include <X11/Xutil.h>
#include "cogl/cogl-object-private.h"
#include "cogl/cogl-x11-renderer-private.h" #include "cogl/cogl-x11-renderer-private.h"
#include "cogl/cogl-context.h" #include "cogl/cogl-context.h"
#include "cogl/cogl-output.h" #include "cogl/cogl-output.h"

View File

@ -33,7 +33,6 @@
#include "cogl/cogl-xlib-renderer.h" #include "cogl/cogl-xlib-renderer.h"
#include "cogl/cogl-util.h" #include "cogl/cogl-util.h"
#include "cogl/cogl-object.h"
#include "cogl/cogl-output-private.h" #include "cogl/cogl-output-private.h"
#include "cogl/cogl-renderer-private.h" #include "cogl/cogl-renderer-private.h"

View File

@ -56,7 +56,6 @@
#include "cogl/cogl-defines.h" #include "cogl/cogl-defines.h"
#include "cogl/cogl-macros.h" #include "cogl/cogl-macros.h"
#include "cogl/cogl-object.h"
#include "cogl/cogl1-context.h" #include "cogl/cogl1-context.h"
#include "cogl/cogl-bitmap.h" #include "cogl/cogl-bitmap.h"
#include "cogl/cogl-color.h" #include "cogl/cogl-color.h"

View File

@ -37,7 +37,6 @@
#include "cogl/cogl-buffer-private.h" #include "cogl/cogl-buffer-private.h"
#include "cogl/cogl-pixel-buffer.h" #include "cogl/cogl-pixel-buffer.h"
#include "cogl/cogl-context-private.h" #include "cogl/cogl-context-private.h"
#include "cogl/cogl-gtype-private.h"
#include "cogl/driver/gl/cogl-buffer-gl-private.h" #include "cogl/driver/gl/cogl-buffer-gl-private.h"
#include "cogl/driver/gl/cogl-bitmap-gl-private.h" #include "cogl/driver/gl/cogl-bitmap-gl-private.h"

View File

@ -46,7 +46,6 @@
#include "cogl/driver/gl/cogl-pipeline-opengl-private.h" #include "cogl/driver/gl/cogl-pipeline-opengl-private.h"
#include "cogl/cogl-context-private.h" #include "cogl/cogl-context-private.h"
#include "cogl/cogl-object-private.h"
#include "cogl/cogl-pipeline-cache.h" #include "cogl/cogl-pipeline-cache.h"
#include "cogl/driver/gl/cogl-pipeline-fragend-glsl-private.h" #include "cogl/driver/gl/cogl-pipeline-fragend-glsl-private.h"
#include "deprecated/cogl-shader-private.h" #include "deprecated/cogl-shader-private.h"

View File

@ -43,7 +43,6 @@
#include "cogl/driver/gl/cogl-pipeline-opengl-private.h" #include "cogl/driver/gl/cogl-pipeline-opengl-private.h"
#include "cogl/cogl-context-private.h" #include "cogl/cogl-context-private.h"
#include "cogl/cogl-object-private.h"
#include "cogl/cogl-pipeline-cache.h" #include "cogl/cogl-pipeline-cache.h"
#include "cogl/cogl-pipeline-state-private.h" #include "cogl/cogl-pipeline-state-private.h"
#include "cogl/cogl-attribute-private.h" #include "cogl/cogl-attribute-private.h"

View File

@ -41,7 +41,6 @@
#include "cogl/driver/gl/cogl-pipeline-opengl-private.h" #include "cogl/driver/gl/cogl-pipeline-opengl-private.h"
#include "cogl/cogl-context-private.h" #include "cogl/cogl-context-private.h"
#include "cogl/cogl-object-private.h"
#include "cogl/cogl-pipeline-state-private.h" #include "cogl/cogl-pipeline-state-private.h"
#include "cogl/cogl-glsl-shader-boilerplate.h" #include "cogl/cogl-glsl-shader-boilerplate.h"
#include "cogl/driver/gl/cogl-pipeline-vertend-glsl-private.h" #include "cogl/driver/gl/cogl-pipeline-vertend-glsl-private.h"

View File

@ -42,7 +42,6 @@
#include "cogl/cogl-texture-private.h" #include "cogl/cogl-texture-private.h"
#include "cogl/cogl-pipeline.h" #include "cogl/cogl-pipeline.h"
#include "cogl/cogl-context-private.h" #include "cogl/cogl-context-private.h"
#include "cogl/cogl-object-private.h"
#include "cogl/driver/gl/cogl-pipeline-opengl-private.h" #include "cogl/driver/gl/cogl-pipeline-opengl-private.h"
#include "cogl/driver/gl/cogl-util-gl-private.h" #include "cogl/driver/gl/cogl-util-gl-private.h"
#include "cogl/driver/gl/cogl-texture-gl-private.h" #include "cogl/driver/gl/cogl-texture-gl-private.h"

View File

@ -42,7 +42,6 @@
#include "cogl/cogl-texture-private.h" #include "cogl/cogl-texture-private.h"
#include "cogl/cogl-pipeline.h" #include "cogl/cogl-pipeline.h"
#include "cogl/cogl-context-private.h" #include "cogl/cogl-context-private.h"
#include "cogl/cogl-object-private.h"
#include "cogl/driver/gl/cogl-pipeline-opengl-private.h" #include "cogl/driver/gl/cogl-pipeline-opengl-private.h"
#include "cogl/driver/gl/cogl-util-gl-private.h" #include "cogl/driver/gl/cogl-util-gl-private.h"
#include "cogl/driver/gl/cogl-texture-gl-private.h" #include "cogl/driver/gl/cogl-texture-gl-private.h"

View File

@ -70,7 +70,6 @@ cogl_headers = [
'cogl-context.h', 'cogl-context.h',
'cogl-frame-info.h', 'cogl-frame-info.h',
'cogl-framebuffer.h', 'cogl-framebuffer.h',
'cogl-object.h',
'cogl-offscreen.h', 'cogl-offscreen.h',
'cogl-onscreen.h', 'cogl-onscreen.h',
'cogl-pipeline.h', 'cogl-pipeline.h',
@ -109,7 +108,6 @@ cogl_nonintrospected_headers = [
'cogl-pixel-buffer.h', 'cogl-pixel-buffer.h',
'cogl-macros.h', 'cogl-macros.h',
'cogl-fence.h', 'cogl-fence.h',
'cogl-gtype-private.h',
'cogl-glib-source.h', 'cogl-glib-source.h',
'cogl-scanout.h', 'cogl-scanout.h',
'cogl-graphene.h', 'cogl-graphene.h',
@ -219,9 +217,6 @@ cogl_sources = [
'cogl-driver.h', 'cogl-driver.h',
'cogl.c', 'cogl.c',
'cogl-pixel-format.c', 'cogl-pixel-format.c',
'cogl-object-private.h',
'cogl-object.h',
'cogl-object.c',
'cogl-util.h', 'cogl-util.h',
'cogl-util.c', 'cogl-util.c',
'cogl-bitmap-private.h', 'cogl-bitmap-private.h',
@ -319,8 +314,6 @@ cogl_sources = [
'cogl-flags.h', 'cogl-flags.h',
'cogl-bitmask.h', 'cogl-bitmask.h',
'cogl-bitmask.c', 'cogl-bitmask.c',
'cogl-gtype.c',
'cogl-gtype-private.h',
'cogl-point-in-poly-private.h', 'cogl-point-in-poly-private.h',
'cogl-point-in-poly.c', 'cogl-point-in-poly.c',
'cogl-list.c', 'cogl-list.c',

View File

@ -30,7 +30,6 @@
#pragma once #pragma once
#include "cogl/cogl-object-private.h"
typedef struct _CoglGLXCachedConfig typedef struct _CoglGLXCachedConfig
{ {

View File

@ -32,7 +32,6 @@
#include <gmodule.h> #include <gmodule.h>
#include "cogl/cogl-object-private.h"
#include "cogl/cogl-xlib-renderer-private.h" #include "cogl/cogl-xlib-renderer-private.h"
typedef struct _CoglGLXRenderer typedef struct _CoglGLXRenderer

View File

@ -101,7 +101,7 @@ test_coglbox_fade_texture (CoglFramebuffer *framebuffer,
4, 4,
vertices); vertices);
cogl_primitive_draw (primitive, framebuffer, pipeline); cogl_primitive_draw (primitive, framebuffer, pipeline);
cogl_object_unref (primitive); g_object_unref (primitive);
} }
static void static void
@ -144,7 +144,7 @@ test_coglbox_triangle_texture (CoglFramebuffer *framebuffer,
3, 3,
vertices); vertices);
cogl_primitive_draw (primitive, framebuffer, pipeline); cogl_primitive_draw (primitive, framebuffer, pipeline);
cogl_object_unref (primitive); g_object_unref (primitive);
} }
static void static void

View File

@ -131,7 +131,7 @@ paint_test_backface_culling (TestState *state,
4, 4,
verts); verts);
cogl_primitive_draw (primitive, framebuffer, pipeline); cogl_primitive_draw (primitive, framebuffer, pipeline);
cogl_object_unref (primitive); g_object_unref (primitive);
x1 = x2; x1 = x2;
x2 = x1 + (float)(TEXTURE_RENDER_SIZE); x2 = x1 + (float)(TEXTURE_RENDER_SIZE);
@ -151,7 +151,7 @@ paint_test_backface_culling (TestState *state,
4, 4,
verts); verts);
cogl_primitive_draw (primitive, framebuffer, pipeline); cogl_primitive_draw (primitive, framebuffer, pipeline);
cogl_object_unref (primitive); g_object_unref (primitive);
x1 = x2; x1 = x2;
x2 = x1 + (float)(TEXTURE_RENDER_SIZE); x2 = x1 + (float)(TEXTURE_RENDER_SIZE);

View File

@ -68,7 +68,7 @@ test_float_verts (TestState *state, int offset_x, int offset_y)
attributes, attributes,
2); /* n_attributes */ 2); /* n_attributes */
cogl_primitive_draw (primitive, test_fb, state->pipeline); cogl_primitive_draw (primitive, test_fb, state->pipeline);
cogl_object_unref (primitive); g_object_unref (primitive);
cogl_framebuffer_pop_matrix (test_fb); cogl_framebuffer_pop_matrix (test_fb);
@ -129,7 +129,7 @@ test_byte_verts (TestState *state, int offset_x, int offset_y)
attributes, attributes,
2); /* n_attributes */ 2); /* n_attributes */
cogl_primitive_draw (primitive, test_fb, state->pipeline); cogl_primitive_draw (primitive, test_fb, state->pipeline);
cogl_object_unref (primitive); g_object_unref (primitive);
g_object_unref (attributes[1]); g_object_unref (attributes[1]);
@ -151,7 +151,7 @@ test_byte_verts (TestState *state, int offset_x, int offset_y)
attributes, attributes,
2); /* n_attributes */ 2); /* n_attributes */
cogl_primitive_draw (primitive, test_fb, state->pipeline); cogl_primitive_draw (primitive, test_fb, state->pipeline);
cogl_object_unref (primitive); g_object_unref (primitive);
cogl_framebuffer_pop_matrix (test_fb); cogl_framebuffer_pop_matrix (test_fb);
@ -213,7 +213,7 @@ test_short_verts (TestState *state, int offset_x, int offset_y)
attributes, attributes,
2); /* n_attributes */ 2); /* n_attributes */
cogl_primitive_draw (primitive, test_fb, pipeline); cogl_primitive_draw (primitive, test_fb, pipeline);
cogl_object_unref (primitive); g_object_unref (primitive);
cogl_framebuffer_pop_matrix (test_fb); cogl_framebuffer_pop_matrix (test_fb);
@ -248,7 +248,7 @@ test_short_verts (TestState *state, int offset_x, int offset_y)
attributes, attributes,
1); /* n_attributes */ 1); /* n_attributes */
cogl_primitive_draw (primitive, test_fb, pipeline2); cogl_primitive_draw (primitive, test_fb, pipeline2);
cogl_object_unref (primitive); g_object_unref (primitive);
cogl_framebuffer_pop_matrix (test_fb); cogl_framebuffer_pop_matrix (test_fb);

View File

@ -108,7 +108,7 @@ test_map_buffer_range (void)
tex_coord_attribute, tex_coord_attribute,
NULL); NULL);
cogl_primitive_draw (primitive, test_fb, pipeline); cogl_primitive_draw (primitive, test_fb, pipeline);
cogl_object_unref (primitive); g_object_unref (primitive);
/* Top left pixel should be the one that is replaced to be green */ /* Top left pixel should be the one that is replaced to be green */
test_utils_check_pixel (test_fb, 1, 1, 0x00ff00ff); test_utils_check_pixel (test_fb, 1, 1, 0x00ff00ff);

View File

@ -125,7 +125,7 @@ do_test (const char *attribute_name,
pipeline_setup_func (pipeline); pipeline_setup_func (pipeline);
cogl_primitive_draw (primitive, test_fb, pipeline); cogl_primitive_draw (primitive, test_fb, pipeline);
g_object_unref (pipeline); g_object_unref (pipeline);
cogl_object_unref (primitive); g_object_unref (primitive);
/* Verify all of the points where drawn at the right size */ /* Verify all of the points where drawn at the right size */
for (i = 0; i < N_POINTS; i++) for (i = 0; i < N_POINTS; i++)

View File

@ -82,7 +82,7 @@ test_point_size (void)
cogl_pipeline_set_color4ub (pipeline, 0, 255, 0, 255); cogl_pipeline_set_color4ub (pipeline, 0, 255, 0, 255);
cogl_primitive_draw (prim, test_fb, pipeline); cogl_primitive_draw (prim, test_fb, pipeline);
cogl_object_unref (prim); g_object_unref (prim);
g_object_unref (pipeline); g_object_unref (pipeline);
} }

View File

@ -133,7 +133,7 @@ do_test (gboolean check_orientation,
cogl_primitive_draw (prim, test_fb, solid_pipeline); cogl_primitive_draw (prim, test_fb, solid_pipeline);
cogl_framebuffer_pop_matrix (test_fb); cogl_framebuffer_pop_matrix (test_fb);
cogl_object_unref (prim); g_object_unref (prim);
g_object_unref (solid_pipeline); g_object_unref (solid_pipeline);
g_object_unref (pipeline); g_object_unref (pipeline);
g_object_unref (tex_2d); g_object_unref (tex_2d);

View File

@ -133,7 +133,7 @@ do_test (gboolean check_orientation,
cogl_primitive_draw (prim, test_fb, solid_pipeline); cogl_primitive_draw (prim, test_fb, solid_pipeline);
cogl_framebuffer_pop_matrix (test_fb); cogl_framebuffer_pop_matrix (test_fb);
cogl_object_unref (prim); g_object_unref (prim);
g_object_unref (solid_pipeline); g_object_unref (solid_pipeline);
g_object_unref (pipeline); g_object_unref (pipeline);
g_object_unref (tex_2d); g_object_unref (tex_2d);

View File

@ -199,7 +199,7 @@ test_paint (TestState *state)
test_utils_check_pixel (test_fb, i * 10 + 2, 2, expected_color); test_utils_check_pixel (test_fb, i * 10 + 2, 2, expected_color);
cogl_object_unref (prim); g_object_unref (prim);
} }
g_object_unref (pipeline); g_object_unref (pipeline);
@ -301,8 +301,8 @@ test_copy (TestState *state)
g_assert (cogl_primitive_get_indices (prim_a) == g_assert (cogl_primitive_get_indices (prim_a) ==
cogl_primitive_get_indices (prim_b)); cogl_primitive_get_indices (prim_b));
cogl_object_unref (prim_a); g_object_unref (prim_a);
cogl_object_unref (prim_b); g_object_unref (prim_b);
g_object_unref (indices); g_object_unref (indices);
for (i = 0; i < N_ATTRIBS; i++) for (i = 0; i < N_ATTRIBS; i++)

View File

@ -129,7 +129,7 @@ draw_tests_polygon (TestState *state)
G_N_ELEMENTS (vertices), G_N_ELEMENTS (vertices),
vertices); vertices);
cogl_primitive_draw (primitive, test_fb, pipeline); cogl_primitive_draw (primitive, test_fb, pipeline);
cogl_object_unref (primitive); g_object_unref (primitive);
g_object_unref (pipeline); g_object_unref (pipeline);
cogl_framebuffer_pop_matrix (test_fb); cogl_framebuffer_pop_matrix (test_fb);
} }