static bool is_wgl_extension_supported(const char *extension, HDC dc) { _ALLEGRO_wglGetExtensionsStringARB_t _wglGetExtensionsStringARB; int ret; /* XXX deprecated in OpenGL 3.0 */ if (!glGetString(GL_EXTENSIONS)) return false; _wglGetExtensionsStringARB = (_ALLEGRO_wglGetExtensionsStringARB_t) wglGetProcAddress("wglGetExtensionsStringARB"); if (!_wglGetExtensionsStringARB) return false; ret = _al_ogl_look_for_an_extension(extension, (const GLubyte*)_wglGetExtensionsStringARB(dc)); return ret; }
static bool _ogl_is_extension_supported(const char *extension, ALLEGRO_DISPLAY *disp) { int ret = 0; GLubyte const *ext_str; #if !defined ALLEGRO_IPHONE && !defined ALLEGRO_ANDROID int v = al_get_opengl_version(); #endif (void)disp; #if defined ALLEGRO_GP2XWIZ return false; #endif #if !defined ALLEGRO_IPHONE && !defined ALLEGRO_ANDROID if (disp->flags & ALLEGRO_OPENGL_3_0 || v >= _ALLEGRO_OPENGL_VERSION_3_0) { int i; GLint ext_cnt; glGetIntegerv(GL_NUM_EXTENSIONS, &ext_cnt); for (i = 0; i < ext_cnt; i++) { ext_str = glGetStringi(GL_EXTENSIONS, i); if (ext_str && !strcmp(extension, (char*)ext_str)) { ret = 1; break; } } } else #endif { ext_str = glGetString(GL_EXTENSIONS); if (!ext_str) return false; ret = _al_ogl_look_for_an_extension(extension, ext_str); } #ifdef ALLEGRO_WINDOWS if (!ret && strncmp(extension, "WGL", 3) == 0) { ALLEGRO_DISPLAY_WGL *wgl_disp = (void*)disp; _ALLEGRO_wglGetExtensionsStringARB_t _wglGetExtensionsStringARB; if (!wgl_disp->dc) return false; _wglGetExtensionsStringARB = (void *) wglGetProcAddress("wglGetExtensionsStringARB"); if (_wglGetExtensionsStringARB) { ret = _al_ogl_look_for_an_extension(extension, (const GLubyte *) _wglGetExtensionsStringARB(wgl_disp->dc)); } } #elif defined ALLEGRO_UNIX && !defined ALLEGRO_EXCLUDE_GLX if (!ret && strncmp(extension, "GLX", 3) == 0) { ALLEGRO_SYSTEM_XGLX *sys = (void*)al_get_system_driver(); ALLEGRO_DISPLAY_XGLX *glx_disp = (void*)disp; char const *ext; if (!sys->gfxdisplay) return false; ext = glXQueryExtensionsString(sys->gfxdisplay, glx_disp->xscreen); if (!ext) { /* work around driver bugs? */ ext = ""; } ret = _al_ogl_look_for_an_extension(extension, (const GLubyte *)ext); } #endif return ret; }