[Cogl journal] Adds a --cogl-debug=journal option for tracing the journal

When this option is used Cogl will print a trace of all quads that get
logged into the journal, and a trace of quads as they get flushed.

If you are seeing a bug with the geometry being drawn by Cogl this may give
some clues by letting you sanity check the numbers being logged vs the
numbers being emitted.
This commit is contained in:
Robert Bragg 2009-06-17 01:59:28 +01:00
parent 540a91c7fc
commit 121bcd6dfe
3 changed files with 27 additions and 15 deletions

View File

@ -41,7 +41,8 @@ typedef enum {
COGL_DEBUG_BLEND_STRINGS = 1 << 9, COGL_DEBUG_BLEND_STRINGS = 1 << 9,
COGL_DEBUG_DISABLE_BATCHING = 1 << 10, COGL_DEBUG_DISABLE_BATCHING = 1 << 10,
COGL_DEBUG_FORCE_CLIENT_SIDE_MATRICES = 1 << 11, COGL_DEBUG_FORCE_CLIENT_SIDE_MATRICES = 1 << 11,
COGL_DEBUG_DISABLE_VBOS = 1 << 12 COGL_DEBUG_DISABLE_VBOS = 1 << 12,
COGL_DEBUG_JOURNAL = 1 << 13
} CoglDebugFlags; } CoglDebugFlags;
#ifdef COGL_ENABLE_DEBUG #ifdef COGL_ENABLE_DEBUG

View File

@ -43,7 +43,8 @@ static const GDebugKey cogl_debug_keys[] = {
{ "blend-strings", COGL_DEBUG_BLEND_STRINGS }, { "blend-strings", COGL_DEBUG_BLEND_STRINGS },
{ "disable-batching", COGL_DEBUG_DISABLE_BATCHING }, { "disable-batching", COGL_DEBUG_DISABLE_BATCHING },
{ "client-side-matrices", COGL_DEBUG_FORCE_CLIENT_SIDE_MATRICES }, { "client-side-matrices", COGL_DEBUG_FORCE_CLIENT_SIDE_MATRICES },
{ "disable-vbos", COGL_DEBUG_DISABLE_VBOS } { "disable-vbos", COGL_DEBUG_DISABLE_VBOS },
{ "journal", COGL_DEBUG_JOURNAL }
}; };
static const gint n_cogl_debug_keys = G_N_ELEMENTS (cogl_debug_keys); static const gint n_cogl_debug_keys = G_N_ELEMENTS (cogl_debug_keys);

View File

@ -421,14 +421,19 @@ _cogl_journal_flush_vbo_offsets_and_entries (CoglJournalEntry *batch_start,
* VBO use a vertex offset passed to glDraw{Arrays,Elements} */ * VBO use a vertex offset passed to glDraw{Arrays,Elements} */
state->vertex_offset = 0; state->vertex_offset = 0;
/* XXX: Uncomment for debugging */ if (cogl_debug_flags & COGL_DEBUG_JOURNAL)
#if 0 {
g_assert (cogl_get_features () & COGL_FEATURE_VBOS); guint8 *verts;
_cogl_journal_dump_quad_batch (((guint8 *)ctx->logged_vertices->data) +
(size_t)state->vbo_offset, if (cogl_get_features () & COGL_FEATURE_VBOS)
batch_start->n_layers, verts = ((guint8 *)ctx->logged_vertices->data) +
batch_len); (size_t)state->vbo_offset;
#endif else
verts = (guint8 *)state->vbo_offset;
_cogl_journal_dump_quad_batch (verts,
batch_start->n_layers,
batch_len);
}
batch_and_call (batch_start, batch_and_call (batch_start,
batch_len, batch_len,
@ -442,6 +447,8 @@ _cogl_journal_flush_vbo_offsets_and_entries (CoglJournalEntry *batch_start,
/* progress forward through the VBO containing all our vertices */ /* progress forward through the VBO containing all our vertices */
state->vbo_offset += (stride * 4 * batch_len); state->vbo_offset += (stride * 4 * batch_len);
if (cogl_debug_flags & COGL_DEBUG_JOURNAL)
g_print ("new vbo offset = %lu\n", (gulong)state->vbo_offset);
} }
static gboolean static gboolean
@ -450,6 +457,8 @@ compare_entry_strides (CoglJournalEntry *entry0, CoglJournalEntry *entry1)
/* Currently the only thing that affects the stride for our vertex arrays /* Currently the only thing that affects the stride for our vertex arrays
* is the number of material layers. We need to update our VBO offsets * is the number of material layers. We need to update our VBO offsets
* whenever the stride changes. */ * whenever the stride changes. */
/* TODO: We should be padding the n_layers == 1 case as if it were
* n_layers == 2 so we can reduce the need to split batches. */
if (entry0->n_layers == entry1->n_layers || if (entry0->n_layers == entry1->n_layers ||
(entry0->n_layers <= MIN_LAYER_PADING && (entry0->n_layers <= MIN_LAYER_PADING &&
entry1->n_layers <= MIN_LAYER_PADING)) entry1->n_layers <= MIN_LAYER_PADING))
@ -637,11 +646,12 @@ _cogl_journal_log_quad (float x_1,
t[0] = tex_coords[2]; t[1] = tex_coords[1]; t[0] = tex_coords[2]; t[1] = tex_coords[1];
} }
/* XXX: Uncomment for debugging */ if (cogl_debug_flags & COGL_DEBUG_JOURNAL)
#if 0 {
v = &g_array_index (ctx->logged_vertices, GLfloat, next_vert); g_print ("Logged new quad:\n");
_cogl_journal_dump_quad_vertices ((guint8 *)v, n_layers); v = &g_array_index (ctx->logged_vertices, GLfloat, next_vert);
#endif _cogl_journal_dump_quad_vertices ((guint8 *)v, n_layers);
}
next_entry = ctx->journal->len; next_entry = ctx->journal->len;
g_array_set_size (ctx->journal, next_entry + 1); g_array_set_size (ctx->journal, next_entry + 1);