Make backface culling work with vertex buffers
authorNeil Roberts <neil@linux.intel.com>
Thu, 21 May 2009 13:56:38 +0000 (14:56 +0100)
committerNeil Roberts <neil@linux.intel.com>
Thu, 21 May 2009 13:57:07 +0000 (14:57 +0100)
Backface culling is enabled as part of cogl_enable so the different
rendering functions in Cogl need to explicitly opt-in to have backface
culling enabled. Cogl vertex buffers should allow backface culling so
they should check whether it is enabled and then set the appropriate
cogl_enable flag.

clutter/cogl/cogl.h.in
clutter/cogl/common/cogl-vertex-buffer.c

index b3b0584..bd36983 100644 (file)
@@ -325,9 +325,9 @@ void            cogl_enable_depth_test        (gboolean            setting);
  *
  * Sets whether textures positioned so that their backface is showing
  * should be hidden. This can be used to efficiently draw two-sided
- * textures or fully closed cubes without enabling depth testing. Only
- * calls to cogl_texture_rectangle() and cogl_texture_polygon() are
- * affected. Backface culling is disabled by default.
+ * textures or fully closed cubes without enabling depth testing. This
+ * only affects calls to the cogl_rectangle* family of functions and
+ * cogl_vertex_buffer_draw*. Backface culling is disabled by default.
  */
 void            cogl_enable_backface_culling  (gboolean            setting);
 
index b7e004a..28c9df4 100644 (file)
@@ -1647,6 +1647,9 @@ enable_state_for_drawing_buffer (CoglVertexBuffer *buffer)
 
   enable_flags |= cogl_material_get_cogl_enable_flags (ctx->source_material);
 
+  if (ctx->enable_backface_culling)
+    enable_flags |= COGL_ENABLE_BACKFACE_CULLING;
+
   cogl_enable (enable_flags);
 }