egl: prototype some multi-API code
authorBrian Paul <brian.paul@tungstengraphics.com>
Fri, 30 May 2008 21:23:03 +0000 (15:23 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 4 Jun 2008 14:57:15 +0000 (08:57 -0600)
src/gallium/winsys/egl_xlib/egl_xlib.c

index 99389970f55d4a3780ddaf473bf1fe51965ef0c8..ce3a0ae0daa99cfcb721385766f79e56b8d433ab 100644 (file)
@@ -313,19 +313,21 @@ xlib_eglCreateContext(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config,
       return EGL_NO_CONTEXT;
    }
 
-   if (ctx->Base.ClientAPI != EGL_OPENGL_API) {
-      _eglError(EGL_BAD_MATCH, "eglCreateContext(only OpenGL API supported)");
+   /* API-dependent context creation */
+   switch (ctx->Base.ClientAPI) {
+   case EGL_OPENGL_API:
+      /* create a softpipe context */
+      ctx->pipe = softpipe_create(xdrv->screen, xdrv->winsys, NULL);
+      /* Now do xlib / state tracker inits here */
+      _eglConfigToContextModesRec(conf, &visual);
+      ctx->Context = st_create_context(ctx->pipe, &visual, share_ctx);
+      break;
+   default:
+      _eglError(EGL_BAD_MATCH, "eglCreateContext(unsupported API)");
       free(ctx);
       return EGL_NO_CONTEXT;
    }
 
-   /* create a softpipe context */
-   ctx->pipe = softpipe_create(xdrv->screen, xdrv->winsys, NULL);
-
-   /* Now do xlib / state tracker inits here */
-   _eglConfigToContextModesRec(conf, &visual);
-   ctx->Context = st_create_context(ctx->pipe, &visual, share_ctx);
-
    _eglSaveContext(&ctx->Base);
 
    return _eglGetContextHandle(&ctx->Base);
@@ -341,7 +343,14 @@ xlib_eglDestroyContext(_EGLDriver *drv, EGLDisplay dpy, EGLContext ctx)
          context->Base.DeletePending = EGL_TRUE;
       }
       else {
-         st_destroy_context(context->Context);
+         /* API-dependent clean-up */
+         switch (context->Base.ClientAPI) {
+         case EGL_OPENGL_API:
+            st_destroy_context(context->Context);
+            break;
+         default:
+            assert(0);
+         }
          free(context);
       }
       return EGL_TRUE;