Allow using non-hardware-accelerated pixel formats

This commit is contained in:
Pierre Krieger 2015-03-01 11:46:58 +01:00
parent 7ba8fdf3f3
commit 42d38e66ab

View file

@ -195,7 +195,7 @@ pub enum MouseCursor {
/// Describes a possible format. Unused. /// Describes a possible format. Unused.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Debug)] #[derive(Debug, Clone)]
pub struct PixelFormat { pub struct PixelFormat {
pub hardware_accelerated: bool, pub hardware_accelerated: bool,
pub red_bits: u8, pub red_bits: u8,
@ -284,13 +284,10 @@ impl<'a> BuilderAttribs<'a> {
where I: Iterator<Item=(T, PixelFormat)>, T: Clone where I: Iterator<Item=(T, PixelFormat)>, T: Clone
{ {
let mut current_result = None; let mut current_result = None;
let mut current_software_result = None;
// TODO: do this more properly // TODO: do this more properly
for (id, format) in iter { for (id, format) in iter {
if !format.hardware_accelerated {
continue;
}
if format.red_bits + format.green_bits + format.blue_bits < self.color_bits.unwrap_or(0) { if format.red_bits + format.green_bits + format.blue_bits < self.color_bits.unwrap_or(0) {
continue; continue;
} }
@ -315,9 +312,13 @@ impl<'a> BuilderAttribs<'a> {
continue; continue;
} }
current_result = Some((id, format)); current_software_result = Some((id.clone(), format.clone()));
if format.hardware_accelerated {
current_result = Some((id, format));
}
} }
current_result.expect("Could not find compliant pixel format") current_result.or(current_software_result)
.expect("Could not find compliant pixel format")
} }
} }