diff options
author | Patrick Walton <pcwalton@mimiga.net> | 2015-12-29 13:25:03 -0500 |
---|---|---|
committer | Patrick Walton <pcwalton@mimiga.net> | 2015-12-29 18:09:19 -0500 |
commit | cf3097f6a0b3a20aa0979046343a02f072ea4b47 (patch) | |
tree | 248513b8d07acd6a0fee522d86387a78d0bc9322 | |
parent | bcddb42cfb2e8addcc66dc777465b2f8bfc64fe1 (diff) | |
download | glutin-cf3097f6a0b3a20aa0979046343a02f072ea4b47.tar.gz glutin-cf3097f6a0b3a20aa0979046343a02f072ea4b47.zip |
Add a useless call to `glXQueryVersion()` before doing anything in the GLX port to work around a bug in the VirtualBox OpenGL driver.
-rw-r--r-- | src/api/glx/mod.rs | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/api/glx/mod.rs b/src/api/glx/mod.rs index 9f3e084..a8a765f 100644 --- a/src/api/glx/mod.rs +++ b/src/api/glx/mod.rs @@ -41,6 +41,18 @@ impl Context { opengl: &'a GlAttributes<&'a Context>, display: *mut ffi::Display) -> Result<ContextPrototype<'a>, CreationError> { + // This is completely ridiculous, but VirtualBox's OpenGL driver needs some call handled by + // *it* (i.e. not Mesa) to occur before anything else can happen. That is because + // VirtualBox's OpenGL driver is going to apply binary patches to Mesa in the DLL + // constructor and until it's loaded it won't have a chance to do that. + // + // The easiest way to do this is to just call `glXQueryVersion()` before doing anything + // else. See: https://www.virtualbox.org/ticket/8293 + let (mut major, mut minor) = (0, 0); + unsafe { + glx.QueryVersion(display as *mut _, &mut major, &mut minor); + } + // loading the list of extensions let extensions = unsafe { let extensions = glx.QueryExtensionsString(display as *mut _, 0); // FIXME: screen number |