diff options
author | Paul Berry <[email protected]> | 2012-09-24 14:24:28 -0700 |
---|---|---|
committer | Paul Berry <[email protected]> | 2012-09-25 15:01:13 -0700 |
commit | 8faa79764c394ce5ec87c5376afb5643f99c53e7 (patch) | |
tree | 18ead5a1b8d92d09e8c9437083a8975b1b99bf0a /src/mesa | |
parent | 399a03fdd63e28b719a62c5597a9aa8d56a9dd96 (diff) |
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 <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
Reviewed-by: Jordan Justen <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/main/enable.c | 22 | ||||
-rw-r--r-- | src/mesa/main/enable.h | 3 |
2 files changed, 22 insertions, 3 deletions
diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c index 3643cfb524c..676cd9baba3 100644 --- a/src/mesa/main/enable.c +++ b/src/mesa/main/enable.c @@ -264,6 +264,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. * * \param ctx GL context. @@ -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: diff --git a/src/mesa/main/enable.h b/src/mesa/main/enable.h index c49b4948dea..be790945920 100644 --- a/src/mesa/main/enable.h +++ b/src/mesa/main/enable.h @@ -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 |