diff options
author | Robert Bragg <robert@linux.intel.com> | 2011-10-25 18:45:16 +0100 |
---|---|---|
committer | Robert Bragg <robert@linux.intel.com> | 2011-11-01 12:02:59 +0000 |
commit | 7a834cf68154caec28b997b0d30ca03d6fdd8fcf (patch) | |
tree | 165ba8462fd964276c10c800eb4e39a8b1f13b5c /cogl | |
parent | fd2769f7e8e4432a99def75000f5bb4bf81c01fd (diff) | |
download | cogl-7a834cf68154caec28b997b0d30ca03d6fdd8fcf.tar.gz |
primitive: Adds _cogl_primitive_draw api taking flags
This adds an internal _cogl_primitive_draw API that takes CoglDrawFlags
like _cogl_draw_attributes does which allows us to draw a primitive but
skip things like flushing journals, flushing framebuffer state and avoid
validating the current pipeline. This allows us to draw primitives in
places that could otherwise cause recursion.
Reviewed-by: Neil Roberts <neil@linux.intel.com>
Diffstat (limited to 'cogl')
-rw-r--r-- | cogl/cogl-primitive-private.h | 5 | ||||
-rw-r--r-- | cogl/cogl-primitive.c | 35 |
2 files changed, 27 insertions, 13 deletions
diff --git a/cogl/cogl-primitive-private.h b/cogl/cogl-primitive-private.h index 3deb1e79..c3fd9918 100644 --- a/cogl/cogl-primitive-private.h +++ b/cogl/cogl-primitive-private.h @@ -30,6 +30,7 @@ #include "cogl-object-private.h" #include "cogl-attribute-buffer-private.h" +#include "cogl-attribute-private.h" struct _CoglPrimitive { @@ -55,5 +56,9 @@ _cogl_primitive_immutable_ref (CoglPrimitive *primitive); void _cogl_primitive_immutable_unref (CoglPrimitive *primitive); +void +_cogl_primitive_draw (CoglPrimitive *primitive, + CoglDrawFlags flags); + #endif /* __COGL_PRIMITIVE_PRIVATE_H */ diff --git a/cogl/cogl-primitive.c b/cogl/cogl-primitive.c index 145bc8b0..cba40ff5 100644 --- a/cogl/cogl-primitive.c +++ b/cogl/cogl-primitive.c @@ -550,21 +550,30 @@ _cogl_primitive_immutable_unref (CoglPrimitive *primitive) _cogl_attribute_immutable_unref (primitive->attributes[i]); } -/* XXX: cogl_draw_primitive() ? */ void -cogl_primitive_draw (CoglPrimitive *primitive) +_cogl_primitive_draw (CoglPrimitive *primitive, + CoglDrawFlags flags) { if (primitive->indices) - cogl_draw_indexed_attributes (primitive->mode, - primitive->first_vertex, - primitive->n_vertices, - primitive->indices, - primitive->attributes, - primitive->n_attributes); + _cogl_draw_indexed_attributes (primitive->mode, + primitive->first_vertex, + primitive->n_vertices, + primitive->indices, + primitive->attributes, + primitive->n_attributes, + flags); else - cogl_draw_attributes (primitive->mode, - primitive->first_vertex, - primitive->n_vertices, - primitive->attributes, - primitive->n_attributes); + _cogl_draw_attributes (primitive->mode, + primitive->first_vertex, + primitive->n_vertices, + primitive->attributes, + primitive->n_attributes, + flags); +} + +/* XXX: cogl_draw_primitive() ? */ +void +cogl_primitive_draw (CoglPrimitive *primitive) +{ + _cogl_primitive_draw (primitive, 0 /* no flags */); } |