cogl: Port Indices away from CoglObject

Also renames Indices.get_type to Indices.get_indices_type to avoid
a conflict with the generated Object.get_type function

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3193>
This commit is contained in:
Bilal Elmoussaoui 2023-08-18 09:52:51 +02:00 committed by Marge Bot
parent 4ea3593ebf
commit df8ae83040
9 changed files with 52 additions and 55 deletions

View File

@ -488,7 +488,7 @@ clutter_deform_effect_init_arrays (ClutterDeformEffect *self)
n_indices);
}
cogl_object_unref (indices);
g_object_unref (indices);
for (i = 0; i < 3; i++)
g_object_unref (attributes[i]);

View File

@ -95,9 +95,9 @@ cogl_context_dispose (GObject *object)
g_array_free (context->journal_clip_bounds, TRUE);
if (context->rectangle_byte_indices)
cogl_object_unref (context->rectangle_byte_indices);
g_object_unref (context->rectangle_byte_indices);
if (context->rectangle_short_indices)
cogl_object_unref (context->rectangle_short_indices);
g_object_unref (context->rectangle_short_indices);
if (context->default_pipeline)
cogl_object_unref (context->default_pipeline);

View File

@ -2195,7 +2195,7 @@ get_wire_line_indices (CoglContext *ctx,
indices = _cogl_buffer_map (COGL_BUFFER (index_buffer),
COGL_BUFFER_ACCESS_READ, 0,
NULL);
indices_type = cogl_indices_get_type (user_indices);
indices_type = cogl_indices_get_indices_type (user_indices);
}
else
{
@ -2375,7 +2375,7 @@ draw_wireframe (CoglContext *ctx,
flags);
COGL_DEBUG_SET_FLAG (COGL_DEBUG_WIREFRAME);
cogl_object_unref (wire_indices);
g_object_unref (wire_indices);
}
#endif

View File

