Merge pull request #609 from TimNN/ios-compile-fixes

make glutin compile on all iOS targets (again)
This commit is contained in:
tomaka 2015-09-21 22:34:17 +02:00
commit 48f3962a01
4 changed files with 37 additions and 19 deletions

View file

@ -30,6 +30,9 @@ clock_ticks = "0.0.5"
[target.arm-linux-androideabi.dependencies.android_glue] [target.arm-linux-androideabi.dependencies.android_glue]
version = "0" version = "0"
[target.i386-apple-ios.dependencies]
objc = "0.1"
[target.x86_64-apple-ios.dependencies] [target.x86_64-apple-ios.dependencies]
objc = "0.1" objc = "0.1"

View file

@ -64,6 +64,7 @@
use std::collections::VecDeque; use std::collections::VecDeque;
use std::ptr; use std::ptr;
use std::io;
use std::mem; use std::mem;
use std::ffi::CString; use std::ffi::CString;
@ -71,7 +72,8 @@ use libc;
use objc::runtime::{Class, BOOL, YES, NO }; use objc::runtime::{Class, BOOL, YES, NO };
use native_monitor::NativeMonitorId; use native_monitor::NativeMonitorId;
use { Api, PixelFormat, CreationError, BuilderAttribs, GlContext, CursorState, MouseCursor, Event }; use { Api, PixelFormat, CreationError, GlContext, CursorState, MouseCursor, Event };
use { PixelFormatRequirements, GlAttributes, WindowAttributes, ContextError };
use CreationError::OsError; use CreationError::OsError;
mod delegate; mod delegate;
@ -102,6 +104,7 @@ use self::ffi::{
static mut jmpbuf: [libc::c_int;27] = [0;27]; static mut jmpbuf: [libc::c_int;27] = [0;27];
#[derive(Clone)]
pub struct MonitorID; pub struct MonitorID;
pub struct Window { pub struct Window {
@ -172,7 +175,7 @@ impl MonitorID {
impl Window { impl Window {
pub fn new(builder: BuilderAttribs) -> Result<Window, CreationError> { pub fn new(builder: &WindowAttributes, _: &PixelFormatRequirements, _: &GlAttributes<&Window>) -> Result<Window, CreationError> {
unsafe { unsafe {
if setjmp(mem::transmute(&mut jmpbuf)) != 0 { if setjmp(mem::transmute(&mut jmpbuf)) != 0 {
let app: id = msg_send![Class::get("UIApplication").unwrap(), sharedApplication]; let app: id = msg_send![Class::get("UIApplication").unwrap(), sharedApplication];
@ -200,7 +203,7 @@ impl Window {
Err(CreationError::OsError(format!("Couldn't create UIApplication"))) Err(CreationError::OsError(format!("Couldn't create UIApplication")))
} }
unsafe fn init_context(&mut self, builder: BuilderAttribs) { unsafe fn init_context(&mut self, builder: &WindowAttributes) {
let draw_props: id = msg_send![Class::get("NSDictionary").unwrap(), alloc]; let draw_props: id = msg_send![Class::get("NSDictionary").unwrap(), alloc];
let draw_props: id = msg_send![draw_props, let draw_props: id = msg_send![draw_props,
initWithObjects: initWithObjects:
@ -215,11 +218,11 @@ impl Window {
].as_ptr() ].as_ptr()
count: 2 count: 2
]; ];
self.make_current(); let _ = self.make_current();
let state = &mut *self.delegate_state; let state = &mut *self.delegate_state;
if builder.window.multitouch { if builder.multitouch {
let _: () = msg_send![state.view, setMultipleTouchEnabled:YES]; let _: () = msg_send![state.view, setMultipleTouchEnabled:YES];
} }
@ -265,10 +268,6 @@ impl Window {
} }
} }
pub fn is_closed(&self) -> bool {
false
}
pub fn set_title(&self, _: &str) { pub fn set_title(&self, _: &str) {
} }
@ -345,8 +344,13 @@ impl Window {
} }
impl GlContext for Window { impl GlContext for Window {
unsafe fn make_current(&self) { unsafe fn make_current(&self) -> Result<(), ContextError> {
let _:BOOL = msg_send![Class::get("EAGLContext").unwrap(), setCurrentContext: self.eagl_context]; let res: BOOL = msg_send![Class::get("EAGLContext").unwrap(), setCurrentContext: self.eagl_context];
if res == YES {
Ok(())
} else {
Err(ContextError::IoError(io::Error::new(io::ErrorKind::Other, "EAGLContext::setCurrentContext unsuccessful")))
}
} }
fn is_current(&self) -> bool { fn is_current(&self) -> bool {
@ -362,8 +366,15 @@ impl GlContext for Window {
} }
} }
fn swap_buffers(&self) { fn swap_buffers(&self) -> Result<(), ContextError> {
unsafe { let _:BOOL = msg_send![self.eagl_context, presentRenderbuffer: gles::RENDERBUFFER]; } unsafe {
let res: BOOL = msg_send![self.eagl_context, presentRenderbuffer: gles::RENDERBUFFER];
if res == YES {
Ok(())
} else {
Err(ContextError::IoError(io::Error::new(io::ErrorKind::Other, "EAGLContext.presentRenderbuffer unsuccessful")))
}
}
} }
fn get_api(&self) -> Api { fn get_api(&self) -> Api {

View file

@ -526,7 +526,8 @@ pub struct WindowAttributes {
/// The default is `true`. /// The default is `true`.
pub decorations: bool, pub decorations: bool,
/// ??? TODO: document me /// [iOS only] Enable multitouch, see [UIView#multipleTouchEnabled]
/// (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instp/UIView/multipleTouchEnabled)
pub multitouch: bool, pub multitouch: bool,
} }

View file

@ -1,9 +1,11 @@
#![cfg(target_os = "ios")] #![cfg(target_os = "ios")]
use libc::c_void; use libc::c_void;
use BuilderAttribs; use GlAttributes;
use CreationError; use CreationError;
use PixelFormat; use PixelFormat;
use PixelFormatRequirements;
use ContextError;
pub use api::ios::*; pub use api::ios::*;
@ -11,16 +13,17 @@ pub struct HeadlessContext(i32);
impl HeadlessContext { impl HeadlessContext {
/// See the docs in the crate root file. /// See the docs in the crate root file.
pub fn new(_builder: BuilderAttribs) -> Result<HeadlessContext, CreationError> { pub fn new(_: (u32, u32), _: &PixelFormatRequirements, _: &GlAttributes<&HeadlessContext>)
-> Result<HeadlessContext, CreationError> {
unimplemented!() unimplemented!()
} }
/// See the docs in the crate root file. /// See the docs in the crate root file.
pub unsafe fn make_current(&self) { pub unsafe fn make_current(&self) -> Result<(), ContextError> {
unimplemented!() unimplemented!()
} }
pub fn swap_buffers(&self) { pub fn swap_buffers(&self) -> Result<(), ContextError> {
unimplemented!() unimplemented!()
} }