}
+/**
+ * This is an alternative to _mesa_set_enable() to handle some special cases.
+ * See comments inside.
+ */
+static void
+meta_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
+{
+ switch (cap) {
+ case GL_MULTISAMPLE:
+ /* We need to enable/disable multisample when using GLES but this enum
+ * is not supported there.
+ */
+ if (ctx->Multisample.Enabled == state)
+ return;
+ FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);
+ ctx->Multisample.Enabled = state;
+ break;
+ default:
+ _mesa_problem(ctx, "Unexpected cap in _meta_set_enable()");
+ return;
+ }
+
+ if (ctx->Driver.Enable) {
+ ctx->Driver.Enable(ctx, cap, state);
+ }
+}
+
+
+
/**
* Enter meta state. This is like a light-weight version of glPushAttrib
* but it also resets most GL state back to default values.
if (state & MESA_META_MULTISAMPLE) {
save->MultisampleEnabled = ctx->Multisample.Enabled;
if (ctx->Multisample.Enabled)
- _mesa_set_enable(ctx, GL_MULTISAMPLE, GL_FALSE);
+ meta_set_enable(ctx, GL_MULTISAMPLE, GL_FALSE);
}
/* misc */
if (state & MESA_META_MULTISAMPLE) {
if (ctx->Multisample.Enabled != save->MultisampleEnabled)
- _mesa_set_enable(ctx, GL_MULTISAMPLE, save->MultisampleEnabled);
+ meta_set_enable(ctx, GL_MULTISAMPLE, save->MultisampleEnabled);
}
/* misc */
/* GL_ARB_multisample */
case GL_MULTISAMPLE_ARB:
- /* Technically speaking, this should not be allowed for OpenGL ES 2.0
- * or 3.0. However, meta really needs it.
- */
- if (!_mesa_meta_in_progress(ctx) && !_mesa_is_desktop_gl(ctx)
- && ctx->API != API_OPENGLES)
+ if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES)
goto invalid_enum_error;
-
if (ctx->Multisample.Enabled == state)
return;
FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE);