summaryrefslogtreecommitdiff
path: root/cogl
diff options
context:
space:
mode:
authorRobert Bragg <robert@linux.intel.com>2011-10-25 18:45:16 +0100
committerRobert Bragg <robert@linux.intel.com>2011-11-01 12:02:59 +0000
commit7a834cf68154caec28b997b0d30ca03d6fdd8fcf (patch)
tree165ba8462fd964276c10c800eb4e39a8b1f13b5c /cogl
parentfd2769f7e8e4432a99def75000f5bb4bf81c01fd (diff)
downloadcogl-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.h5
-rw-r--r--cogl/cogl-primitive.c35
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 */);
}