static struct eglut_window * _eglutCreateWindow(const char *title, int x, int y, int w, int h) { struct eglut_window *win; win = calloc(1, sizeof(*win)); if (!win) _eglutFatal("failed to allocate window"); win->config = _eglutChooseConfig(); eglBindAPI(EGL_OPENGL_API); win->context = eglCreateContext(_eglut->dpy, win->config, EGL_NO_CONTEXT, NULL); if (!win->context) _eglutFatal("failed to create context"); _eglutNativeInitWindow(win, title, x, y, w, h); switch (_eglut->surface_type) { case EGL_WINDOW_BIT: win->surface = eglCreateWindowSurface(_eglut->dpy, win->config, win->native.u.window, NULL); break; default: break; } if (win->surface == EGL_NO_SURFACE) _eglutFatal("failed to create surface"); return win; }
static struct eglut_window * _eglutCreateWindow(const char *title, int x, int y, int w, int h) { struct eglut_window *win; EGLint context_attribs[4]; EGLint api, i; win = calloc(1, sizeof(*win)); if (!win) _eglutFatal("failed to allocate window"); win->config = _eglutChooseConfig(); i = 0; context_attribs[i] = EGL_NONE; /* multiple APIs? */ api = EGL_OPENGL_ES_API; if (_eglut->api_mask & EGLUT_OPENGL_BIT) { api = EGL_OPENGL_API; } else if (_eglut->api_mask & EGLUT_OPENVG_BIT) { api = EGL_OPENVG_API; } else if (_eglut->api_mask & EGLUT_OPENGL_ES2_BIT) { context_attribs[i++] = EGL_CONTEXT_CLIENT_VERSION; context_attribs[i++] = 2; } context_attribs[i] = EGL_NONE; eglBindAPI(api); win->context = eglCreateContext(_eglut->dpy, win->config, EGL_NO_CONTEXT, context_attribs); if (!win->context) _eglutFatal("failed to create context"); _eglutNativeInitWindow(win, title, x, y, w, h); switch (_eglut->surface_type) { case EGL_WINDOW_BIT: win->surface = eglCreateWindowSurface(_eglut->dpy, win->config, win->native.u.window, NULL); break; case EGL_PIXMAP_BIT: win->surface = eglCreatePixmapSurface(_eglut->dpy, win->config, win->native.u.pixmap, NULL); break; case EGL_PBUFFER_BIT: case EGL_SCREEN_BIT_MESA: win->surface = win->native.u.surface; break; default: break; } if (win->surface == EGL_NO_SURFACE) _eglutFatal("failed to create surface"); return win; }