mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-25 14:51:30 +11:00
Extract PixelFormatRequirements from BuilderAttribs
This commit is contained in:
parent
48fe9b2644
commit
58b3bfb4fb
|
@ -471,16 +471,16 @@ impl Window {
|
||||||
// full color size and hope for the best. Another hiccup is that
|
// full color size and hope for the best. Another hiccup is that
|
||||||
// `NSOpenGLPFAColorSize` also includes `NSOpenGLPFAAlphaSize`,
|
// `NSOpenGLPFAColorSize` also includes `NSOpenGLPFAAlphaSize`,
|
||||||
// so we have to account for that as well.
|
// so we have to account for that as well.
|
||||||
let alpha_depth = builder.alpha_bits.unwrap_or(8);
|
let alpha_depth = builder.pf_reqs.alpha_bits.unwrap_or(8);
|
||||||
let color_depth = builder.color_bits.unwrap_or(24) + alpha_depth;
|
let color_depth = builder.pf_reqs.color_bits.unwrap_or(24) + alpha_depth;
|
||||||
|
|
||||||
let mut attributes = vec![
|
let mut attributes = vec![
|
||||||
NSOpenGLPFADoubleBuffer as u32,
|
NSOpenGLPFADoubleBuffer as u32,
|
||||||
NSOpenGLPFAClosestPolicy as u32,
|
NSOpenGLPFAClosestPolicy as u32,
|
||||||
NSOpenGLPFAColorSize as u32, color_depth as u32,
|
NSOpenGLPFAColorSize as u32, color_depth as u32,
|
||||||
NSOpenGLPFAAlphaSize as u32, alpha_depth as u32,
|
NSOpenGLPFAAlphaSize as u32, alpha_depth as u32,
|
||||||
NSOpenGLPFADepthSize as u32, builder.depth_bits.unwrap_or(24) as u32,
|
NSOpenGLPFADepthSize as u32, builder.pf_reqs.depth_bits.unwrap_or(24) as u32,
|
||||||
NSOpenGLPFAStencilSize as u32, builder.stencil_bits.unwrap_or(8) as u32,
|
NSOpenGLPFAStencilSize as u32, builder.pf_reqs.stencil_bits.unwrap_or(8) as u32,
|
||||||
NSOpenGLPFAOpenGLProfile as u32, profile,
|
NSOpenGLPFAOpenGLProfile as u32, profile,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -491,7 +491,7 @@ impl Window {
|
||||||
attributes.push(NSOpenGLPFAColorFloat as u32);
|
attributes.push(NSOpenGLPFAColorFloat as u32);
|
||||||
}
|
}
|
||||||
|
|
||||||
builder.multisampling.map(|samples| {
|
builder.pf_reqs.multisampling.map(|samples| {
|
||||||
attributes.push(NSOpenGLPFAMultisample as u32);
|
attributes.push(NSOpenGLPFAMultisample as u32);
|
||||||
attributes.push(NSOpenGLPFASampleBuffers as u32); attributes.push(1);
|
attributes.push(NSOpenGLPFASampleBuffers as u32); attributes.push(1);
|
||||||
attributes.push(NSOpenGLPFASamples as u32); attributes.push(samples as u32);
|
attributes.push(NSOpenGLPFASamples as u32); attributes.push(samples as u32);
|
||||||
|
|
65
src/lib.rs
65
src/lib.rs
|
@ -371,13 +371,7 @@ pub struct BuilderAttribs<'a> {
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
headless: bool,
|
headless: bool,
|
||||||
strict: bool,
|
strict: bool,
|
||||||
multisampling: Option<u16>,
|
pf_reqs: PixelFormatRequirements,
|
||||||
depth_bits: Option<u8>,
|
|
||||||
stencil_bits: Option<u8>,
|
|
||||||
color_bits: Option<u8>,
|
|
||||||
alpha_bits: Option<u8>,
|
|
||||||
stereoscopy: bool,
|
|
||||||
srgb: Option<bool>,
|
|
||||||
window: WindowAttributes,
|
window: WindowAttributes,
|
||||||
opengl: GlAttributes<&'a platform::Window>,
|
opengl: GlAttributes<&'a platform::Window>,
|
||||||
}
|
}
|
||||||
|
@ -387,13 +381,7 @@ impl BuilderAttribs<'static> {
|
||||||
BuilderAttribs {
|
BuilderAttribs {
|
||||||
headless: false,
|
headless: false,
|
||||||
strict: false,
|
strict: false,
|
||||||
multisampling: None,
|
pf_reqs: Default::default(),
|
||||||
depth_bits: None,
|
|
||||||
stencil_bits: None,
|
|
||||||
color_bits: None,
|
|
||||||
alpha_bits: None,
|
|
||||||
stereoscopy: false,
|
|
||||||
srgb: None,
|
|
||||||
window: Default::default(),
|
window: Default::default(),
|
||||||
opengl: Default::default(),
|
opengl: Default::default(),
|
||||||
}
|
}
|
||||||
|
@ -408,13 +396,7 @@ impl<'a> BuilderAttribs<'a> {
|
||||||
let new_attribs = BuilderAttribs {
|
let new_attribs = BuilderAttribs {
|
||||||
headless: self.headless,
|
headless: self.headless,
|
||||||
strict: self.strict,
|
strict: self.strict,
|
||||||
multisampling: self.multisampling,
|
pf_reqs: self.pf_reqs,
|
||||||
depth_bits: self.depth_bits,
|
|
||||||
stencil_bits: self.stencil_bits,
|
|
||||||
color_bits: self.color_bits,
|
|
||||||
alpha_bits: self.alpha_bits,
|
|
||||||
stereoscopy: self.stereoscopy,
|
|
||||||
srgb: self.srgb,
|
|
||||||
window: self.window,
|
window: self.window,
|
||||||
opengl: GlAttributes {
|
opengl: GlAttributes {
|
||||||
sharing: None,
|
sharing: None,
|
||||||
|
@ -434,27 +416,27 @@ impl<'a> BuilderAttribs<'a> {
|
||||||
{
|
{
|
||||||
// filtering formats that don't match the requirements
|
// filtering formats that don't match the requirements
|
||||||
let iter = iter.into_iter().filter(|&(_, ref format)| {
|
let iter = iter.into_iter().filter(|&(_, ref format)| {
|
||||||
if format.color_bits < self.color_bits.unwrap_or(0) {
|
if format.color_bits < self.pf_reqs.color_bits.unwrap_or(0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if format.alpha_bits < self.alpha_bits.unwrap_or(0) {
|
if format.alpha_bits < self.pf_reqs.alpha_bits.unwrap_or(0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if format.depth_bits < self.depth_bits.unwrap_or(0) {
|
if format.depth_bits < self.pf_reqs.depth_bits.unwrap_or(0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if format.stencil_bits < self.stencil_bits.unwrap_or(0) {
|
if format.stencil_bits < self.pf_reqs.stencil_bits.unwrap_or(0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if !format.stereoscopy && self.stereoscopy {
|
if !format.stereoscopy && self.pf_reqs.stereoscopy {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(req_ms) = self.multisampling {
|
if let Some(req_ms) = self.pf_reqs.multisampling {
|
||||||
match format.multisampling {
|
match format.multisampling {
|
||||||
Some(val) if val >= req_ms => (),
|
Some(val) if val >= req_ms => (),
|
||||||
_ => return false
|
_ => return false
|
||||||
|
@ -465,7 +447,7 @@ impl<'a> BuilderAttribs<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(srgb) = self.srgb {
|
if let Some(srgb) = self.pf_reqs.srgb {
|
||||||
if srgb != format.srgb {
|
if srgb != format.srgb {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -529,6 +511,33 @@ impl<'a> BuilderAttribs<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// VERY UNSTABLE! Describes how the backend should choose a pixel format.
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
#[allow(missing_docs)]
|
||||||
|
pub struct PixelFormatRequirements {
|
||||||
|
pub multisampling: Option<u16>,
|
||||||
|
pub depth_bits: Option<u8>,
|
||||||
|
pub stencil_bits: Option<u8>,
|
||||||
|
pub color_bits: Option<u8>,
|
||||||
|
pub alpha_bits: Option<u8>,
|
||||||
|
pub stereoscopy: bool,
|
||||||
|
pub srgb: Option<bool>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for PixelFormatRequirements {
|
||||||
|
fn default() -> PixelFormatRequirements {
|
||||||
|
PixelFormatRequirements {
|
||||||
|
multisampling: None,
|
||||||
|
depth_bits: None,
|
||||||
|
stencil_bits: None,
|
||||||
|
color_bits: None,
|
||||||
|
alpha_bits: None,
|
||||||
|
stereoscopy: false,
|
||||||
|
srgb: None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Attributes to use when creating a window.
|
/// Attributes to use when creating a window.
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct WindowAttributes {
|
pub struct WindowAttributes {
|
||||||
|
|
|
@ -110,38 +110,38 @@ impl<'a> WindowBuilder<'a> {
|
||||||
/// Will panic if `samples` is not a power of two.
|
/// Will panic if `samples` is not a power of two.
|
||||||
pub fn with_multisampling(mut self, samples: u16) -> WindowBuilder<'a> {
|
pub fn with_multisampling(mut self, samples: u16) -> WindowBuilder<'a> {
|
||||||
assert!(samples.is_power_of_two());
|
assert!(samples.is_power_of_two());
|
||||||
self.attribs.multisampling = Some(samples);
|
self.attribs.pf_reqs.multisampling = Some(samples);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sets the number of bits in the depth buffer.
|
/// Sets the number of bits in the depth buffer.
|
||||||
pub fn with_depth_buffer(mut self, bits: u8) -> WindowBuilder<'a> {
|
pub fn with_depth_buffer(mut self, bits: u8) -> WindowBuilder<'a> {
|
||||||
self.attribs.depth_bits = Some(bits);
|
self.attribs.pf_reqs.depth_bits = Some(bits);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sets the number of bits in the stencil buffer.
|
/// Sets the number of bits in the stencil buffer.
|
||||||
pub fn with_stencil_buffer(mut self, bits: u8) -> WindowBuilder<'a> {
|
pub fn with_stencil_buffer(mut self, bits: u8) -> WindowBuilder<'a> {
|
||||||
self.attribs.stencil_bits = Some(bits);
|
self.attribs.pf_reqs.stencil_bits = Some(bits);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sets the number of bits in the color buffer.
|
/// Sets the number of bits in the color buffer.
|
||||||
pub fn with_pixel_format(mut self, color_bits: u8, alpha_bits: u8) -> WindowBuilder<'a> {
|
pub fn with_pixel_format(mut self, color_bits: u8, alpha_bits: u8) -> WindowBuilder<'a> {
|
||||||
self.attribs.color_bits = Some(color_bits);
|
self.attribs.pf_reqs.color_bits = Some(color_bits);
|
||||||
self.attribs.alpha_bits = Some(alpha_bits);
|
self.attribs.pf_reqs.alpha_bits = Some(alpha_bits);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Request the backend to be stereoscopic.
|
/// Request the backend to be stereoscopic.
|
||||||
pub fn with_stereoscopy(mut self) -> WindowBuilder<'a> {
|
pub fn with_stereoscopy(mut self) -> WindowBuilder<'a> {
|
||||||
self.attribs.stereoscopy = true;
|
self.attribs.pf_reqs.stereoscopy = true;
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sets whether sRGB should be enabled on the window. `None` means "I don't care".
|
/// Sets whether sRGB should be enabled on the window. `None` means "I don't care".
|
||||||
pub fn with_srgb(mut self, srgb_enabled: Option<bool>) -> WindowBuilder<'a> {
|
pub fn with_srgb(mut self, srgb_enabled: Option<bool>) -> WindowBuilder<'a> {
|
||||||
self.attribs.srgb = srgb_enabled;
|
self.attribs.pf_reqs.srgb = srgb_enabled;
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue