[Mesa-dev] [PATCH] mesa: Fix glPopAttrib() behavior on GL_FRAMEBUFFER_SRGB.

Brian Paul brianp at vmware.com
Tue Aug 7 15:50:38 PDT 2012


On 08/07/2012 03:05 PM, Eric Anholt wrote:
> I happened to notice this while looking at a blit pass in l4d2, which had an
> optional push/pop around framebuffer srgb setting.  It didn't matter in the
> end, but the fix is sitting in my tree now.
> ---
>   src/mesa/main/attrib.c |   13 +++++++++++++
>   1 file changed, 13 insertions(+)
>
> diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c
> index 8bc7c34..9cab35b 100644
> --- a/src/mesa/main/attrib.c
> +++ b/src/mesa/main/attrib.c
> @@ -135,6 +135,9 @@ struct gl_enable_attrib
>      /* GL_ARB_point_sprite / GL_NV_point_sprite */
>      GLboolean PointSprite;
>      GLboolean FragmentShaderATI;
> +
> +   /* GL_ARB_framebuffer_sRGB / GL_EXT_framebuffer_sRGB */
> +   GLboolean sRGBEnabled;
>   };
>
>
> @@ -322,6 +325,9 @@ _mesa_PushAttrib(GLbitfield mask)
>         attr->VertexProgramPointSize = ctx->VertexProgram.PointSizeEnabled;
>         attr->VertexProgramTwoSide = ctx->VertexProgram.TwoSideEnabled;
>         save_attrib_data(&head, GL_ENABLE_BIT, attr);
> +
> +      /* GL_ARB_framebuffer_sRGB / GL_EXT_framebuffer_sRGB */
> +      attr->sRGBEnabled = ctx->Color.sRGBEnabled;
>      }
>
>      if (mask&  GL_EVAL_BIT) {
> @@ -617,6 +623,10 @@ pop_enable_group(struct gl_context *ctx, const struct gl_enable_attrib *enable)
>                      enable->VertexProgramTwoSide,
>                      GL_VERTEX_PROGRAM_TWO_SIDE_ARB);
>
> +   /* GL_ARB_framebuffer_sRGB / GL_EXT_framebuffer_sRGB */
> +   TEST_AND_UPDATE(ctx->Color.sRGBEnabled, enable->sRGBEnabled,
> +                   GL_FRAMEBUFFER_SRGB);
> +
>      /* texture unit enables */
>      for (i = 0; i<  ctx->Const.MaxTextureUnits; i++) {
>         const GLbitfield enabled = enable->Texture[i];
> @@ -981,6 +991,9 @@ _mesa_PopAttrib(void)
>                  _mesa_set_enable(ctx, GL_DITHER, color->DitherFlag);
>                  _mesa_ClampColorARB(GL_CLAMP_FRAGMENT_COLOR_ARB, color->ClampFragmentColor);
>                  _mesa_ClampColorARB(GL_CLAMP_READ_COLOR_ARB, color->ClampReadColor);
> +
> +               /* GL_ARB_framebuffer_sRGB / GL_EXT_framebuffer_sRGB */
> +               _mesa_set_enable(ctx, GL_FRAMEBUFFER_SRGB, color->sRGBEnabled);
>               }
>               break;
>            case GL_CURRENT_BIT:

Looks OK to me.  Candidate for 8.0 branch?

Reviewed-by: Brian Paul <brianp at vmware.com>



More information about the mesa-dev mailing list