From a42f1f58333a9899d36e18e641f3f52517dd58b1 Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Wed, 29 Apr 2015 23:05:47 -0400 Subject: Implemented gl_core flag --- src/api/cocoa/mod.rs | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) (limited to 'src/api/cocoa/mod.rs') diff --git a/src/api/cocoa/mod.rs b/src/api/cocoa/mod.rs index 7114a87..bbc110d 100644 --- a/src/api/cocoa/mod.rs +++ b/src/api/cocoa/mod.rs @@ -9,6 +9,7 @@ use libc; use Api; use BuilderAttribs; +use CreationError; use GlContext; use GlRequest; use PixelFormat; @@ -334,7 +335,6 @@ impl Window { Some(window) => window, None => { return Err(OsError(format!("Couldn't create NSWindow"))); }, }; - let view = match Window::create_view(*window) { Some(view) => view, None => { return Err(OsError(format!("Couldn't create NSView"))); }, @@ -469,18 +469,17 @@ impl Window { } } - fn create_context(view: id, builder: &BuilderAttribs) -> (Option, Option) { - let profile = match builder.gl_version { - GlRequest::Latest => NSOpenGLProfileVersion4_1Core as u32, - GlRequest::Specific(Api::OpenGl, (1 ... 2, _)) => NSOpenGLProfileVersionLegacy as u32, - GlRequest::Specific(Api::OpenGl, (3, 0)) => NSOpenGLProfileVersionLegacy as u32, - GlRequest::Specific(Api::OpenGl, (3, 1 ... 2)) => NSOpenGLProfileVersion3_2Core as u32, - GlRequest::Specific(Api::OpenGl, _) => NSOpenGLProfileVersion4_1Core as u32, - GlRequest::Specific(_, _) => panic!("Only the OpenGL API is supported"), // FIXME: return Result - GlRequest::GlThenGles { opengl_version: (1 ... 2, _), .. } => NSOpenGLProfileVersionLegacy as u32, - GlRequest::GlThenGles { opengl_version: (3, 0), .. } => NSOpenGLProfileVersionLegacy as u32, - GlRequest::GlThenGles { opengl_version: (3, 1 ... 2), .. } => NSOpenGLProfileVersion3_2Core as u32, - GlRequest::GlThenGles { .. } => NSOpenGLProfileVersion4_1Core as u32, + fn create_context(view: id, builder: &BuilderAttribs) -> Result<(Option, Option), CreationError> { + let profile = match (builder.gl_version, builder.gl_version.to_gl_version(), builder.gl_core) { + (GlRequest::Latest, _, Some(false)) => NSOpenGLProfileVersionLegacy as u32, + (GlRequest::Latest, _, _) => NSOpenGLProfileVersion4_1Core as u32, + (_, Some(1 ... 2, _), Some(true)) | + (_, Some(3 ... 4, _), Some(false)) => + return Err(CreationError::NotSupported), + (_, Some(1 ... 2, _), _) => NSOpenGLProfileVersionLegacy as u32, + (_, Some(3, 0 ... 2), _) => NSOpenGLProfileVersion3_2Core as u32, + (_, Some(3 ... 4, _), _) => NSOpenGLProfileVersion4_1Core as u32, + _ => return Err(CreationError::NotSupported), }; // NOTE: OS X no longer has the concept of setting individual @@ -517,7 +516,7 @@ impl Window { // attribute list must be null terminated. attributes.push(0); - unsafe { + Ok(unsafe { let pixelformat = IdRef::new(NSOpenGLPixelFormat::alloc(nil).initWithAttributes_(&attributes)); if let Some(pixelformat) = pixelformat.non_nil() { @@ -575,7 +574,7 @@ impl Window { } else { (None, None) } - } + }) } pub fn is_closed(&self) -> bool { -- cgit v1.2.3