diff --git a/cogl/cogl-primitive.c b/cogl/cogl-primitive.c index a88f1899f..10983cd61 100644 --- a/cogl/cogl-primitive.c +++ b/cogl/cogl-primitive.c @@ -524,6 +524,22 @@ cogl_primitive_set_indices (CoglPrimitive *primitive, primitive->n_vertices = n_indices; } +CoglPrimitive * +cogl_primitive_copy (CoglPrimitive *primitive) +{ + CoglPrimitive *copy; + + copy = cogl_primitive_new_with_attributes (primitive->mode, + primitive->n_vertices, + primitive->attributes, + primitive->n_attributes); + + cogl_primitive_set_indices (copy, primitive->indices, primitive->n_vertices); + cogl_primitive_set_first_vertex (copy, primitive->first_vertex); + + return copy; +} + CoglPrimitive * _cogl_primitive_immutable_ref (CoglPrimitive *primitive) { diff --git a/cogl/cogl-primitive.h b/cogl/cogl-primitive.h index c9529a055..62293ab6c 100644 --- a/cogl/cogl-primitive.h +++ b/cogl/cogl-primitive.h @@ -774,6 +774,21 @@ cogl_primitive_set_indices (CoglPrimitive *primitive, CoglIndices *indices, int n_indices); +/** + * cogl_primitive_copy: + * @primitive: A primitive copy + * + * Makes a copy of an existing #CoglPrimitive. Note that the primitive + * is a shallow copy which means it will use the same attributes and + * attribute buffers as the original primitive. + * + * Return value: the new primitive + * Since: 1.10 + * Stability: unstable + */ +CoglPrimitive * +cogl_primitive_copy (CoglPrimitive *primitive); + /** * cogl_primitive_draw: * @primitive: A #CoglPrimitive object diff --git a/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt b/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt index a81e20179..c6f0c2b7a 100644 --- a/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt +++ b/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt @@ -237,6 +237,7 @@ cogl_primitive_set_mode cogl_primitive_set_attributes cogl_primitive_set_indices cogl_primitive_draw +cogl_primitive_copy