GLenum GLEWAPIENTRY glewInit (void) { GLenum r; r = glewContextInit(); if ( r != 0 ) return r; #if defined(_WIN32) return wglewInit(); #elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) /* _UNIX */ return glxewInit(); #else return r; #endif /* _WIN32 */ }
void video_output_qt::init() { if (!_widget) { create_widget(); _widget->makeCurrent(); set_opengl_versions(); glewExperimental = GL_TRUE; GLenum err = glewInit(); #if HAVE_X11 if (err == GLEW_OK) { err = glxewInit(); } #endif if (err != GLEW_OK) { throw exc(str::asprintf(_("Cannot initialize GLEW: %s"), reinterpret_cast<const char *>(glewGetErrorString(err)))); } /* We essentially use OpenGL 2.1 + FBOs. Instead of checking for these two, * we check for GL 1.3 + a larger number of extensions, so that GL implementations * that do not fully support 2.1 still work. */ if (!glewIsSupported("GL_VERSION_1_3 " // at least OpenGL 1.3 is reasonable // GL_VERSION_2_0: "GL_ARB_shader_objects GL_ARB_fragment_shader " "GL_ARB_texture_non_power_of_two " // GL_VERSION_2_1: "GL_ARB_pixel_buffer_object " // FBOs. Some drivers (e.g. GeForce 6600 on Mac) only provide the EXT // version, though an ARB version exists "GL_EXT_framebuffer_object" // SRGB extensions. // GL_EXT_texture_sRGB is optional (see video_output.cpp for the test) // GL_ARB_framebuffer_sRGB is not needed (see video_output.cpp) )) { throw exc(std::string(_("This OpenGL implementation does not support required features."))); } video_output::init(); video_output::clear(); // Initialize GL things glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Start rendering _widget->doneCurrent(); _widget->start_rendering(); } }
GLenum GLEWAPIENTRY glewInit (void) { GLenum r; #if defined(GLEW_EGL) PFNEGLGETCURRENTDISPLAYPROC getCurrentDisplay = NULL; #endif r = glewContextInit(); if ( r != 0 ) return r; #if defined(GLEW_EGL) getCurrentDisplay = (PFNEGLGETCURRENTDISPLAYPROC) glewGetProcAddress("eglGetCurrentDisplay"); return eglewInit(getCurrentDisplay()); #elif defined(GLEW_OSMESA) || defined(__ANDROID__) || defined(__native_client__) || defined(__HAIKU__) return r; #elif defined(_WIN32) return wglewInit(); #elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) /* _UNIX */ return glxewInit(); #else return r; #endif /* _WIN32 */ }
bool Pipe::_configInitGLXEW() { LBASSERT( _xDisplay ); //----- Create and make current a temporary GL context to initialize GLXEW // visual std::vector<int> attributes; attributes.push_back( GLX_RGBA ); attributes.push_back( None ); const int screen = DefaultScreen( _xDisplay ); XVisualInfo *visualInfo = glXChooseVisual( _xDisplay, screen, &attributes.front( )); if( !visualInfo ) { setError( ERROR_SYSTEMPIPE_PIXELFORMAT_NOTFOUND ); return false; } //context GLXContext context = glXCreateContext( _xDisplay, visualInfo, 0, True ); if( !context ) { setError( ERROR_SYSTEMPIPE_CREATECONTEXT_FAILED ); return false; } // window const XID parent = RootWindow( _xDisplay, screen ); XSetWindowAttributes wa; wa.colormap = XCreateColormap( _xDisplay, parent, visualInfo->visual, AllocNone ); wa.background_pixmap = None; wa.border_pixel = 0; XID drawable = XCreateWindow( _xDisplay, parent, 0, 0, 16, 16, 0, visualInfo->depth, InputOutput, visualInfo->visual, CWBackPixmap | CWBorderPixel | CWColormap, &wa ); if( !drawable ) { setError( ERROR_SYSTEMPIPE_CREATEWINDOW_FAILED ); return false; } XFree( visualInfo ); XSync( _xDisplay, False ); glXMakeCurrent( _xDisplay, drawable, context ); const GLenum result = glxewInit(); bool success = result == GLEW_OK; if( success ) { LBVERB << "Pipe GLXEW initialization successful" << std::endl; success = configInitGL(); } else { setError( ERROR_GLXPIPE_GLXEWINIT_FAILED ); LBWARN << getError() << ": " << result << std::endl; } XSync( _xDisplay, False ); glXDestroyContext( _xDisplay, context ); XDestroyWindow( _xDisplay, drawable ); return success; }
GLboolean glewCreateContext (struct createParams *params) { int attrib[] = { GLX_RGBA, GLX_DOUBLEBUFFER, None }; int erb, evb; XSetWindowAttributes swa; /* open display */ dpy = XOpenDisplay(params->display); if (NULL == dpy) return GL_TRUE; /* query for glx */ if (!glXQueryExtension(dpy, &erb, &evb)) return GL_TRUE; /* choose visual */ if (params->visual == -1) { vi = glXChooseVisual(dpy, DefaultScreen(dpy), attrib); if (NULL == vi) return GL_TRUE; params->visual = (int)XVisualIDFromVisual(vi->visual); } else { int n_vis, i; vis = XGetVisualInfo(dpy, 0, NULL, &n_vis); for (i=0; i<n_vis; i++) { if ((int)XVisualIDFromVisual(vis[i].visual) == params->visual) vi = &vis[i]; } if (vi == NULL) return GL_TRUE; } /* create context */ ctx = glXCreateContext(dpy, vi, None, True); if (NULL == ctx) return GL_TRUE; /* create window */ /*wnd = XCreateSimpleWindow(dpy, RootWindow(dpy, vi->screen), 0, 0, 1, 1, 1, 0, 0);*/ cmap = XCreateColormap(dpy, RootWindow(dpy, vi->screen), vi->visual, AllocNone); swa.border_pixel = 0; swa.colormap = cmap; wnd = XCreateWindow(dpy, RootWindow(dpy, vi->screen), 0, 0, 1, 1, 0, vi->depth, InputOutput, vi->visual, CWBorderPixel | CWColormap, &swa); /* make context current */ if (!glXMakeCurrent(dpy, wnd, ctx)) return GL_TRUE; if (params->major || params->profile || params->flags) { GLXContext oldCtx = ctx; GLXFBConfig *FBConfigs; int FBConfigAttrs[] = { GLX_FBCONFIG_ID, 0, None }; int contextAttrs[20]; int nelems, i; glxewInit(); if (!glxewGetExtension("GLX_ARB_create_context")) return GL_TRUE; if (glXQueryContext(dpy, oldCtx, GLX_FBCONFIG_ID, &FBConfigAttrs[1])) return GL_TRUE; FBConfigs = glXChooseFBConfig(dpy, vi->screen, FBConfigAttrs, &nelems); if (nelems < 1) return GL_TRUE; i = 0; if (params->major) { contextAttrs[i++] = GLX_CONTEXT_MAJOR_VERSION_ARB; contextAttrs[i++] = params->major; contextAttrs[i++] = GLX_CONTEXT_MINOR_VERSION_ARB; contextAttrs[i++] = params->minor; } if (params->profile) { contextAttrs[i++] = GLX_CONTEXT_PROFILE_MASK_ARB; contextAttrs[i++] = params->profile; } if (params->flags) { contextAttrs[i++] = GLX_CONTEXT_FLAGS_ARB; contextAttrs[i++] = params->flags; } contextAttrs[i++] = None; ctx = glXCreateContextAttribsARB(dpy, *FBConfigs, NULL, True, contextAttrs); if (NULL == ctx) return GL_TRUE; if (!glXMakeCurrent(dpy, wnd, ctx)) return GL_TRUE; glXDestroyContext(dpy, oldCtx); XFree(FBConfigs); } return GL_FALSE; }