enable: Create _mesa_set_framebuffer_srgb() function for use by meta ops.
authorPaul Berry <stereotype441@gmail.com>
Mon, 24 Sep 2012 21:24:28 +0000 (14:24 -0700)
committerPaul Berry <stereotype441@gmail.com>
Tue, 25 Sep 2012 22:01:13 +0000 (15:01 -0700)
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>
src/mesa/main/enable.c
src/mesa/main/enable.h

index 3643cfb524ca3455aaac8c850e1e35e14714c2c9..676cd9baba3416935d454f7163b36f4ad44573fa 100644 (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:
index c49b4948dea051d635854faeb227dac35fb646e6..be790945920366e765730f5172e14c339e8e236d 100644 (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