@ -33,13 +33,12 @@
#pragma once
#include "cogl/cogl-object-private.h"
#include "cogl/cogl-index-buffer-private.h"
#include "cogl/cogl-types.h"
struct _CoglIndices
{
CoglObject _parent;
GObject parent_instance;
CoglIndexBuffer *buffer;
size_t offset;

View File

@ -35,19 +35,37 @@
#include "cogl-config.h"
#include "cogl/cogl-util.h"
#include "cogl/cogl-object-private.h"
#include "cogl/cogl-context-private.h"
#include "cogl/cogl-indices.h"
#include "cogl/cogl-indices-private.h"
#include "cogl/cogl-index-buffer.h"
#include "cogl/cogl-gtype-private.h"
#include <stdarg.h>
static void _cogl_indices_free (CoglIndices *indices);
G_DEFINE_TYPE (CoglIndices, cogl_indices, G_TYPE_OBJECT);
COGL_OBJECT_DEFINE (Indices, indices);
COGL_GTYPE_DEFINE_CLASS (Indices, indices);
static void
cogl_indices_dispose (GObject *object)
{
CoglIndices *indices = COGL_INDICES (object);
cogl_object_unref (indices->buffer);
G_OBJECT_CLASS (cogl_indices_parent_class)->dispose (object);
}
static void
cogl_indices_init (CoglIndices *indices)
{
}
static void
cogl_indices_class_init (CoglIndicesClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
object_class->dispose = cogl_indices_dispose;
}
static size_t
sizeof_indices_type (CoglIndicesType type)
@ -69,7 +87,7 @@ cogl_indices_new_for_buffer (CoglIndicesType type,
CoglIndexBuffer *buffer,
size_t offset)
{
CoglIndices *indices = g_new0 (CoglIndices, 1);
CoglIndices *indices = g_object_new (COGL_TYPE_INDICES, NULL);
indices->buffer = cogl_object_ref (buffer);
indices->offset = offset;
@ -78,7 +96,7 @@ cogl_indices_new_for_buffer (CoglIndicesType type,
indices->immutable_ref = 0;
return _cogl_indices_object_new (indices);
return indices;
}
CoglIndices *
@ -118,9 +136,9 @@ cogl_indices_get_buffer (CoglIndices *indices)
}
CoglIndicesType
cogl_indices_get_type (CoglIndices *indices)
cogl_indices_get_indices_type (CoglIndices *indices)
{
g_return_val_if_fail (cogl_is_indices (indices),
g_return_val_if_fail (COGL_IS_INDICES (indices),
COGL_INDICES_TYPE_UNSIGNED_BYTE);
return indices->type;
}
@ -128,7 +146,7 @@ cogl_indices_get_type (CoglIndices *indices)
size_t
cogl_indices_get_offset (CoglIndices *indices)
{
g_return_val_if_fail (cogl_is_indices (indices), 0);
g_return_val_if_fail (COGL_IS_INDICES (indices), 0);
return indices->offset;
}
@ -149,7 +167,7 @@ void
cogl_indices_set_offset (CoglIndices *indices,
size_t offset)
{
g_return_if_fail (cogl_is_indices (indices));
g_return_if_fail (COGL_IS_INDICES (indices));
if (G_UNLIKELY (indices->immutable_ref))
warn_about_midscene_changes ();
@ -157,17 +175,10 @@ cogl_indices_set_offset (CoglIndices *indices,
indices->offset = offset;
}
static void
_cogl_indices_free (CoglIndices *indices)
{
cogl_object_unref (indices->buffer);
g_free (indices);
}
CoglIndices *
_cogl_indices_immutable_ref (CoglIndices *indices)
{
g_return_val_if_fail (cogl_is_indices (indices), NULL);
g_return_val_if_fail (COGL_IS_INDICES (indices), NULL);
indices->immutable_ref++;
_cogl_buffer_immutable_ref (COGL_BUFFER (indices->buffer));
@ -177,7 +188,7 @@ _cogl_indices_immutable_ref (CoglIndices *indices)
void
_cogl_indices_immutable_unref (CoglIndices *indices)
{
g_return_if_fail (cogl_is_indices (indices));
g_return_if_fail (COGL_IS_INDICES (indices));
g_return_if_fail (indices->immutable_ref > 0);
indices->immutable_ref--;
@ -230,7 +241,7 @@ cogl_get_rectangle_indices (CoglContext *ctx, int n_rectangles)
int i, vert_num = 0;
if (ctx->rectangle_short_indices != NULL)
cogl_object_unref (ctx->rectangle_short_indices);
g_object_unref (ctx->rectangle_short_indices);
/* Pick a power of two >= MAX (512, n_indices) */
if (ctx->rectangle_short_indices_len == 0)
ctx->rectangle_short_indices_len = 512;

View File

@ -49,8 +49,9 @@ typedef struct _CoglIndices CoglIndices;
G_BEGIN_DECLS
/**
* SECTION:cogl-indices
* @short_description: Describe vertex indices stored in a #CoglIndexBuffer.
* CoglIndices:
*
* Describe vertex indices stored in a #CoglIndexBuffer.
*
* Indices allow you to avoid duplicating vertices in your vertex data
* by virtualizing your data and instead providing a sequence of index
@ -106,13 +107,11 @@ G_BEGIN_DECLS
* for drawing quads as above.
*/
/**
* cogl_indices_get_gtype:
*
* Returns: a #GType that can be used with the GLib type system.
*/
#define COGL_TYPE_INDICES (cogl_indices_get_type ())
COGL_EXPORT
GType cogl_indices_get_gtype (void);
G_DECLARE_FINAL_TYPE (CoglIndices, cogl_indices,
COGL, INDICES, GObject)
COGL_EXPORT CoglIndices *
cogl_indices_new (CoglContext *context,
@ -129,7 +128,7 @@ COGL_EXPORT CoglIndexBuffer *
cogl_indices_get_buffer (CoglIndices *indices);
COGL_EXPORT CoglIndicesType
cogl_indices_get_type (CoglIndices *indices);
cogl_indices_get_indices_type (CoglIndices *indices);
COGL_EXPORT size_t
cogl_indices_get_offset (CoglIndices *indices);
@ -141,16 +140,4 @@ cogl_indices_set_offset (CoglIndices *indices,
COGL_EXPORT CoglIndices *
cogl_get_rectangle_indices (CoglContext *context, int n_rectangles);
/**
* cogl_is_indices:
* @object: A #CoglObject pointer
*
* Gets whether the given object references a #CoglIndices.
*
* Return value: %TRUE if the object references a #CoglIndices
* and %FALSE otherwise.
*/
COGL_EXPORT gboolean
cogl_is_indices (void *object);
G_END_DECLS

View File

@ -387,7 +387,7 @@ _cogl_primitive_free (CoglPrimitive *primitive)
g_free (primitive->attributes);
if (primitive->indices)
cogl_object_unref (primitive->indices);
g_object_unref (primitive->indices);
g_free (primitive);
}
@ -532,9 +532,9 @@ cogl_primitive_set_indices (CoglPrimitive *primitive,
}
if (indices)
cogl_object_ref (indices);
g_object_ref (indices);
if (primitive->indices)
cogl_object_unref (primitive->indices);
g_object_unref (primitive->indices);
primitive->indices = indices;
primitive->n_vertices = n_indices;
}

View File

@ -383,9 +383,9 @@ cogl_gl_framebuffer_draw_indexed_attributes (CoglFramebufferDriver *driver,
base = _cogl_buffer_gl_bind (buffer,
COGL_BUFFER_BIND_TARGET_INDEX_BUFFER, NULL);
buffer_offset = cogl_indices_get_offset (indices);
index_size = sizeof_index_type (cogl_indices_get_type (indices));
index_size = sizeof_index_type (cogl_indices_get_indices_type (indices));
switch (cogl_indices_get_type (indices))
switch (cogl_indices_get_indices_type (indices))
{
case COGL_INDICES_TYPE_UNSIGNED_BYTE:
indices_gl_type = GL_UNSIGNED_BYTE;

View File

@ -303,7 +303,7 @@ test_copy (TestState *state)
cogl_object_unref (prim_a);
cogl_object_unref (prim_b);
cogl_object_unref (indices);
g_object_unref (indices);
for (i = 0; i < N_ATTRIBS; i++)
g_object_unref (attributes[i]);