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:
parent
b4bd69e4e8
commit
2c4968fb41
@ -3185,7 +3185,7 @@ _clutter_actor_draw_paint_volume_full (ClutterActor *self,
|
||||
"ClutterActor (paint volume outline)");
|
||||
clutter_paint_node_add_primitive (pipeline_node, prim);
|
||||
clutter_paint_node_add_child (node, pipeline_node);
|
||||
cogl_object_unref (prim);
|
||||
g_object_unref (prim);
|
||||
|
||||
if (label)
|
||||
{
|
||||
|
@ -338,8 +338,8 @@ clutter_deform_effect_free_arrays (ClutterDeformEffect *self)
|
||||
ClutterDeformEffectPrivate *priv = self->priv;
|
||||
|
||||
g_clear_object (&priv->buffer);
|
||||
cogl_clear_object (&priv->primitive);
|
||||
cogl_clear_object (&priv->lines_primitive);
|
||||
g_clear_object (&priv->primitive);
|
||||
g_clear_object (&priv->lines_primitive);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -736,7 +736,7 @@ clutter_paint_operation_clear (ClutterPaintOperation *op)
|
||||
|
||||
case PAINT_OP_PRIMITIVE:
|
||||
if (op->op.primitive != NULL)
|
||||
cogl_object_unref (op->op.primitive);
|
||||
g_object_unref (op->op.primitive);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -820,7 +820,7 @@ clutter_paint_op_init_primitive (ClutterPaintOperation *op,
|
||||
clutter_paint_operation_clear (op);
|
||||
|
||||
op->opcode = PAINT_OP_PRIMITIVE;
|
||||
op->op.primitive = cogl_object_ref (primitive);
|
||||
op->op.primitive = g_object_ref (primitive);
|
||||
}
|
||||
|
||||
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.
|
||||
*
|
||||
* 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
|
||||
clutter_paint_node_add_primitive (ClutterPaintNode *node,
|
||||
@ -998,7 +998,7 @@ clutter_paint_node_add_primitive (ClutterPaintNode *node,
|
||||
ClutterPaintOperation operation = PAINT_OP_INIT;
|
||||
|
||||
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);
|
||||
|
||||
|
@ -154,7 +154,7 @@ _cogl_pango_display_list_add_texture (CoglPangoDisplayList *dl,
|
||||
/* Get rid of the vertex buffer so that it will be recreated */
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -463,10 +463,10 @@ _cogl_pango_display_list_node_free (CoglPangoDisplayListNode *node)
|
||||
if (node->d.texture.texture != NULL)
|
||||
g_object_unref (node->d.texture.texture);
|
||||
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)
|
||||
cogl_object_unref (node->d.trapezoid.primitive);
|
||||
g_object_unref (node->d.trapezoid.primitive);
|
||||
|
||||
if (node->pipeline)
|
||||
g_object_unref (node->pipeline);
|
||||
|
@ -30,7 +30,6 @@
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#include "cogl/cogl-object-private.h"
|
||||
#include "cogl/cogl-texture.h"
|
||||
#include "cogl/cogl-framebuffer.h"
|
||||
|
||||
|
@ -245,7 +245,7 @@ _cogl_clip_stack_push_primitive (CoglClipStack *stack,
|
||||
sizeof (CoglClipStackPrimitive),
|
||||
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);
|
||||
|
||||
@ -329,7 +329,7 @@ _cogl_clip_stack_unref (CoglClipStack *entry)
|
||||
CoglClipStackPrimitive *primitive_entry =
|
||||
(CoglClipStackPrimitive *) entry;
|
||||
cogl_matrix_entry_unref (primitive_entry->matrix_entry);
|
||||
cogl_object_unref (primitive_entry->primitive);
|
||||
g_object_unref (primitive_entry->primitive);
|
||||
g_free (entry);
|
||||
break;
|
||||
}
|
||||
|
@ -29,8 +29,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cogl/cogl-object.h"
|
||||
#include "cogl/cogl-list.h"
|
||||
#include "cogl/cogl-macros.h"
|
||||
|
||||
/*
|
||||
* This implements a list of callbacks that can be used a bit like
|
||||
|
@ -31,7 +31,6 @@
|
||||
#include "cogl-config.h"
|
||||
|
||||
#include "cogl/cogl-mutter.h"
|
||||
#include "cogl/cogl-object.h"
|
||||
#include "cogl/cogl-private.h"
|
||||
#include "cogl/cogl-profile.h"
|
||||
#include "cogl/cogl-util.h"
|
||||
@ -46,7 +45,6 @@
|
||||
#include "cogl/cogl-onscreen-private.h"
|
||||
#include "cogl/cogl-attribute-private.h"
|
||||
#include "cogl/cogl1-context.h"
|
||||
#include "cogl/cogl-gtype-private.h"
|
||||
#include "cogl/winsys/cogl-winsys-private.h"
|
||||
|
||||
#include <gio/gio.h>
|
||||
|
@ -32,7 +32,6 @@
|
||||
#include "cogl-config.h"
|
||||
|
||||
#include "cogl/cogl-dma-buf-handle.h"
|
||||
#include "cogl/cogl-object.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <gio/gio.h>
|
||||
|
@ -32,7 +32,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "cogl/cogl-framebuffer-driver.h"
|
||||
#include "cogl/cogl-object-private.h"
|
||||
#include "cogl/cogl-matrix-stack-private.h"
|
||||
#include "cogl/cogl-journal-private.h"
|
||||
#include "cogl/winsys/cogl-winsys-private.h"
|
||||
|
@ -37,7 +37,6 @@
|
||||
#include "cogl/cogl-context-private.h"
|
||||
#include "cogl/cogl-display-private.h"
|
||||
#include "cogl/cogl-renderer-private.h"
|
||||
#include "cogl/cogl-object-private.h"
|
||||
#include "cogl/cogl-util.h"
|
||||
#include "cogl/cogl-texture-private.h"
|
||||
#include "cogl/cogl-framebuffer-private.h"
|
||||
@ -50,7 +49,6 @@
|
||||
#include "cogl/cogl1-context.h"
|
||||
#include "cogl/cogl-private.h"
|
||||
#include "cogl/cogl-primitives-private.h"
|
||||
#include "cogl/cogl-gtype-private.h"
|
||||
#include "cogl/winsys/cogl-winsys-private.h"
|
||||
|
||||
enum
|
||||
|
@ -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);
|
@ -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;
|
||||
}
|
@ -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);
|
@ -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);
|
||||
}
|
@ -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
|
@ -38,11 +38,9 @@
|
||||
#include "cogl/cogl-framebuffer-private.h"
|
||||
#include "cogl/cogl-onscreen-template-private.h"
|
||||
#include "cogl/cogl-context-private.h"
|
||||
#include "cogl/cogl-object-private.h"
|
||||
#include "cogl/cogl1-context.h"
|
||||
#include "cogl/cogl-closure-list-private.h"
|
||||
#include "cogl/cogl-poll-private.h"
|
||||
#include "cogl/cogl-gtype-private.h"
|
||||
|
||||
typedef struct _CoglOnscreenPrivate
|
||||
{
|
||||
|
@ -40,7 +40,6 @@
|
||||
#include "cogl/cogl-context.h"
|
||||
#include "cogl/cogl-framebuffer.h"
|
||||
#include "cogl/cogl-frame-info.h"
|
||||
#include "cogl/cogl-object.h"
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
|
@ -34,7 +34,6 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cogl/cogl-object-private.h"
|
||||
#include "cogl/cogl-buffer-private.h"
|
||||
|
||||
#include <glib.h>
|
||||
|
@ -33,14 +33,13 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cogl/cogl-object-private.h"
|
||||
#include "cogl/cogl-attribute-buffer-private.h"
|
||||
#include "cogl/cogl-attribute-private.h"
|
||||
#include "cogl/cogl-framebuffer.h"
|
||||
|
||||
struct _CoglPrimitive
|
||||
{
|
||||
CoglObject _parent;
|
||||
GObject parent_instance;
|
||||
|
||||
CoglIndices *indices;
|
||||
CoglVerticesMode mode;
|
||||
@ -49,11 +48,8 @@ struct _CoglPrimitive
|
||||
|
||||
int immutable_ref;
|
||||
|
||||
CoglAttribute **attributes;
|
||||
GPtrArray *attributes;
|
||||
int n_attributes;
|
||||
|
||||
int n_embedded_attributes;
|
||||
CoglAttribute *embedded_attribute;
|
||||
};
|
||||
|
||||
CoglPrimitive *
|
||||
|
@ -34,20 +34,45 @@
|
||||
#include "cogl-config.h"
|
||||
|
||||
#include "cogl/cogl-util.h"
|
||||
#include "cogl/cogl-object-private.h"
|
||||
#include "cogl/cogl-primitive.h"
|
||||
#include "cogl/cogl-primitive-private.h"
|
||||
#include "cogl/cogl-attribute-private.h"
|
||||
#include "cogl/cogl-framebuffer-private.h"
|
||||
#include "cogl/cogl-gtype-private.h"
|
||||
|
||||
#include <stdarg.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);
|
||||
COGL_GTYPE_DEFINE_CLASS (Primitive, primitive);
|
||||
static void
|
||||
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 *
|
||||
cogl_primitive_new_with_attributes (CoglVerticesMode mode,
|
||||
@ -58,17 +83,11 @@ cogl_primitive_new_with_attributes (CoglVerticesMode mode,
|
||||
CoglPrimitive *primitive;
|
||||
int i;
|
||||
|
||||
primitive = g_malloc0 (sizeof (CoglPrimitive) +
|
||||
sizeof (CoglAttribute *) * (n_attributes - 1));
|
||||
primitive = g_object_new (COGL_TYPE_PRIMITIVE, NULL);
|
||||
primitive->mode = mode;
|
||||
primitive->first_vertex = 0;
|
||||
primitive->n_vertices = n_vertices;
|
||||
primitive->indices = NULL;
|
||||
primitive->immutable_ref = 0;
|
||||
|
||||
primitive->n_attributes = n_attributes;
|
||||
primitive->n_embedded_attributes = n_attributes;
|
||||
primitive->attributes = &primitive->embedded_attribute;
|
||||
for (i = 0; i < n_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);
|
||||
|
||||
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
|
||||
@ -375,23 +394,6 @@ cogl_primitive_new_p3t2c4 (CoglContext *ctx,
|
||||
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
|
||||
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
|
||||
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;
|
||||
}
|
||||
@ -467,7 +418,7 @@ void
|
||||
cogl_primitive_set_first_vertex (CoglPrimitive *primitive,
|
||||
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))
|
||||
{
|
||||
@ -481,7 +432,7 @@ cogl_primitive_set_first_vertex (CoglPrimitive *primitive,
|
||||
int
|
||||
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;
|
||||
}
|
||||
@ -490,7 +441,7 @@ void
|
||||
cogl_primitive_set_n_vertices (CoglPrimitive *primitive,
|
||||
int n_vertices)
|
||||
{
|
||||
g_return_if_fail (cogl_is_primitive (primitive));
|
||||
g_return_if_fail (COGL_IS_PRIMITIVE (primitive));
|
||||
|
||||
primitive->n_vertices = n_vertices;
|
||||
}
|
||||
@ -498,7 +449,7 @@ cogl_primitive_set_n_vertices (CoglPrimitive *primitive,
|
||||
CoglVerticesMode
|
||||
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;
|
||||
}
|
||||
@ -507,7 +458,7 @@ void
|
||||
cogl_primitive_set_mode (CoglPrimitive *primitive,
|
||||
CoglVerticesMode mode)
|
||||
{
|
||||
g_return_if_fail (cogl_is_primitive (primitive));
|
||||
g_return_if_fail (COGL_IS_PRIMITIVE (primitive));
|
||||
|
||||
if (G_UNLIKELY (primitive->immutable_ref))
|
||||
{
|
||||
@ -523,7 +474,7 @@ cogl_primitive_set_indices (CoglPrimitive *primitive,
|
||||
CoglIndices *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))
|
||||
{
|
||||
@ -552,7 +503,7 @@ cogl_primitive_copy (CoglPrimitive *primitive)
|
||||
|
||||
copy = cogl_primitive_new_with_attributes (primitive->mode,
|
||||
primitive->n_vertices,
|
||||
primitive->attributes,
|
||||
(CoglAttribute **)primitive->attributes->pdata,
|
||||
primitive->n_attributes);
|
||||
|
||||
cogl_primitive_set_indices (copy, primitive->indices, primitive->n_vertices);
|
||||
@ -566,12 +517,12 @@ _cogl_primitive_immutable_ref (CoglPrimitive *primitive)
|
||||
{
|
||||
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++;
|
||||
|
||||
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;
|
||||
}
|
||||
@ -581,13 +532,13 @@ _cogl_primitive_immutable_unref (CoglPrimitive *primitive)
|
||||
{
|
||||
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);
|
||||
|
||||
primitive->immutable_ref--;
|
||||
|
||||
for (i = 0; i < primitive->n_attributes; i++)
|
||||
_cogl_attribute_immutable_unref (primitive->attributes[i]);
|
||||
_cogl_attribute_immutable_unref (primitive->attributes->pdata[i]);
|
||||
}
|
||||
|
||||
void
|
||||
@ -596,9 +547,8 @@ cogl_primitive_foreach_attribute (CoglPrimitive *primitive,
|
||||
void *user_data)
|
||||
{
|
||||
int 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;
|
||||
}
|
||||
|
||||
@ -615,7 +565,7 @@ _cogl_primitive_draw (CoglPrimitive *primitive,
|
||||
primitive->first_vertex,
|
||||
primitive->n_vertices,
|
||||
primitive->indices,
|
||||
primitive->attributes,
|
||||
(CoglAttribute **) primitive->attributes->pdata,
|
||||
primitive->n_attributes,
|
||||
flags);
|
||||
else
|
||||
@ -624,7 +574,7 @@ _cogl_primitive_draw (CoglPrimitive *primitive,
|
||||
primitive->mode,
|
||||
primitive->first_vertex,
|
||||
primitive->n_vertices,
|
||||
primitive->attributes,
|
||||
(CoglAttribute **) primitive->attributes->pdata,
|
||||
primitive->n_attributes,
|
||||
flags);
|
||||
}
|
||||
|
@ -51,27 +51,19 @@ typedef struct _CoglPrimitive CoglPrimitive;
|
||||
G_BEGIN_DECLS
|
||||
|
||||
/**
|
||||
* SECTION:cogl-primitive
|
||||
* @short_description: Functions for creating, manipulating and drawing
|
||||
* primitives
|
||||
* CoglPrimitive:
|
||||
*
|
||||
* FIXME
|
||||
*Functions for creating, manipulating and drawing primitives
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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)
|
||||
*/
|
||||
#define COGL_TYPE_PRIMITIVE (cogl_primitive_get_type ())
|
||||
|
||||
/**
|
||||
* cogl_primitive_get_gtype:
|
||||
*
|
||||
* Returns: a #GType that can be used with the GLib type system.
|
||||
*/
|
||||
COGL_EXPORT
|
||||
GType cogl_primitive_get_gtype (void);
|
||||
|
||||
G_DECLARE_FINAL_TYPE (CoglPrimitive,
|
||||
cogl_primitive,
|
||||
COGL,
|
||||
PRIMITIVE,
|
||||
GObject)
|
||||
/**
|
||||
* CoglVertexP2:
|
||||
* @x: The x component of a position attribute
|
||||
@ -293,7 +285,7 @@ cogl_primitive_new_with_attributes (CoglVerticesMode mode,
|
||||
* </note>
|
||||
*
|
||||
* 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_primitive_new_p2 (CoglContext *context,
|
||||
@ -343,7 +335,7 @@ cogl_primitive_new_p2 (CoglContext *context,
|
||||
* </note>
|
||||
*
|
||||
* 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_primitive_new_p3 (CoglContext *context,
|
||||
@ -395,7 +387,7 @@ cogl_primitive_new_p3 (CoglContext *context,
|
||||
* </note>
|
||||
*
|
||||
* 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_primitive_new_p2c4 (CoglContext *context,
|
||||
@ -447,7 +439,7 @@ cogl_primitive_new_p2c4 (CoglContext *context,
|
||||
* </note>
|
||||
*
|
||||
* 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_primitive_new_p3c4 (CoglContext *context,
|
||||
@ -499,7 +491,7 @@ cogl_primitive_new_p3c4 (CoglContext *context,
|
||||
* </note>
|
||||
*
|
||||
* 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_primitive_new_p2t2 (CoglContext *context,
|
||||
@ -551,7 +543,7 @@ cogl_primitive_new_p2t2 (CoglContext *context,
|
||||
* </note>
|
||||
*
|
||||
* 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_primitive_new_p3t2 (CoglContext *context,
|
||||
@ -603,7 +595,7 @@ cogl_primitive_new_p3t2 (CoglContext *context,
|
||||
* </note>
|
||||
*
|
||||
* 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_primitive_new_p2t2c4 (CoglContext *context,
|
||||
@ -655,7 +647,7 @@ cogl_primitive_new_p2t2c4 (CoglContext *context,
|
||||
* </note>
|
||||
*
|
||||
* 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_primitive_new_p3t2c4 (CoglContext *context,
|
||||
@ -717,19 +709,6 @@ COGL_EXPORT void
|
||||
cogl_primitive_set_mode (CoglPrimitive *primitive,
|
||||
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)
|
||||
* @primitive: A #CoglPrimitive
|
||||
@ -783,18 +762,6 @@ cogl_primitive_get_indices (CoglPrimitive *primitive);
|
||||
COGL_EXPORT CoglPrimitive *
|
||||
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:
|
||||
* @primitive: The #CoglPrimitive whose attributes are being iterated
|
||||
|
@ -36,6 +36,8 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define I_(str) (g_intern_static_string ((str)))
|
||||
|
||||
typedef enum
|
||||
{
|
||||
COGL_PRIVATE_FEATURE_TEXTURE_2D_FROM_EGL_IMAGE,
|
||||
|
@ -30,7 +30,6 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cogl/cogl-object-private.h"
|
||||
#include "cogl/cogl-pipeline-layer-state.h"
|
||||
|
||||
typedef struct _CoglSpan
|
||||
|
@ -32,7 +32,6 @@
|
||||
|
||||
#include <X11/Xutil.h>
|
||||
|
||||
#include "cogl/cogl-object-private.h"
|
||||
#include "cogl/cogl-x11-renderer-private.h"
|
||||
#include "cogl/cogl-context.h"
|
||||
#include "cogl/cogl-output.h"
|
||||
|
@ -33,7 +33,6 @@
|
||||
|
||||
#include "cogl/cogl-xlib-renderer.h"
|
||||
#include "cogl/cogl-util.h"
|
||||
#include "cogl/cogl-object.h"
|
||||
|
||||
#include "cogl/cogl-output-private.h"
|
||||
#include "cogl/cogl-renderer-private.h"
|
||||
|
@ -56,7 +56,6 @@
|
||||
#include "cogl/cogl-defines.h"
|
||||
#include "cogl/cogl-macros.h"
|
||||
|
||||
#include "cogl/cogl-object.h"
|
||||
#include "cogl/cogl1-context.h"
|
||||
#include "cogl/cogl-bitmap.h"
|
||||
#include "cogl/cogl-color.h"
|
||||
|
@ -37,7 +37,6 @@
|
||||
#include "cogl/cogl-buffer-private.h"
|
||||
#include "cogl/cogl-pixel-buffer.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-bitmap-gl-private.h"
|
||||
|
||||
|
@ -46,7 +46,6 @@
|
||||
#include "cogl/driver/gl/cogl-pipeline-opengl-private.h"
|
||||
|
||||
#include "cogl/cogl-context-private.h"
|
||||
#include "cogl/cogl-object-private.h"
|
||||
#include "cogl/cogl-pipeline-cache.h"
|
||||
#include "cogl/driver/gl/cogl-pipeline-fragend-glsl-private.h"
|
||||
#include "deprecated/cogl-shader-private.h"
|
||||
|
@ -43,7 +43,6 @@
|
||||
#include "cogl/driver/gl/cogl-pipeline-opengl-private.h"
|
||||
|
||||
#include "cogl/cogl-context-private.h"
|
||||
#include "cogl/cogl-object-private.h"
|
||||
#include "cogl/cogl-pipeline-cache.h"
|
||||
#include "cogl/cogl-pipeline-state-private.h"
|
||||
#include "cogl/cogl-attribute-private.h"
|
||||
|
@ -41,7 +41,6 @@
|
||||
#include "cogl/driver/gl/cogl-pipeline-opengl-private.h"
|
||||
|
||||
#include "cogl/cogl-context-private.h"
|
||||
#include "cogl/cogl-object-private.h"
|
||||
#include "cogl/cogl-pipeline-state-private.h"
|
||||
#include "cogl/cogl-glsl-shader-boilerplate.h"
|
||||
#include "cogl/driver/gl/cogl-pipeline-vertend-glsl-private.h"
|
||||
|
@ -42,7 +42,6 @@
|
||||
#include "cogl/cogl-texture-private.h"
|
||||
#include "cogl/cogl-pipeline.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-util-gl-private.h"
|
||||
#include "cogl/driver/gl/cogl-texture-gl-private.h"
|
||||
|
@ -42,7 +42,6 @@
|
||||
#include "cogl/cogl-texture-private.h"
|
||||
#include "cogl/cogl-pipeline.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-util-gl-private.h"
|
||||
#include "cogl/driver/gl/cogl-texture-gl-private.h"
|
||||
|
@ -70,7 +70,6 @@ cogl_headers = [
|
||||
'cogl-context.h',
|
||||
'cogl-frame-info.h',
|
||||
'cogl-framebuffer.h',
|
||||
'cogl-object.h',
|
||||
'cogl-offscreen.h',
|
||||
'cogl-onscreen.h',
|
||||
'cogl-pipeline.h',
|
||||
@ -109,7 +108,6 @@ cogl_nonintrospected_headers = [
|
||||
'cogl-pixel-buffer.h',
|
||||
'cogl-macros.h',
|
||||
'cogl-fence.h',
|
||||
'cogl-gtype-private.h',
|
||||
'cogl-glib-source.h',
|
||||
'cogl-scanout.h',
|
||||
'cogl-graphene.h',
|
||||
@ -219,9 +217,6 @@ cogl_sources = [
|
||||
'cogl-driver.h',
|
||||
'cogl.c',
|
||||
'cogl-pixel-format.c',
|
||||
'cogl-object-private.h',
|
||||
'cogl-object.h',
|
||||
'cogl-object.c',
|
||||
'cogl-util.h',
|
||||
'cogl-util.c',
|
||||
'cogl-bitmap-private.h',
|
||||
@ -319,8 +314,6 @@ cogl_sources = [
|
||||
'cogl-flags.h',
|
||||
'cogl-bitmask.h',
|
||||
'cogl-bitmask.c',
|
||||
'cogl-gtype.c',
|
||||
'cogl-gtype-private.h',
|
||||
'cogl-point-in-poly-private.h',
|
||||
'cogl-point-in-poly.c',
|
||||
'cogl-list.c',
|
||||
|
@ -30,7 +30,6 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cogl/cogl-object-private.h"
|
||||
|
||||
typedef struct _CoglGLXCachedConfig
|
||||
{
|
||||
|
@ -32,7 +32,6 @@
|
||||
|
||||
#include <gmodule.h>
|
||||
|
||||
#include "cogl/cogl-object-private.h"
|
||||
#include "cogl/cogl-xlib-renderer-private.h"
|
||||
|
||||
typedef struct _CoglGLXRenderer
|
||||
|
@ -101,7 +101,7 @@ test_coglbox_fade_texture (CoglFramebuffer *framebuffer,
|
||||
4,
|
||||
vertices);
|
||||
cogl_primitive_draw (primitive, framebuffer, pipeline);
|
||||
cogl_object_unref (primitive);
|
||||
g_object_unref (primitive);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -144,7 +144,7 @@ test_coglbox_triangle_texture (CoglFramebuffer *framebuffer,
|
||||
3,
|
||||
vertices);
|
||||
cogl_primitive_draw (primitive, framebuffer, pipeline);
|
||||
cogl_object_unref (primitive);
|
||||
g_object_unref (primitive);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -131,7 +131,7 @@ paint_test_backface_culling (TestState *state,
|
||||
4,
|
||||
verts);
|
||||
cogl_primitive_draw (primitive, framebuffer, pipeline);
|
||||
cogl_object_unref (primitive);
|
||||
g_object_unref (primitive);
|
||||
|
||||
x1 = x2;
|
||||
x2 = x1 + (float)(TEXTURE_RENDER_SIZE);
|
||||
@ -151,7 +151,7 @@ paint_test_backface_culling (TestState *state,
|
||||
4,
|
||||
verts);
|
||||
cogl_primitive_draw (primitive, framebuffer, pipeline);
|
||||
cogl_object_unref (primitive);
|
||||
g_object_unref (primitive);
|
||||
|
||||
x1 = x2;
|
||||
x2 = x1 + (float)(TEXTURE_RENDER_SIZE);
|
||||
|
@ -68,7 +68,7 @@ test_float_verts (TestState *state, int offset_x, int offset_y)
|
||||
attributes,
|
||||
2); /* n_attributes */
|
||||
cogl_primitive_draw (primitive, test_fb, state->pipeline);
|
||||
cogl_object_unref (primitive);
|
||||
g_object_unref (primitive);
|
||||
|
||||
cogl_framebuffer_pop_matrix (test_fb);
|
||||
|
||||
@ -129,7 +129,7 @@ test_byte_verts (TestState *state, int offset_x, int offset_y)
|
||||
attributes,
|
||||
2); /* n_attributes */
|
||||
cogl_primitive_draw (primitive, test_fb, state->pipeline);
|
||||
cogl_object_unref (primitive);
|
||||
g_object_unref (primitive);
|
||||
|
||||
g_object_unref (attributes[1]);
|
||||
|
||||
@ -151,7 +151,7 @@ test_byte_verts (TestState *state, int offset_x, int offset_y)
|
||||
attributes,
|
||||
2); /* n_attributes */
|
||||
cogl_primitive_draw (primitive, test_fb, state->pipeline);
|
||||
cogl_object_unref (primitive);
|
||||
g_object_unref (primitive);
|
||||
|
||||
cogl_framebuffer_pop_matrix (test_fb);
|
||||
|
||||
@ -213,7 +213,7 @@ test_short_verts (TestState *state, int offset_x, int offset_y)
|
||||
attributes,
|
||||
2); /* n_attributes */
|
||||
cogl_primitive_draw (primitive, test_fb, pipeline);
|
||||
cogl_object_unref (primitive);
|
||||
g_object_unref (primitive);
|
||||
|
||||
cogl_framebuffer_pop_matrix (test_fb);
|
||||
|
||||
@ -248,7 +248,7 @@ test_short_verts (TestState *state, int offset_x, int offset_y)
|
||||
attributes,
|
||||
1); /* n_attributes */
|
||||
cogl_primitive_draw (primitive, test_fb, pipeline2);
|
||||
cogl_object_unref (primitive);
|
||||
g_object_unref (primitive);
|
||||
|
||||
cogl_framebuffer_pop_matrix (test_fb);
|
||||
|
||||
|
@ -108,7 +108,7 @@ test_map_buffer_range (void)
|
||||
tex_coord_attribute,
|
||||
NULL);
|
||||
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 */
|
||||
test_utils_check_pixel (test_fb, 1, 1, 0x00ff00ff);
|
||||
|
@ -125,7 +125,7 @@ do_test (const char *attribute_name,
|
||||
pipeline_setup_func (pipeline);
|
||||
cogl_primitive_draw (primitive, test_fb, pipeline);
|
||||
g_object_unref (pipeline);
|
||||
cogl_object_unref (primitive);
|
||||
g_object_unref (primitive);
|
||||
|
||||
/* Verify all of the points where drawn at the right size */
|
||||
for (i = 0; i < N_POINTS; i++)
|
||||
|
@ -82,7 +82,7 @@ test_point_size (void)
|
||||
cogl_pipeline_set_color4ub (pipeline, 0, 255, 0, 255);
|
||||
cogl_primitive_draw (prim, test_fb, pipeline);
|
||||
|
||||
cogl_object_unref (prim);
|
||||
g_object_unref (prim);
|
||||
g_object_unref (pipeline);
|
||||
}
|
||||
|
||||
|
@ -133,7 +133,7 @@ do_test (gboolean check_orientation,
|
||||
cogl_primitive_draw (prim, test_fb, solid_pipeline);
|
||||
cogl_framebuffer_pop_matrix (test_fb);
|
||||
|
||||
cogl_object_unref (prim);
|
||||
g_object_unref (prim);
|
||||
g_object_unref (solid_pipeline);
|
||||
g_object_unref (pipeline);
|
||||
g_object_unref (tex_2d);
|
||||
|
@ -133,7 +133,7 @@ do_test (gboolean check_orientation,
|
||||
cogl_primitive_draw (prim, test_fb, solid_pipeline);
|
||||
cogl_framebuffer_pop_matrix (test_fb);
|
||||
|
||||
cogl_object_unref (prim);
|
||||
g_object_unref (prim);
|
||||
g_object_unref (solid_pipeline);
|
||||
g_object_unref (pipeline);
|
||||
g_object_unref (tex_2d);
|
||||
|
@ -199,7 +199,7 @@ test_paint (TestState *state)
|
||||
|
||||
test_utils_check_pixel (test_fb, i * 10 + 2, 2, expected_color);
|
||||
|
||||
cogl_object_unref (prim);
|
||||
g_object_unref (prim);
|
||||
}
|
||||
|
||||
g_object_unref (pipeline);
|
||||
@ -301,8 +301,8 @@ test_copy (TestState *state)
|
||||
g_assert (cogl_primitive_get_indices (prim_a) ==
|
||||
cogl_primitive_get_indices (prim_b));
|
||||
|
||||
cogl_object_unref (prim_a);
|
||||
cogl_object_unref (prim_b);
|
||||
g_object_unref (prim_a);
|
||||
g_object_unref (prim_b);
|
||||
g_object_unref (indices);
|
||||
|
||||
for (i = 0; i < N_ATTRIBS; i++)
|
||||
|
@ -129,7 +129,7 @@ draw_tests_polygon (TestState *state)
|
||||
G_N_ELEMENTS (vertices),
|
||||
vertices);
|
||||
cogl_primitive_draw (primitive, test_fb, pipeline);
|
||||
cogl_object_unref (primitive);
|
||||
g_object_unref (primitive);
|
||||
g_object_unref (pipeline);
|
||||
cogl_framebuffer_pop_matrix (test_fb);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user