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>
This commit is contained in:
Robert Bragg 2011-10-25 18:45:16 +01:00
parent fd2769f7e8
commit 7a834cf681
2 changed files with 27 additions and 13 deletions

View File

@ -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 */

View File

@ -550,21 +550,30 @@ _cogl_primitive_immutable_unref (CoglPrimitive *primitive)
_cogl_attribute_immutable_unref (primitive->attributes[i]);
}
void
_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,
flags);
else
_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)
{
if (primitive->indices)
cogl_draw_indexed_attributes (primitive->mode,
primitive->first_vertex,
primitive->n_vertices,
primitive->indices,
primitive->attributes,
primitive->n_attributes);
else
cogl_draw_attributes (primitive->mode,
primitive->first_vertex,
primitive->n_vertices,
primitive->attributes,
primitive->n_attributes);
_cogl_primitive_draw (primitive, 0 /* no flags */);
}