コード例 #1
0
ファイル: wgl_disp.c プロジェクト: dradtke/battlechess
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;
}
コード例 #2
0
ファイル: extensions.c プロジェクト: allefant/allegro
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;
}