mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-25 14:51:30 +11:00
Add OS version detection on cocoa for selecting latest gl version. Fixes #470
This commit is contained in:
parent
d089ea8674
commit
f74f0b52a3
|
@ -340,8 +340,8 @@ impl Window {
|
||||||
// TODO: perhaps we should return error from create_context so we can
|
// TODO: perhaps we should return error from create_context so we can
|
||||||
// determine the cause of failure and possibly recover?
|
// determine the cause of failure and possibly recover?
|
||||||
let (context, pf) = match Window::create_context(*view, &builder) {
|
let (context, pf) = match Window::create_context(*view, &builder) {
|
||||||
Ok((Some(context), Some(pf))) => (context, pf),
|
Ok((context, pf)) => (context, pf),
|
||||||
_ => { return Err(OsError(format!("Couldn't create OpenGL context"))); },
|
Err(e) => { return Err(OsError(format!("Couldn't create OpenGL context: {}", e))); },
|
||||||
};
|
};
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
|
@ -466,10 +466,18 @@ impl Window {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_context(view: id, builder: &BuilderAttribs) -> Result<(Option<IdRef>, Option<PixelFormat>), CreationError> {
|
fn create_context(view: id, builder: &BuilderAttribs) -> Result<(IdRef, PixelFormat), CreationError> {
|
||||||
let profile = match (builder.gl_version, builder.gl_version.to_gl_version(), builder.gl_profile) {
|
let profile = match (builder.gl_version, builder.gl_version.to_gl_version(), builder.gl_profile) {
|
||||||
(GlRequest::Latest, _, Some(GlProfile::Compatibility)) => NSOpenGLProfileVersionLegacy as u32,
|
(GlRequest::Latest, _, Some(GlProfile::Compatibility)) => NSOpenGLProfileVersionLegacy as u32,
|
||||||
(GlRequest::Latest, _, _) => NSOpenGLProfileVersion4_1Core as u32,
|
(GlRequest::Latest, _, _) => {
|
||||||
|
if NSAppKitVersionNumber.floor() >= NSAppKitVersionNumber10_9 {
|
||||||
|
NSOpenGLProfileVersion4_1Core as u32
|
||||||
|
} else if NSAppKitVersionNumber.floor() >= NSAppKitVersionNumber10_7 {
|
||||||
|
NSOpenGLProfileVersion3_2Core as u32
|
||||||
|
} else {
|
||||||
|
NSOpenGLProfileVersionLegacy as u32
|
||||||
|
}
|
||||||
|
},
|
||||||
(_, Some((1 ... 2, _)), Some(GlProfile::Core)) |
|
(_, Some((1 ... 2, _)), Some(GlProfile::Core)) |
|
||||||
(_, Some((3 ... 4, _)), Some(GlProfile::Compatibility)) =>
|
(_, Some((3 ... 4, _)), Some(GlProfile::Compatibility)) =>
|
||||||
return Err(CreationError::NotSupported),
|
return Err(CreationError::NotSupported),
|
||||||
|
@ -513,7 +521,7 @@ impl Window {
|
||||||
// attribute list must be null terminated.
|
// attribute list must be null terminated.
|
||||||
attributes.push(0);
|
attributes.push(0);
|
||||||
|
|
||||||
Ok(unsafe {
|
unsafe {
|
||||||
let pixelformat = IdRef::new(NSOpenGLPixelFormat::alloc(nil).initWithAttributes_(&attributes));
|
let pixelformat = IdRef::new(NSOpenGLPixelFormat::alloc(nil).initWithAttributes_(&attributes));
|
||||||
|
|
||||||
if let Some(pixelformat) = pixelformat.non_nil() {
|
if let Some(pixelformat) = pixelformat.non_nil() {
|
||||||
|
@ -556,14 +564,14 @@ impl Window {
|
||||||
let value = if builder.vsync { 1 } else { 0 };
|
let value = if builder.vsync { 1 } else { 0 };
|
||||||
cxt.setValues_forParameter_(&value, NSOpenGLContextParameter::NSOpenGLCPSwapInterval);
|
cxt.setValues_forParameter_(&value, NSOpenGLContextParameter::NSOpenGLCPSwapInterval);
|
||||||
|
|
||||||
(Some(cxt), Some(pf))
|
Ok((cxt, pf))
|
||||||
} else {
|
} else {
|
||||||
(None, None)
|
Err(CreationError::NotSupported)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
(None, None)
|
Err(CreationError::NotSupported)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_closed(&self) -> bool {
|
pub fn is_closed(&self) -> bool {
|
||||||
|
|
Loading…
Reference in a new issue