NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1729 most downloaded on crates.io
Cross-platform OpenGL context provider.
Last release 1 years ago
30 Apr 2025
Ships fairly regularly
a new release about every 2 months
Most releases are documented
notes for 44 of the last 60 stable releases
5 versions withdrawn
withdrawn after publishing
12 years old
139 releases · first in 2014
Updated objc2 dependency to v0.6 .
1.70 to 1.71.objc2 dependency to v0.6.Added PossiblyCurrentContext::make_not_current_in_place(&self) for when Send capability of NotCurrentContext is not required.
PossiblyCurrentContext::make_not_current_in_place(&self) for when Send capability of NotCurrentContext is not required.NotCurrentContext::make_current_surfaceless(self) andPossiblyCurrentContext::make_current_surfaceless(&self) in the CglNotCurrentContext::make_current_surfaceless(self) andPossiblyCurrentContext::make_current_surfaceless(&self) in the GlxNotCurrentContext::make_current_surfaceless(self) andPossiblyCurrentContext::make_current_surfaceless(&self) in the WglEGL_KHR_platform_gbm without EGL 1.5 client.GlContext::priority/ContextAttributesBuilder::with_priority to get/set context priority.One column per quarter.
Fixed EGL's Device::query_devices() being too strict about required extensions.
Device::query_devices() being too strict about required extensions.EglGetProcAddress on Win32-x86 platform due to wrong calling convention.Display::device() always returning an error due to invalid pointer-argument passing inside.Display::new() making an EGLDisplay::Khr when the EGL version for the display is 1.4 or lower.Device::drm_device_node_path() and Device::drm_render_device_node_path() getters to EGL via EGL_EXT_device_drm.DrmDisplayHandle in EGL's Display::with_device() using EGL_DRM_MASTER_FD_EXT from EGL_EXT_device_drm.NSView, instead of relying on Winit to do it.Device::query_devices() being too strict about required extensions.EglGetProcAddress on Win32-x86 platform due to wrong calling convention.Display::device() always returning an error due to invalid pointer-argument passing inside.Display::new() making an EGLDisplay::Khr when the EGL version for the display is 1.4 or lower.Device::drm_device_node_path() and Device::drm_render_device_node_path() getters to EGL via EGL_EXT_device_drm.DrmDisplayHandle in EGL's Display::with_device() using EGL_DRM_MASTER_FD_EXT from EGL_EXT_device_drm.NSView, instead of relying on Winit to do it.OpenHarmony platform support with EGL.Display::create_pbuffer_surface() in WGL via WGL_ARB_pbuffer.Breaking: updated raw-window-handle dependency to 0.6 .
raw-window-handle dependency to 0.6.1.65 to 1.70.windows-sys from 0.48.0 to 0.52.0.Egl and Glx raw API functions on Egl and Glx displays.GLUTIN_WGL_OPENGL_DLL environment variable to change OpenGL provider name with WGL.Change Surface to be Send . This makes it consistent with the context, so now they are both Send but not Sync .
Surface to be Send. This makes it consistent with the context, so now they are both Send but not Sync.Fixed EGL not setting context version with EGL versions before 1.5 and missing context ext.
Fixed CGLContextObj having an invalid encoding on newer macOS versions.
CGLContextObj having an invalid encoding on newer macOS versions.Breaking: bitflags which is used as a part of public API was updated to 2.0 .
1.60 to 1.65.bitflags which is used as a part of public API was updated to 2.0..*SurfaceAccessor traits got removed; their methods now on respective .*GlContext traits instead.GlContext trait is now a part of the prelude.EGLDisplay when EGL_KHR_display_reference is present.api::egl::Display::terminate to terminate the display when glutin doesn't manage it.Robustness::NoError and debug attribute when building context.Robustness::NoError not being properly enabled with GLX/WGL.Add X11VisualInfo::visual_id to get XID of the visual.
X11VisualInfo::visual_id to get XID of the visual.Display::create_pbuffer_surface() no longer sets the invalid RENDER_BUFFER attribute.Fixed lock on SwapBuffers with some GLX drivers.
Surface::is_single_buffered being inversed.Fixed EGL dereferencing raw window handles on everything but X11 in legacy Window and Pixmap surface creation.
Window and Pixmap surface creation.Flush with KHR_context_flush_control.Config's Api now has platform specific default instead of being unspecified.Altered specification for objc2 crate to pull patch update.
objc2 crate to pull patch update.Fixed handling of *_base extensions with EGL.
*_base extensions with EGL.Fixed EGL/GLX display initialization when the provided raw-window-handle has an unknown visual_id.
None for x11_visual().XError's will arrive like they should on X11.Fixed EGL display initialization with XcbDisplayHandle.
Surface::width returning the height instead of the width.GlConfig::hardware_accelerated to check if the config is hardware accelerated.GlContext::context_api to get the ContextApi used by the context.Surface::{width,height} for WGL/CGLmake_{,not}_current(), GlSurface::width(), GlSurface::height(), and GlSurface::resize() could block on macOS.Fixed wrong amount of rects committed in Surface::swap_buffers_with_damage with EGL.
Surface::swap_buffers_with_damage with EGL.Eq, PartialEq, and Hash impls for surface::Rect.Fixed robust context creation with EGL.
wayland-sys.Added new glutin-winit crate to help bootstrapping new glutin with winit.
glutin-winit crate to help bootstrapping new glutin with winit.EGLDevice wrappers for EGL.supports_transparency on GlConfig.Surface::swap_buffers takes longer with every call caused by frequent calls of the win32 function HDC GetDC(HWND hWnd).This version of `glutin` has been rewritten from the ground and no longer depends on `winit`, the `raw-window-handle` is now used instead of it.
glutin has been rewritten from the ground and no longer depends on winit, the raw-window-handle is now used instead of it.Display, Surface, Config, and Surface. For more info see crate documentation and examples.1.57 to 1.60.EGL.Surface MT safety, since before EGLSurface could be sent to a different thread, which is not safe.Surface::swap_buffers when Surface::swap_buffers_with_damage is not supported on EGL.Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix build failures when building from crates.io
Fix crash when creating OpenGLES context without explicit version.
buffer_age method on WindowedContext.Err instead of panicking when surfaceless GLX context creation fails on Linux.StaticStructGenerator to StructGenerator to dynamically load symbols.android_glue dependency with raw-window-handle, and remove broken lifecycle event handling.Context following a winit Event::Resumed event, and destroys the Context in response to a Event::Suspended event.build_raw_context now uses isize for hwnd to follow winit change.On Windows, fixed a panic for headless contexts because of active drag-and-drop (OleInitialize failed! Result was: RPC_E_CHANGED_MODE)
RPC_E_CHANGED_MODE)Updated winit dependency to 0.25.0. See winit's CHANGELOG for more info.
Updated winit dependency to 0.24.0. See winit's CHANGELOG for more info.
X11 and Wayland are now optional features (enabled by default)
Updated winit dependency to 0.23.0. See winit's CHANGELOG for more info.
On X11, Fixed unnecessary instantiation of GLX/EGL
Updated winit dependency to 0.22.0. See winit's CHANGELOG for more info.
Updated winit dependency to 0.21.0. See winit's CHANGELOG for more info.
armv7-apple-ios target.Fixed incorrectly documented default value for ContextBuilder::with_srgb
ContextBuilder::with_srgbUpdated winit dependency to 0.20.0. See winit's CHANGELOG for more info.
Fixed dependencies so wrong winit version is not used.
XRenderFindVisualFormat call so that glutin doesn't ignore configs that lack a XRenderPictFormat.- Fixed build issue.
Update winit dependency to 0.20.0-alpha4. See winit's CHANGELOG for more info.
Switched from needing a EventLoop to a EventLoopWindowTarget
EventLoop to a EventLoopWindowTargetFixed attribute handling for sRGB in WGL.
Update winit dependency to 0.20.0-alpha1. See winit's CHANGELOG for more info.
Nothing published for this version
Nothing published for this version
Bumped dependencies, fixed docs.
- Bumped dependencies.
Breaking: Removed DisplayLost variant to ContextError.
DisplayLost variant to ContextError.NotCurrentContext to NotCurrent.PossiblyCurrentContext to PossiblyCurrent.treat_as_current function.Breaking: Replaced CreationErrorPair enum variant with CreationErrors.
CreationErrorPair enum variant with CreationErrors.Clone to ContextBuilder.Debug on all public facing types.ContextTrait.OsMesaContextExt to HeadlessContextExt. Added functions
for using egl-surfaceless.WindowedContext and RawContext into typedefs of
ContextWrapper.new_windowed and new_headless from WindowedContext
and Context, respectively.NotCurrentContext and PossiblyCurrentContext,
which RawContext, WindowedContext, ContextBuilder and Context are now
generic over.{make,treat_as}_not_current function to {Raw,Windowed,}Context.libGL.so instead of libGLX.so.DisplayLost variant to ContextError.EGLDisplays while they are still in use by
others. Angry and/or salty rant can be found in glutin/src/api/egl/mod.rs,
you can't miss it.WindowedContexts now deref to Context, not Window.
Please use .window() to access the window.Backport: We now load libGL.so instead of libGLX.so.
libGL.so instead of libGLX.so.We no longer load libEGL.so and libGL.so multiple times.
libEGL.so and libGL.so multiple times.Context::is_current incorrectly returning false.ContextBuilder's pf_reqs public.GlContext{,Ext} to ContextTrait{,Ext}.GlWindow to WindowedContext.shareable_with_windowed_contexts. Now you must build
OsMesa contexts via a separate extension.ContextBuilder::build_{windowed,headless} methods.Context::new to Context::new_headless. new_headless now accepts dimensions for the off-screen surface backing it.GlWindow::new to WindowedContext::new_windowed.new_shared function from Context and GlWindow, in favor of new.build method to ContextBuilder.get_egl_display method to GlContextExt trait and its implementation for platforms.NoBackendAvailable is now Sync, as a result CreationError is also Sync.Breaking: The entire API for headless contexts has been removed. Please instead use Context::new() when trying to make a context without a visible win
Context::new() when trying to make a context without a visible window. Also removed headless feature.GlContext trait must now be sized.CreationErrorPair enum variant to enum CreationError.cocoa and core-graphics updates.
OsError variant to ContextError.Fix regression that prevented automatic graphics switching in macOS (#980).
ContextBuilder::with_double_buffer function.ContextBuilder::with_hardware_acceleration function.CreationError::OpenGlVersionNotSupported
in some configurations
(#1036).Update winit dependency to 0.14.0. See winit's CHANGELOG for more info.
Update winit dependency to 0.13.0. See winit's CHANGELOG for more info.
Update Wayland backend to not use deprecated get_inner_size_points method.
get_inner_size_points method.Fix Android activity life cycle.
Update winit dependency to 0.11.1. See winit's CHANGELOG for more info.
Nothing published for this version
Don't use yanked version of winit.
Add support for winapi 0.3 (#975).
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →