--- /dev/null
+#define VG_GLDIAG_GL_GET_STRING( o, x ) fprintf( o, #x ": %s\n", glGetString( x ) );
+
+static void vg_check_gl_integerv( FILE *log, GLenum name, const char *stringname )
+{
+ GLint data;
+ glGetIntegerv( name, &data );
+ fprintf( log, "%s:%d\n", stringname, data );
+}
+
+#define VG_GLDIAG_GL_INTEGERV( o, x ) vg_check_gl_integerv( o, x, #x );
+
+static int vg_run_gfx_diagnostics(void)
+{
+ FILE *log = fopen( "gldiag.txt", "w" );
+ if( log )
+ {
+ VG_GLDIAG_GL_GET_STRING( log, GL_VERSION )
+ VG_GLDIAG_GL_GET_STRING( log, GL_VENDOR )
+ VG_GLDIAG_GL_GET_STRING( log, GL_RENDERER )
+ VG_GLDIAG_GL_GET_STRING( log, GL_SHADING_LANGUAGE_VERSION )
+
+ VG_GLDIAG_GL_INTEGERV( log, GL_MAX_3D_TEXTURE_SIZE )
+ VG_GLDIAG_GL_INTEGERV( log, GL_MAX_ARRAY_TEXTURE_LAYERS )
+ VG_GLDIAG_GL_INTEGERV( log, GL_MAX_CLIP_DISTANCES )
+ VG_GLDIAG_GL_INTEGERV( log, GL_MAX_COLOR_TEXTURE_SAMPLES )
+ VG_GLDIAG_GL_INTEGERV( log, GL_MAX_COMBINED_UNIFORM_BLOCKS )
+ VG_GLDIAG_GL_INTEGERV( log, GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS )
+ VG_GLDIAG_GL_INTEGERV( log, GL_MAX_DRAW_BUFFERS )
+ VG_GLDIAG_GL_INTEGERV( log, GL_MAX_ELEMENTS_INDICES )
+ VG_GLDIAG_GL_INTEGERV( log, GL_MAX_ELEMENTS_VERTICES )
+ VG_GLDIAG_GL_INTEGERV( log, GL_MAX_FRAGMENT_UNIFORM_BLOCKS )
+ VG_GLDIAG_GL_INTEGERV( log, GL_MAX_RENDERBUFFER_SIZE )
+ VG_GLDIAG_GL_INTEGERV( log, GL_MAX_UNIFORM_BLOCK_SIZE )
+ VG_GLDIAG_GL_INTEGERV( log, GL_NUM_EXTENSIONS )
+ VG_GLDIAG_GL_INTEGERV( log, GL_PACK_ALIGNMENT )
+
+ fclose( log );
+ }
+
+ return 0;
+}
\ No newline at end of file