diff options
Diffstat (limited to 'src/api/glx')
-rw-r--r-- | src/api/glx/mod.rs | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/api/glx/mod.rs b/src/api/glx/mod.rs index f1eb436..455f6a5 100644 --- a/src/api/glx/mod.rs +++ b/src/api/glx/mod.rs @@ -1,6 +1,7 @@ #![cfg(all(target_os = "linux", feature = "window"))] use BuilderAttribs; +use ContextError; use CreationError; use GlContext; use GlProfile; @@ -139,11 +140,13 @@ impl Context { } impl GlContext for Context { - unsafe fn make_current(&self) { + unsafe fn make_current(&self) -> Result<(), ContextError> { + // TODO: glutin needs some internal changes for proper error recovery let res = self.glx.MakeCurrent(self.display as *mut _, self.window, self.context); if res == 0 { panic!("glx::MakeCurrent failed"); } + Ok(()) } fn is_current(&self) -> bool { @@ -158,10 +161,10 @@ impl GlContext for Context { } } - fn swap_buffers(&self) { - unsafe { - self.glx.SwapBuffers(self.display as *mut _, self.window) - } + fn swap_buffers(&self) -> Result<(), ContextError> { + // TODO: glutin needs some internal changes for proper error recovery + unsafe { self.glx.SwapBuffers(self.display as *mut _, self.window); } + Ok(()) } fn get_api(&self) -> ::Api { @@ -179,8 +182,10 @@ unsafe impl Sync for Context {} impl Drop for Context { fn drop(&mut self) { unsafe { - // we don't call MakeCurrent(0, 0) because we are not sure that the context - // is still the current one + if self.is_current() { + self.glx.MakeCurrent(self.display as *mut _, 0, ptr::null_mut()); + } + self.glx.DestroyContext(self.display as *mut _, self.context); } } |