diff options
author | tomaka <pierre.krieger1708@gmail.com> | 2016-01-07 15:44:34 +0100 |
---|---|---|
committer | tomaka <pierre.krieger1708@gmail.com> | 2016-01-07 15:44:34 +0100 |
commit | 64dbf51105f27f849c5dbd43b930c83d68bb4e2b (patch) | |
tree | 3a14421cafbb64f31132ac021e27e052851591f1 /src/api/glx | |
parent | f59be2588c47a8dab2da00f12661d204576c0bd3 (diff) | |
parent | 83190432982e4adb2fe14bf3f0de20f6a74fadba (diff) | |
download | glutin-64dbf51105f27f849c5dbd43b930c83d68bb4e2b.tar.gz glutin-64dbf51105f27f849c5dbd43b930c83d68bb4e2b.zip |
Merge pull request #699 from tomaka/screen-id
Fix wrong screen ID used on GLX
Diffstat (limited to 'src/api/glx')
-rw-r--r-- | src/api/glx/mod.rs | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/api/glx/mod.rs b/src/api/glx/mod.rs index a8a765f..d3f28ed 100644 --- a/src/api/glx/mod.rs +++ b/src/api/glx/mod.rs @@ -38,8 +38,8 @@ fn with_c_str<F, T>(s: &str, f: F) -> T where F: FnOnce(*const libc::c_char) -> impl Context { pub fn new<'a>(glx: ffi::glx::Glx, xlib: &ffi::Xlib, pf_reqs: &PixelFormatRequirements, - opengl: &'a GlAttributes<&'a Context>, display: *mut ffi::Display) - -> Result<ContextPrototype<'a>, CreationError> + opengl: &'a GlAttributes<&'a Context>, display: *mut ffi::Display, + screen_id: libc::c_int) -> 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 @@ -55,14 +55,14 @@ impl Context { // loading the list of extensions let extensions = unsafe { - let extensions = glx.QueryExtensionsString(display as *mut _, 0); // FIXME: screen number + let extensions = glx.QueryExtensionsString(display as *mut _, screen_id); let extensions = CStr::from_ptr(extensions).to_bytes().to_vec(); String::from_utf8(extensions).unwrap() }; // finding the pixel format we want let (fb_config, pixel_format) = unsafe { - try!(choose_fbconfig(&glx, &extensions, xlib, display, pf_reqs) + try!(choose_fbconfig(&glx, &extensions, xlib, display, screen_id, pf_reqs) .map_err(|_| CreationError::NoAvailablePixelFormat)) }; @@ -355,7 +355,8 @@ fn create_context(glx: &ffi::glx::Glx, extra_functions: &ffi::glx_extra::Glx, ex /// Enumerates all available FBConfigs unsafe fn choose_fbconfig(glx: &ffi::glx::Glx, extensions: &str, xlib: &ffi::Xlib, - display: *mut ffi::Display, reqs: &PixelFormatRequirements) + display: *mut ffi::Display, screen_id: libc::c_int, + reqs: &PixelFormatRequirements) -> Result<(ffi::glx::types::GLXFBConfig, PixelFormat), ()> { let descriptor = { @@ -459,7 +460,7 @@ unsafe fn choose_fbconfig(glx: &ffi::glx::Glx, extensions: &str, xlib: &ffi::Xli // calling glXChooseFBConfig let fb_config = { let mut num_configs = 1; - let result = glx.ChooseFBConfig(display as *mut _, 0, descriptor.as_ptr(), + let result = glx.ChooseFBConfig(display as *mut _, screen_id, descriptor.as_ptr(), &mut num_configs); if result.is_null() { return Err(()); } if num_configs == 0 { return Err(()); } |