@@ -18,14 +18,12 @@ typedef struct GLData
1818 FF_LIBRARY_SYMBOL (glGetString )
1919} GLData ;
2020
21- static const char * glHandleResult (FFOpenGLResult * result , const GLData * data , const char * library )
21+ static void glHandleResult (FFOpenGLResult * result , const GLData * data )
2222{
2323 ffStrbufAppendS (& result -> version , (const char * ) data -> ffglGetString (GL_VERSION ));
2424 ffStrbufAppendS (& result -> renderer , (const char * ) data -> ffglGetString (GL_RENDERER ));
2525 ffStrbufAppendS (& result -> vendor , (const char * ) data -> ffglGetString (GL_VENDOR ));
2626 ffStrbufAppendS (& result -> slv , (const char * ) data -> ffglGetString (GL_SHADING_LANGUAGE_VERSION ));
27- result -> library = library ;
28- return NULL ;
2927}
3028
3129#endif // FF_HAVE_GL
@@ -41,6 +39,7 @@ typedef struct EGLData
4139
4240 FF_LIBRARY_SYMBOL (eglGetProcAddress )
4341 FF_LIBRARY_SYMBOL (eglGetDisplay )
42+ FF_LIBRARY_SYMBOL (eglQueryString )
4443 FF_LIBRARY_SYMBOL (eglInitialize )
4544 FF_LIBRARY_SYMBOL (eglBindAPI )
4645 FF_LIBRARY_SYMBOL (eglGetConfigs )
@@ -62,7 +61,9 @@ static const char* eglHandleContext(FFOpenGLResult* result, EGLData* data)
6261 if (data -> ffeglMakeCurrent (data -> display , data -> surface , data -> surface , data -> context ) != EGL_TRUE )
6362 return "eglMakeCurrent returned EGL_FALSE" ;
6463
65- return glHandleResult (result , & data -> glData , "EGL" );
64+ glHandleResult (result , & data -> glData );
65+ ffStrbufSetF (& result -> library , "EGL %s" , data -> ffeglQueryString (data -> display , EGL_VERSION ));
66+ return NULL ;
6667}
6768
6869static const char * eglHandleSurface (FFOpenGLResult * result , EGLData * data )
@@ -126,6 +127,7 @@ static const char* eglPrint(FFOpenGLResult* result)
126127 FF_LIBRARY_LOAD (egl , & instance .config .library .libEGL , "dlopen egl failed" , "libEGL" FF_LIBRARY_EXTENSION , 1 );
127128 FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE (egl , eglData , eglGetProcAddress );
128129 FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE (egl , eglData , eglGetDisplay );
130+ FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE (egl , eglData , eglQueryString );
129131 FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE (egl , eglData , eglInitialize );
130132 FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE (egl , eglData , eglBindAPI );
131133 FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE (egl , eglData , eglGetConfigs );
@@ -150,6 +152,7 @@ typedef struct GLXData
150152 GLData glData ;
151153
152154 FF_LIBRARY_SYMBOL (glXGetProcAddress )
155+ FF_LIBRARY_SYMBOL (glXQueryVersion )
153156 FF_LIBRARY_SYMBOL (XOpenDisplay )
154157 FF_LIBRARY_SYMBOL (glXChooseVisual )
155158 FF_LIBRARY_SYMBOL (XCreatePixmap );
@@ -173,8 +176,15 @@ static const char* glxHandleContext(FFOpenGLResult* result, GLXData* data)
173176{
174177 if (data -> ffglXMakeCurrent (data -> display , data -> glxPixmap , data -> context ) != True )
175178 return "glXMakeCurrent returned False" ;
179+ glHandleResult (result , & data -> glData );
180+
181+ int major , minor ;
182+ if (data -> ffglXQueryVersion (data -> display , & major , & minor ))
183+ ffStrbufSetF (& result -> library , "GLX %d.%d" , major , minor );
184+ else
185+ ffStrbufSetStatic (& result -> library , "GLX" );
176186
177- return glHandleResult ( result , & data -> glData , "GLX" ) ;
187+ return NULL ;
178188}
179189
180190static const char * glxHandleGLXPixmap (FFOpenGLResult * result , GLXData * data )
@@ -242,6 +252,7 @@ static const char* glxPrint(FFOpenGLResult* result)
242252
243253 FF_LIBRARY_LOAD (glx , & instance .config .library .libGLX , "dlopen glx failed" , "libGLX" FF_LIBRARY_EXTENSION , 1 );
244254 FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE (glx , data , glXGetProcAddress );
255+ FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE (glx , data , glXQueryVersion );
245256 FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE (glx , data , XOpenDisplay );
246257 FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE (glx , data , glXChooseVisual );
247258 FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE (glx , data , XCreatePixmap );
@@ -285,7 +296,9 @@ static const char* osMesaHandleContext(FFOpenGLResult* result, OSMesaData* data)
285296 if (data -> ffOSMesaMakeCurrent (data -> context , buffer , GL_UNSIGNED_BYTE , FF_OPENGL_BUFFER_WIDTH , FF_OPENGL_BUFFER_HEIGHT ) != GL_TRUE )
286297 return "OSMesaMakeCurrent returned GL_FALSE" ;
287298
288- return glHandleResult (result , & data -> glData , "OSMesa" );
299+ glHandleResult (result , & data -> glData );
300+ ffStrbufSetF (& result -> library , "OSMesa %d.%d.%d" , OSMESA_MAJOR_VERSION , OSMESA_MINOR_VERSION , OSMESA_PATCH_VERSION );
301+ return NULL ;
289302}
290303
291304static const char * osMesaHandleData (FFOpenGLResult * result , OSMesaData * data )
0 commit comments