journal: avoiding some _cogl_matrix_entry_get()'s

When uploading the vertices the journal calls _cogl_matrix_entry_get()
to get a CoglMatrix for each journal entry so that it can so a software
transform. Since _cogl_matrix_entry_get() can be a performance hot-spot
and since it's trivial to keep track of the last CoglMatrixEntry seen we
now avoid repeatedly calling _cogl_matrix_entry_get() for sequential
entries with the same transform.

Reviewed-by: Neil Roberts <neil@linux.intel.com>
(cherry picked from commit 70cad61533316e2303b8e188f2f361701dfb0c61)
This commit is contained in:
Robert Bragg 2012-04-03 13:32:47 +01:00
parent e3d6bc36d3
commit 8b22b0da65

View File

@ -1070,6 +1070,8 @@ upload_vertices (CoglJournal *journal,
float *vout;
int entry_num;
int i;
CoglMatrixEntry *last_modelview_entry = NULL;
CoglMatrix modelview;
g_assert (needed_vbo_len);
@ -1107,7 +1109,6 @@ upload_vertices (CoglJournal *journal,
else
{
float v[8];
CoglMatrix modelview;
v[0] = vin[0];
v[1] = vin[1];
@ -1118,7 +1119,8 @@ upload_vertices (CoglJournal *journal,
v[6] = vin[array_stride];
v[7] = vin[1];
_cogl_matrix_entry_get (entry->modelview_entry, &modelview);
if (entry->modelview_entry != last_modelview_entry)
_cogl_matrix_entry_get (entry->modelview_entry, &modelview);
cogl_matrix_transform_points (&modelview,
2, /* n_components */
sizeof (float) * 2, /* stride_in */