enable: Create _mesa_set_framebuffer_srgb() function for use by meta ops.

GLES3 supports sRGB formats, but it does not support the
GL_FRAMEBUFFER_SRGB enable/disable flag (instead it behaves as if this
flag is always enabled).  Therefore, meta ops that need to disable
GL_FRAMEBUFFER_SRGB will need a backdoor mechanism to do so when the
API is GLES3.

We were already doing a similar thing for GL_MULTISAMPLE, which has
the same constraints.

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
Paul Berry
2012-09-24 14:24:28 -07:00
parent 399a03fdd6
commit 8faa79764c
2 changed files with 22 additions and 3 deletions

View File

@@ -263,6 +263,23 @@ _mesa_set_multisample(struct gl_context *ctx, GLboolean state)
}
}
/**
* Helper function to enable or disable GL_FRAMEBUFFER_SRGB, skipping the
* check for whether the API supports it (GLES doesn't).
*/
void
_mesa_set_framebuffer_srgb(struct gl_context *ctx, GLboolean state)
{
if (ctx->Color.sRGBEnabled == state)
return;
FLUSH_VERTICES(ctx, _NEW_BUFFERS);
ctx->Color.sRGBEnabled = state;
if (ctx->Driver.Enable) {
ctx->Driver.Enable(ctx, GL_FRAMEBUFFER_SRGB, state);
}
}
/**
* Helper function to enable or disable state.
*
@@ -1047,9 +1064,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
goto invalid_enum_error;
CHECK_EXTENSION(EXT_framebuffer_sRGB, cap);
FLUSH_VERTICES(ctx, _NEW_BUFFERS);
ctx->Color.sRGBEnabled = state;
break;
_mesa_set_framebuffer_srgb(ctx, state);
return;
/* GL_OES_EGL_image_external */
case GL_TEXTURE_EXTERNAL_OES:

View File

@@ -70,6 +70,9 @@ _mesa_DisableClientState( GLenum cap );
extern void
_mesa_set_multisample(struct gl_context *ctx, GLboolean state);
extern void
_mesa_set_framebuffer_srgb(struct gl_context *ctx, GLboolean state);
#endif