Пример #1
0
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;
}
PROC wglGetExtentionsProcAddress(HDC hdc,const char *extension_name,const char* proc_name)
{
    // this is pointer to function which returns pointer to string with list of all wgl extensions
    PFNWGLGETEXTENSIONSSTRINGARBPROC _wglGetExtensionsStringARB = NULL;

    // determine pointer to wglGetExtensionsStringEXT function
    _wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress("wglGetExtensionsStringARB");
    if(!_wglGetExtensionsStringARB){
        fprintf(stderr,"could not get wglGetExtensionsStringARB\n");
        return NULL;
    }

    if (!_wglGetExtensionsStringARB || strstr(_wglGetExtensionsStringARB(hdc), extension_name) == NULL)
    {
        fprintf(stderr,"extension %s was not found\n",extension_name);
        // string was not found
        return NULL;
    }

    // extension is supported
    return wglGetProcAddress(proc_name);
}
Пример #3
0
int _glfwPlatformExtensionSupported( const char *extension )
{
    const GLubyte *extensions;
    WGLGETEXTENSIONSSTRINGEXT_T _wglGetExtensionsStringEXT;
    WGLGETEXTENSIONSSTRINGARB_T _wglGetExtensionsStringARB;

    // Try wglGetExtensionsStringEXT
    _wglGetExtensionsStringEXT = (WGLGETEXTENSIONSSTRINGEXT_T)
        wglGetProcAddress( "wglGetExtensionsStringEXT" );
    if( _wglGetExtensionsStringEXT != NULL )
    {
        extensions = (GLubyte *) _wglGetExtensionsStringEXT();
        if( extensions != NULL )
        {
            if( _glfwStringInExtensionString( extension, extensions ) )
            {
                return GL_TRUE;
            }
        }
    }

    // Try wglGetExtensionsStringARB
    _wglGetExtensionsStringARB = (WGLGETEXTENSIONSSTRINGARB_T)
        wglGetProcAddress( "wglGetExtensionsStringARB" );
    if( _wglGetExtensionsStringARB != NULL )
    {
        extensions = (GLubyte *) _wglGetExtensionsStringARB(_glfwWin.DC);
        if( extensions != NULL )
        {
            if( _glfwStringInExtensionString( extension, extensions ) )
            {
                return GL_TRUE;
            }
        }
    }

    return GL_FALSE;
}
Пример #4
0
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;
}