41 #if wxCHECK_VERSION( 3, 3, 2 )
42 int eglMajor = 0, eglMinor = 0;
44 if( aCanvas->GetEGLVersion( &eglMajor, &eglMinor ) )
45 backend = wxString::Format(
"EGL %d.%d", eglMajor, eglMinor );
46 else if(
int glxVersion = aCanvas->GetGLXVersion() )
47 backend = wxString::Format(
"GLX %d.%d", glxVersion / 10, glxVersion % 10 );
50 #if wxUSE_GLCANVAS_EGL
53 if(
int glxVersion = aCanvas->GetGLXVersion() )
54 backend = wxString::Format(
"GLX %d.%d", glxVersion / 10, glxVersion % 10 );
72#if ( defined( __linux__ ) || defined( __FreeBSD__ ) ) && !defined( KICAD_USE_EGL )
74 if( Display* dpy = glXGetCurrentDisplay() )
76 GLXDrawable drawable = glXGetCurrentDrawable();
78 std::string exts( glXQueryExtensionsString( dpy, DefaultScreen( dpy ) ) );
80 if( glXSwapIntervalEXT && glXQueryDrawable && drawable
81 && exts.find(
"GLX_EXT_swap_control" ) != std::string::npos )
83 if( aVal == -1 && exts.find(
"GLX_EXT_swap_control_tear" ) == std::string::npos )
86 unsigned clampedInterval;
87 glXSwapIntervalEXT( dpy, drawable, aVal );
88 glXQueryDrawable( dpy, drawable, GLX_SWAP_INTERVAL_EXT, &clampedInterval );
92 unsigned lateSwapsEnabled = 0;
93 glXQueryDrawable( dpy, drawable, GLX_LATE_SWAPS_TEAR_EXT, &lateSwapsEnabled );
95 if( lateSwapsEnabled )
99 return clampedInterval;
102 if( glXSwapIntervalMESA && glXGetSwapIntervalMESA
103 && exts.find(
"GLX_MESA_swap_control" ) != std::string::npos )
108 if( !glXSwapIntervalMESA( aVal ) )
112 if( glXSwapIntervalSGI && exts.find(
"GLX_SGI_swap_control" ) != std::string::npos )
117 if( !glXSwapIntervalSGI( aVal ) )
122#elif defined( _WIN32 )
124 const GLubyte* vendor = glGetString( GL_VENDOR );
125 const GLubyte* version = glGetString( GL_VERSION );
127 if( wglSwapIntervalEXT && wxGLCanvas::IsExtensionSupported(
"WGL_EXT_swap_control" ) )
129 wxString vendorStr = vendor;
130 wxString versionStr = version;
132 if( aVal == -1 && ( !wxGLCanvas::IsExtensionSupported(
"WGL_EXT_swap_control_tear" ) ) )
136 if( aVal == -1 && vendorStr == wxS(
"ATI Technologies Inc." ) )
138 wxArrayString parts = wxSplit( versionStr.AfterLast(
' ' ),
'.', 0 );
140 if( parts.size() == 4 )
144 if( parts[0].ToLong( &majorVer ) )
152 HDC hdc = wglGetCurrentDC();
153 HGLRC hglrc = wglGetCurrentContext();
157 int currentInterval = wglGetSwapIntervalEXT();
159 if( currentInterval != aVal )
161 wglSwapIntervalEXT( aVal );
162 currentInterval = wglGetSwapIntervalEXT();
165 return currentInterval;