mirror of
https://github.com/brl/mutter.git
synced 2024-12-24 12:02:04 +00:00
cogl-pipeline: Flush the lighting params in common code not vertend
The lighting parameters such as the diffuse and ambient colors were previously only flushed in the fixed vertend. This meant that if a vertex shader was used then they would not be set. The lighting parameters are uniforms which are just as useful in a fragment shader so it doesn't really make sense to set them in the vertend. They are now flushed in the common cogl-pipeline-opengl code but the code is #ifdef'd for GLES2 because they need to be part of the progend in that case.
This commit is contained in:
parent
e778018d0d
commit
67fdb5c9f8
@ -565,9 +565,10 @@ _cogl_pipeline_flush_color_blend_alpha_depth_state (
|
||||
blend_state->blend_dst_factor_rgb));
|
||||
}
|
||||
|
||||
#ifndef HAVE_COGL_GLES2
|
||||
|
||||
/* Under GLES2 the alpha function is implemented as part of the
|
||||
fragment shader */
|
||||
#ifndef HAVE_COGL_GLES2
|
||||
if (pipelines_difference & (COGL_PIPELINE_STATE_ALPHA_FUNC |
|
||||
COGL_PIPELINE_STATE_ALPHA_FUNC_REFERENCE))
|
||||
{
|
||||
@ -580,6 +581,28 @@ _cogl_pipeline_flush_color_blend_alpha_depth_state (
|
||||
GE (glAlphaFunc (alpha_state->alpha_func,
|
||||
alpha_state->alpha_func_reference));
|
||||
}
|
||||
|
||||
/* Under GLES2 the lighting parameters are implemented as uniforms
|
||||
in the progend */
|
||||
if (pipelines_difference & COGL_PIPELINE_STATE_LIGHTING)
|
||||
{
|
||||
CoglPipeline *authority =
|
||||
_cogl_pipeline_get_authority (pipeline, COGL_PIPELINE_STATE_LIGHTING);
|
||||
CoglPipelineLightingState *lighting_state =
|
||||
&authority->big_state->lighting_state;
|
||||
|
||||
GE (glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT,
|
||||
lighting_state->ambient));
|
||||
GE (glMaterialfv (GL_FRONT_AND_BACK, GL_DIFFUSE,
|
||||
lighting_state->diffuse));
|
||||
GE (glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR,
|
||||
lighting_state->specular));
|
||||
GE (glMaterialfv (GL_FRONT_AND_BACK, GL_EMISSION,
|
||||
lighting_state->emission));
|
||||
GE (glMaterialfv (GL_FRONT_AND_BACK, GL_SHININESS,
|
||||
&lighting_state->shininess));
|
||||
}
|
||||
|
||||
#endif /* HAVE_COGL_GLES2 */
|
||||
|
||||
if (pipelines_difference & COGL_PIPELINE_STATE_DEPTH)
|
||||
|
@ -95,25 +95,6 @@ _cogl_pipeline_vertend_fixed_end (CoglPipeline *pipeline,
|
||||
{
|
||||
_COGL_GET_CONTEXT (ctx, FALSE);
|
||||
|
||||
if (pipelines_difference & COGL_PIPELINE_STATE_LIGHTING)
|
||||
{
|
||||
CoglPipeline *authority =
|
||||
_cogl_pipeline_get_authority (pipeline, COGL_PIPELINE_STATE_LIGHTING);
|
||||
CoglPipelineLightingState *lighting_state =
|
||||
&authority->big_state->lighting_state;
|
||||
|
||||
GE (glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT,
|
||||
lighting_state->ambient));
|
||||
GE (glMaterialfv (GL_FRONT_AND_BACK, GL_DIFFUSE,
|
||||
lighting_state->diffuse));
|
||||
GE (glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR,
|
||||
lighting_state->specular));
|
||||
GE (glMaterialfv (GL_FRONT_AND_BACK, GL_EMISSION,
|
||||
lighting_state->emission));
|
||||
GE (glMaterialfv (GL_FRONT_AND_BACK, GL_SHININESS,
|
||||
&lighting_state->shininess));
|
||||
}
|
||||
|
||||
if (pipelines_difference & COGL_PIPELINE_STATE_POINT_SIZE)
|
||||
{
|
||||
CoglPipeline *authority =
|
||||
|
Loading…
Reference in New Issue
Block a user