mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-25 06:41:31 +11:00
Merge pull request #609 from TimNN/ios-compile-fixes
make glutin compile on all iOS targets (again)
This commit is contained in:
commit
48f3962a01
|
@ -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"
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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!()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue