vbo: bind arrays only when necessary
We don't need to call bind_arrays in the vbo module if the states which the function depends on are not dirty.
This commit is contained in:
parent
5a01361cea
commit
cfaf217135
|
@ -1643,6 +1643,7 @@ struct gl_array_attrib
|
|||
GLuint RestartIndex;
|
||||
|
||||
GLbitfield NewState; /**< mask of _NEW_ARRAY_* values */
|
||||
GLboolean RebindArrays; /**< whether the VBO module should rebind arrays */
|
||||
|
||||
/* GL_ARB_vertex_buffer_object */
|
||||
struct gl_buffer_object *ArrayBufferObj;
|
||||
|
|
|
@ -662,6 +662,8 @@ _mesa_update_state_locked( struct gl_context *ctx )
|
|||
ctx->NewState = 0;
|
||||
ctx->Driver.UpdateState(ctx, new_state);
|
||||
ctx->Array.NewState = 0;
|
||||
if (!ctx->Array.RebindArrays)
|
||||
ctx->Array.RebindArrays = (new_state & (_NEW_ARRAY | _NEW_PROGRAM)) != 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -502,8 +502,13 @@ recalculate_input_bindings(struct gl_context *ctx)
|
|||
static void
|
||||
bind_arrays(struct gl_context *ctx)
|
||||
{
|
||||
if (!ctx->Array.RebindArrays) {
|
||||
return;
|
||||
}
|
||||
|
||||
bind_array_obj(ctx);
|
||||
recalculate_input_bindings(ctx);
|
||||
ctx->Array.RebindArrays = GL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue