diff options
author | tomaka <pierre.krieger1708@gmail.com> | 2016-04-06 16:34:05 +0200 |
---|---|---|
committer | tomaka <pierre.krieger1708@gmail.com> | 2016-04-06 16:34:05 +0200 |
commit | d2343106bcd1785ed18ea7b4c3b2591ca1660201 (patch) | |
tree | bbf06f5d39d56b72c2aa557eaecef826fcc6c513 /src/api | |
parent | 9a129aa86204cb798d33b3ed009de14e342748c1 (diff) | |
parent | 1b313df1ea64c34b65f21f5d072515c3ae2b481d (diff) | |
download | glutin-d2343106bcd1785ed18ea7b4c3b2591ca1660201.tar.gz glutin-d2343106bcd1785ed18ea7b4c3b2591ca1660201.zip |
Merge pull request #755 from BonsaiDen/glx_multisampling_conformance
glx: Support non-conformant multisampling fbconfigs.
Diffstat (limited to 'src/api')
-rw-r--r-- | src/api/glx/mod.rs | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/api/glx/mod.rs b/src/api/glx/mod.rs index dcdc21c..317d9ff 100644 --- a/src/api/glx/mod.rs +++ b/src/api/glx/mod.rs @@ -360,6 +360,7 @@ unsafe fn choose_fbconfig(glx: &ffi::glx::Glx, extensions: &str, xlib: &ffi::Xli -> Result<(ffi::glx::types::GLXFBConfig, PixelFormat), ()> { let descriptor = { + let mut glx_non_conformant = false; let mut out: Vec<c_int> = Vec::with_capacity(37); out.push(ffi::glx::X_RENDERABLE as c_int); @@ -382,15 +383,6 @@ unsafe fn choose_fbconfig(glx: &ffi::glx::Glx, extensions: &str, xlib: &ffi::Xli out.push(ffi::glx::RGBA_BIT as c_int); } - if let Some(hardware_accelerated) = reqs.hardware_accelerated { - out.push(ffi::glx::CONFIG_CAVEAT as c_int); - out.push(if hardware_accelerated { - ffi::glx::NONE as c_int - } else { - ffi::glx::SLOW_CONFIG as c_int - }); - } - if let Some(color) = reqs.color_bits { out.push(ffi::glx::RED_SIZE as c_int); out.push((color / 3) as c_int); @@ -425,6 +417,7 @@ unsafe fn choose_fbconfig(glx: &ffi::glx::Glx, extensions: &str, xlib: &ffi::Xli out.push(if multisampling == 0 { 0 } else { 1 }); out.push(ffi::glx_extra::SAMPLES_ARB as c_int); out.push(multisampling as c_int); + glx_non_conformant = true; } else { return Err(()); } @@ -452,6 +445,20 @@ unsafe fn choose_fbconfig(glx: &ffi::glx::Glx, extensions: &str, xlib: &ffi::Xli }, } + if let Some(hardware_accelerated) = reqs.hardware_accelerated { + let caveat = if hardware_accelerated { + ffi::glx::NONE as c_int + } else { + ffi::glx::SLOW_CONFIG as c_int + }; + out.push(ffi::glx::CONFIG_CAVEAT as c_int); + out.push(if glx_non_conformant { + caveat | ffi::glx::NON_CONFORMANT_CONFIG as c_int + } else { + caveat + }); + } + out.push(0); out }; |