[matrix-stack] Adds ctx->flushed_matrix_mode to cache the gl matrix mode
This cache of the gl matrix mode lets us avoid repeat calls to glMatrixMode in _cogl_matrix_stack_flush_to_gl when we have lots of sequential modelview matrix modifications.
This commit is contained in:
parent
43f8032a7f
commit
01887460f6
@ -65,6 +65,7 @@ cogl_create_context (void)
|
|||||||
|
|
||||||
_context->indirect = gl_is_indirect;
|
_context->indirect = gl_is_indirect;
|
||||||
|
|
||||||
|
_context->flushed_matrix_mode = COGL_MATRIX_MODELVIEW;
|
||||||
_context->texture_units = NULL;
|
_context->texture_units = NULL;
|
||||||
|
|
||||||
_context->default_material = cogl_material_new ();
|
_context->default_material = cogl_material_new ();
|
||||||
|
@ -59,6 +59,7 @@ typedef struct
|
|||||||
gboolean indirect;
|
gboolean indirect;
|
||||||
|
|
||||||
CoglMatrixMode matrix_mode;
|
CoglMatrixMode matrix_mode;
|
||||||
|
CoglMatrixMode flushed_matrix_mode;
|
||||||
CoglMatrixStack *projection_stack;
|
CoglMatrixStack *projection_stack;
|
||||||
CoglMatrixStack *modelview_stack;
|
CoglMatrixStack *modelview_stack;
|
||||||
|
|
||||||
|
@ -385,26 +385,32 @@ _cogl_matrix_stack_flush_to_gl (CoglMatrixStack *stack,
|
|||||||
CoglMatrixMode mode)
|
CoglMatrixMode mode)
|
||||||
{
|
{
|
||||||
CoglMatrixState *state;
|
CoglMatrixState *state;
|
||||||
GLenum gl_mode;
|
|
||||||
|
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
|
||||||
|
|
||||||
state = _cogl_matrix_stack_top (stack);
|
state = _cogl_matrix_stack_top (stack);
|
||||||
|
|
||||||
if (stack->flushed_state == state)
|
if (stack->flushed_state == state)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (mode)
|
if (ctx->flushed_matrix_mode != mode)
|
||||||
{
|
{
|
||||||
case COGL_MATRIX_MODELVIEW:
|
GLenum gl_mode;
|
||||||
gl_mode = GL_MODELVIEW;
|
switch (mode)
|
||||||
break;
|
{
|
||||||
case COGL_MATRIX_PROJECTION:
|
case COGL_MATRIX_MODELVIEW:
|
||||||
gl_mode = GL_PROJECTION;
|
gl_mode = GL_MODELVIEW;
|
||||||
break;
|
break;
|
||||||
case COGL_MATRIX_TEXTURE:
|
case COGL_MATRIX_PROJECTION:
|
||||||
gl_mode = GL_TEXTURE;
|
gl_mode = GL_PROJECTION;
|
||||||
break;
|
break;
|
||||||
|
case COGL_MATRIX_TEXTURE:
|
||||||
|
gl_mode = GL_TEXTURE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
GE (glMatrixMode (gl_mode));
|
||||||
|
ctx->flushed_matrix_mode = mode;
|
||||||
}
|
}
|
||||||
GE (glMatrixMode (gl_mode));
|
|
||||||
|
|
||||||
/* In theory it might help the GL implementation if we used our
|
/* In theory it might help the GL implementation if we used our
|
||||||
* local analysis of the matrix and called Translate/Scale rather
|
* local analysis of the matrix and called Translate/Scale rather
|
||||||
|
Loading…
Reference in New Issue
Block a user