aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvo Wetzel <ivo.wetzel@googlemail.com>2016-03-30 08:40:32 +0200
committerIvo Wetzel <ivo.wetzel@googlemail.com>2016-03-30 08:40:32 +0200
commit1b313df1ea64c34b65f21f5d072515c3ae2b481d (patch)
tree3a34cb0a4d1736bec9370b471a41010c41cb1fcc
parent8ae2df68e19ca71453af5e11de9ca807ef7adcb4 (diff)
downloadglutin-1b313df1ea64c34b65f21f5d072515c3ae2b481d.tar.gz
glutin-1b313df1ea64c34b65f21f5d072515c3ae2b481d.zip
glx: Support non-conformant multisampling fbconfigs.
-rw-r--r--src/api/glx/mod.rs25
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
};