[cogl] Remove CoglContext->journal_vbo{,_len}
The lifetime of the journal VBO is entirely within the scope of the cogl_journal_flush function so there is no need to store it globally in the Cogl context. Instead, upload_vertices_to_vbo just returns the new VBO. cogl_journal_flush stores this in a local variable and destroys it before returning. This also fixes an assertion when using the GLES backend which was caused by nothing initialising the journal_vbo variable.
This commit is contained in:
parent
83fc188f73
commit
e7ee240483
@ -495,19 +495,19 @@ compare_entry_strides (CoglJournalEntry *entry0, CoglJournalEntry *entry1)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static GLuint
|
||||||
upload_vertices_to_vbo (GArray *vertices, CoglJournalFlushState *state)
|
upload_vertices_to_vbo (GArray *vertices, CoglJournalFlushState *state)
|
||||||
{
|
{
|
||||||
size_t needed_vbo_len;
|
size_t needed_vbo_len;
|
||||||
|
GLuint journal_vbo;
|
||||||
|
|
||||||
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
|
_COGL_GET_CONTEXT (ctx, 0);
|
||||||
|
|
||||||
needed_vbo_len = vertices->len * sizeof (GLfloat);
|
needed_vbo_len = vertices->len * sizeof (GLfloat);
|
||||||
|
|
||||||
g_assert (ctx->journal_vbo == 0);
|
|
||||||
g_assert (needed_vbo_len);
|
g_assert (needed_vbo_len);
|
||||||
GE (glGenBuffers (1, &ctx->journal_vbo));
|
GE (glGenBuffers (1, &journal_vbo));
|
||||||
GE (glBindBuffer (GL_ARRAY_BUFFER, ctx->journal_vbo));
|
GE (glBindBuffer (GL_ARRAY_BUFFER, journal_vbo));
|
||||||
GE (glBufferData (GL_ARRAY_BUFFER,
|
GE (glBufferData (GL_ARRAY_BUFFER,
|
||||||
needed_vbo_len,
|
needed_vbo_len,
|
||||||
vertices->data,
|
vertices->data,
|
||||||
@ -516,6 +516,8 @@ upload_vertices_to_vbo (GArray *vertices, CoglJournalFlushState *state)
|
|||||||
/* As we flush the journal entries in batches we walk forward through the
|
/* As we flush the journal entries in batches we walk forward through the
|
||||||
* above VBO starting at offset 0... */
|
* above VBO starting at offset 0... */
|
||||||
state->vbo_offset = 0;
|
state->vbo_offset = 0;
|
||||||
|
|
||||||
|
return journal_vbo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* XXX NB: When _cogl_journal_flush() returns all state relating
|
/* XXX NB: When _cogl_journal_flush() returns all state relating
|
||||||
@ -527,6 +529,7 @@ _cogl_journal_flush (void)
|
|||||||
{
|
{
|
||||||
CoglJournalFlushState state;
|
CoglJournalFlushState state;
|
||||||
int i;
|
int i;
|
||||||
|
GLuint journal_vbo;
|
||||||
gboolean vbo_fallback =
|
gboolean vbo_fallback =
|
||||||
(cogl_get_features () & COGL_FEATURE_VBOS) ? FALSE : TRUE;
|
(cogl_get_features () & COGL_FEATURE_VBOS) ? FALSE : TRUE;
|
||||||
|
|
||||||
@ -541,7 +544,7 @@ _cogl_journal_flush (void)
|
|||||||
/* Load all the vertex data we have accumulated so far into a single VBO
|
/* Load all the vertex data we have accumulated so far into a single VBO
|
||||||
* to minimize memory management costs within the GL driver. */
|
* to minimize memory management costs within the GL driver. */
|
||||||
if (!vbo_fallback)
|
if (!vbo_fallback)
|
||||||
upload_vertices_to_vbo (ctx->logged_vertices, &state);
|
journal_vbo = upload_vertices_to_vbo (ctx->logged_vertices, &state);
|
||||||
else
|
else
|
||||||
state.vbo_offset = (char *)ctx->logged_vertices->data;
|
state.vbo_offset = (char *)ctx->logged_vertices->data;
|
||||||
|
|
||||||
@ -598,10 +601,7 @@ _cogl_journal_flush (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!vbo_fallback)
|
if (!vbo_fallback)
|
||||||
{
|
GE (glDeleteBuffers (1, &journal_vbo));
|
||||||
GE (glDeleteBuffers (1, &ctx->journal_vbo));
|
|
||||||
ctx->journal_vbo = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_array_set_size (ctx->journal, 0);
|
g_array_set_size (ctx->journal, 0);
|
||||||
g_array_set_size (ctx->logged_vertices, 0);
|
g_array_set_size (ctx->logged_vertices, 0);
|
||||||
|
@ -69,8 +69,6 @@ cogl_create_context ()
|
|||||||
|
|
||||||
_context->journal = g_array_new (FALSE, FALSE, sizeof (CoglJournalEntry));
|
_context->journal = g_array_new (FALSE, FALSE, sizeof (CoglJournalEntry));
|
||||||
_context->logged_vertices = g_array_new (FALSE, FALSE, sizeof (GLfloat));
|
_context->logged_vertices = g_array_new (FALSE, FALSE, sizeof (GLfloat));
|
||||||
_context->journal_vbo = 0;
|
|
||||||
_context->journal_vbo_len = 0;
|
|
||||||
|
|
||||||
_context->current_material = NULL;
|
_context->current_material = NULL;
|
||||||
_context->current_material_flags = 0;
|
_context->current_material_flags = 0;
|
||||||
|
@ -80,8 +80,6 @@ typedef struct
|
|||||||
* can batch things together. */
|
* can batch things together. */
|
||||||
GArray *journal;
|
GArray *journal;
|
||||||
GArray *logged_vertices;
|
GArray *logged_vertices;
|
||||||
GLuint journal_vbo;
|
|
||||||
size_t journal_vbo_len;
|
|
||||||
|
|
||||||
/* Some simple caching, to minimize state changes... */
|
/* Some simple caching, to minimize state changes... */
|
||||||
CoglHandle current_material;
|
CoglHandle current_material;
|
||||||
|
@ -82,7 +82,6 @@ typedef struct
|
|||||||
GArray *journal;
|
GArray *journal;
|
||||||
GArray *logged_vertices;
|
GArray *logged_vertices;
|
||||||
GArray *polygon_vertices;
|
GArray *polygon_vertices;
|
||||||
GLuint journal_vbo;
|
|
||||||
|
|
||||||
/* Some simple caching, to minimize state changes... */
|
/* Some simple caching, to minimize state changes... */
|
||||||
CoglHandle current_material;
|
CoglHandle current_material;
|
||||||
|
Loading…
Reference in New Issue
Block a user