55 #if wxCHECK_VERSION( 3, 3, 2 )
56 int eglMajor = 0, eglMinor = 0;
58 if( aCanvas->GetEGLVersion( &eglMajor, &eglMinor ) )
59 backend = wxString::Format(
"EGL %d.%d", eglMajor, eglMinor );
60 else if(
int glxVersion = aCanvas->GetGLXVersion() )
61 backend = wxString::Format(
"GLX %d.%d", glxVersion / 10, glxVersion % 10 );
64 #if wxUSE_GLCANVAS_EGL
67 if(
int glxVersion = aCanvas->GetGLXVersion() )
68 backend = wxString::Format(
"GLX %d.%d", glxVersion / 10, glxVersion % 10 );
80#if defined( __WXGTK__ ) && wxCHECK_VERSION( 3, 3, 2 )
90 if( wxGetEnv( wxT(
"WAYLAND_DISPLAY" ),
nullptr ) && aCanvas->GetEGLVersion(
nullptr,
nullptr ) )
92 switch( aCanvas->SetSwapInterval( aVal ) )
94 case wxGLCanvas::SwapInterval::Set:
96 return aVal < 0 ? 1 : aVal;
98 case wxGLCanvas::SwapInterval::NonAdaptive:
101 case wxGLCanvas::SwapInterval::NotSet:
109#if defined( GLAD_GLX )
111 if( !wxGLCanvas::GetGLXVersion() )
114 if( Display* dpy = wxGetX11Display() )
116 if( !gladLoaderLoadGLX( dpy, DefaultScreen( dpy ) ) )
119 XID drawable = aCanvas->GetXWindow();
121 if( glXSwapIntervalEXT && glXQueryDrawable && drawable )
123 if( aVal == -1 && !GLAD_GLX_EXT_swap_control_tear )
126 unsigned clampedInterval;
127 glXSwapIntervalEXT( dpy, drawable, aVal );
128 glXQueryDrawable( dpy, drawable, GLX_SWAP_INTERVAL_EXT, &clampedInterval );
132 unsigned lateSwapsEnabled = 0;
133 glXQueryDrawable( dpy, drawable, GLX_LATE_SWAPS_TEAR_EXT, &lateSwapsEnabled );
135 if( lateSwapsEnabled )
136 clampedInterval = -1;
139 return clampedInterval;
142 if( glXSwapIntervalMESA && glXGetSwapIntervalMESA )
147 if( !glXSwapIntervalMESA( aVal ) )
151 if( glXSwapIntervalSGI )
156 if( !glXSwapIntervalSGI( aVal ) )
161#elif defined( GLAD_WGL ) && defined( GLAD_GL )
163 if( !gladLoaderLoadWGL( aCanvas->GetHDC() ) )
166 if( !gladLoaderLoadGL() )
169 const GLubyte* vendor = glGetString( GL_VENDOR );
170 const GLubyte* version = glGetString( GL_VERSION );
172 if( wglSwapIntervalEXT )
174 wxString vendorStr, versionStr;
177 vendorStr = wxString(
reinterpret_cast<const char*
>( vendor ) );
180 versionStr = wxString(
reinterpret_cast<const char*
>( version ) );
182 if( aVal == -1 && ( !wxGLCanvas::IsExtensionSupported(
"WGL_EXT_swap_control_tear" ) ) )
186 if( aVal == -1 && vendorStr == wxS(
"ATI Technologies Inc." ) )
188 wxArrayString parts = wxSplit( versionStr.AfterLast(
' ' ),
'.', 0 );
190 if( parts.size() == 4 )
194 if( parts[0].ToLong( &majorVer ) )
202 HDC hdc = wglGetCurrentDC();
203 HGLRC hglrc = wglGetCurrentContext();
207 int currentInterval = wglGetSwapIntervalEXT();
209 if( currentInterval != aVal )
211 wglSwapIntervalEXT( aVal );
212 currentInterval = wglGetSwapIntervalEXT();
215 return currentInterval;