[Cogl] [PATCH 1/2] Preserve the CoglDrawFlags when drawing a wireframe
Robert Bragg
robert at sixbynine.org
Mon May 21 08:44:17 PDT 2012
This looks good to land to me:
Reviewed-by: Robert Bragg <robert at linux.intel.com>
thanks,
- Robert
On Sat, May 19, 2012 at 11:17 PM, Neil Roberts <neil at linux.intel.com> wrote:
> Previously the CoglDrawFlags passed to
> _cogl_framebuffer_draw_indexed_attributes when drawing is redirected
> to draw a wireframe are overriden to avoid validating the pipeline,
> flushing the framebuffer state and flushing the journal. This ends up
> breaking scenes that only contain models drawn from attributes in the
> application because nothing will flush the matrices. It seems to make
> more sense to just use whatever draw flags were passed from the
> original draw command so that it will flush the matrices if the caller
> was expecting it.
>
> One problem with this is that if the wireframe causes the journal to
> be flushed then it will already have temporarily disabled the
> wireframe debug flag so the journal will not be drawn with wireframes.
> To fix this the patch adds a CoglDrawFlag to disable the wireframe and
> uses that instead of disabling the debug flag.
> ---
> cogl/cogl-attribute-private.h | 5 ++++-
> cogl/cogl-framebuffer.c | 22 ++++++++++++----------
> 2 files changed, 16 insertions(+), 11 deletions(-)
>
> diff --git a/cogl/cogl-attribute-private.h b/cogl/cogl-attribute-private.h
> index bde6fe2..09b41f4 100644
> --- a/cogl/cogl-attribute-private.h
> +++ b/cogl/cogl-attribute-private.h
> @@ -76,7 +76,10 @@ typedef enum
> blending. However when drawing from the journal we know what the
> contents of the color array is so we can override this by passing
> this flag. */
> - COGL_DRAW_COLOR_ATTRIBUTE_IS_OPAQUE = 1 << 3
> + COGL_DRAW_COLOR_ATTRIBUTE_IS_OPAQUE = 1 << 3,
> + /* This forcibly disables the debug option to divert all drawing to
> + * wireframes */
> + COGL_DRAW_SKIP_DEBUG_WIREFRAME = 1 << 4
> } CoglDrawFlags;
>
> /* During CoglContext initialization we register the "cogl_color_in"
> diff --git a/cogl/cogl-framebuffer.c b/cogl/cogl-framebuffer.c
> index 8ea41fb..fc0bf0b 100644
> --- a/cogl/cogl-framebuffer.c
> +++ b/cogl/cogl-framebuffer.c
> @@ -3229,7 +3229,8 @@ draw_wireframe (CoglContext *ctx,
> int n_vertices,
> CoglAttribute **attributes,
> int n_attributes,
> - CoglIndices *indices)
> + CoglIndices *indices,
> + CoglDrawFlags flags)
> {
> CoglIndices *wire_indices;
> CoglPipeline *wire_pipeline;
> @@ -3278,7 +3279,7 @@ draw_wireframe (CoglContext *ctx,
> }
>
> /* temporarily disable the wireframe to avoid recursion! */
> - COGL_DEBUG_CLEAR_FLAG (COGL_DEBUG_WIREFRAME);
> + flags |= COGL_DRAW_SKIP_DEBUG_WIREFRAME;
> _cogl_framebuffer_draw_indexed_attributes (
> framebuffer,
> wire_pipeline,
> @@ -3288,10 +3289,7 @@ draw_wireframe (CoglContext *ctx,
> wire_indices,
> attributes,
> n_attributes,
> - COGL_DRAW_SKIP_JOURNAL_FLUSH |
> - COGL_DRAW_SKIP_PIPELINE_VALIDATION |
> - COGL_DRAW_SKIP_FRAMEBUFFER_FLUSH);
> - COGL_DEBUG_SET_FLAG (COGL_DEBUG_WIREFRAME);
> + flags);
>
> cogl_object_unref (wire_indices);
> }
> @@ -3311,11 +3309,13 @@ _cogl_framebuffer_draw_attributes (CoglFramebuffer *framebuffer,
> CoglDrawFlags flags)
> {
> #ifdef COGL_ENABLE_DEBUG
> - if (G_UNLIKELY (COGL_DEBUG_ENABLED (COGL_DEBUG_WIREFRAME)))
> + if (G_UNLIKELY (COGL_DEBUG_ENABLED (COGL_DEBUG_WIREFRAME) &&
> + (flags & COGL_DRAW_SKIP_DEBUG_WIREFRAME) == 0))
> draw_wireframe (framebuffer->context,
> framebuffer, pipeline,
> mode, first_vertex, n_vertices,
> - attributes, n_attributes, NULL);
> + attributes, n_attributes, NULL,
> + flags);
> else
> #endif
> {
> @@ -3405,11 +3405,13 @@ _cogl_framebuffer_draw_indexed_attributes (CoglFramebuffer *framebuffer,
> CoglDrawFlags flags)
> {
> #ifdef COGL_ENABLE_DEBUG
> - if (G_UNLIKELY (COGL_DEBUG_ENABLED (COGL_DEBUG_WIREFRAME)))
> + if (G_UNLIKELY (COGL_DEBUG_ENABLED (COGL_DEBUG_WIREFRAME) &&
> + (flags & COGL_DRAW_SKIP_DEBUG_WIREFRAME) == 0))
> draw_wireframe (framebuffer->context,
> framebuffer, pipeline,
> mode, first_vertex, n_vertices,
> - attributes, n_attributes, indices);
> + attributes, n_attributes, indices,
> + flags);
> else
> #endif
> {
> --
> 1.7.3.16.g9464b
>
> _______________________________________________
> Cogl mailing list
> Cogl at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/cogl
More information about the Cogl
mailing list