cogl-material: Always reset the GLSL program to zero when flushing
When flushing a fixed-function or arbfp material it would always call disable_glsl to try to get rid of the previous GLSL shader. This is needed even if current_use_program_type is not GLSL because if an application calls cogl_program_uniform then Cogl will have to bind the program to set the uniform. If this happens then it won't update current_use_program_type presumably because the enabled state of arbfp is still valid. The problem was that disable_glsl would only select program zero when the current_use_program_type is set to GLSL which wouldn't be the case if cogl_program_uniform was called. This patch changes it to just directly call _cogl_gl_use_program_wrapper(0) instead of having a separate disable_glsl function. The current program is cached in the cogl context anyway so it shouldn't cause any extra unnecessary GL calls. http://bugzilla.clutter-project.org/show_bug.cgi?id=2232
This commit is contained in:
parent
5b6298db10
commit
89286f6a47
@ -310,17 +310,6 @@ _cogl_gl_use_program_wrapper (GLuint program)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
disable_glsl (void)
|
|
||||||
{
|
|
||||||
#ifdef COGL_MATERIAL_BACKEND_GLSL
|
|
||||||
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
|
|
||||||
|
|
||||||
if (ctx->current_use_program_type == COGL_MATERIAL_PROGRAM_TYPE_GLSL)
|
|
||||||
_cogl_gl_use_program_wrapper (0);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
disable_arbfp (void)
|
disable_arbfp (void)
|
||||||
{
|
{
|
||||||
@ -367,7 +356,7 @@ _cogl_use_program (CoglHandle program_handle, CoglMaterialProgramType type)
|
|||||||
/* _cogl_gl_use_program_wrapper can be called by cogl-program.c
|
/* _cogl_gl_use_program_wrapper can be called by cogl-program.c
|
||||||
* so we can't bailout without making sure we glUseProgram (0)
|
* so we can't bailout without making sure we glUseProgram (0)
|
||||||
* first. */
|
* first. */
|
||||||
disable_glsl ();
|
_cogl_gl_use_program_wrapper (0);
|
||||||
|
|
||||||
if (ctx->current_use_program_type == COGL_MATERIAL_PROGRAM_TYPE_ARBFP)
|
if (ctx->current_use_program_type == COGL_MATERIAL_PROGRAM_TYPE_ARBFP)
|
||||||
break;
|
break;
|
||||||
@ -387,7 +376,7 @@ _cogl_use_program (CoglHandle program_handle, CoglMaterialProgramType type)
|
|||||||
/* _cogl_gl_use_program_wrapper can be called by cogl-program.c
|
/* _cogl_gl_use_program_wrapper can be called by cogl-program.c
|
||||||
* so we can't bailout without making sure we glUseProgram (0)
|
* so we can't bailout without making sure we glUseProgram (0)
|
||||||
* first. */
|
* first. */
|
||||||
disable_glsl ();
|
_cogl_gl_use_program_wrapper (0);
|
||||||
|
|
||||||
if (ctx->current_use_program_type == COGL_MATERIAL_PROGRAM_TYPE_FIXED)
|
if (ctx->current_use_program_type == COGL_MATERIAL_PROGRAM_TYPE_FIXED)
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user