mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-24 22:31:30 +11:00
Update to latest Rust nightly
This commit is contained in:
parent
25b261975c
commit
8d9133d331
|
@ -1,6 +1,6 @@
|
||||||
#![cfg(feature = "window")]
|
#![cfg(feature = "window")]
|
||||||
|
|
||||||
#[phase(plugin)]
|
#[no_link]
|
||||||
extern crate gl_generator;
|
extern crate gl_generator;
|
||||||
|
|
||||||
use glutin;
|
use glutin;
|
||||||
|
@ -23,12 +23,13 @@ pub struct Context {
|
||||||
pub fn load(window: &glutin::Window) -> Context {
|
pub fn load(window: &glutin::Window) -> Context {
|
||||||
let gl = gl::Gl::load(window);
|
let gl = gl::Gl::load(window);
|
||||||
|
|
||||||
let version = {
|
let version = unsafe {
|
||||||
use std::c_str::CString;
|
use std::ffi::c_str_to_bytes;
|
||||||
unsafe { CString::new(gl.GetString(gl::VERSION) as *const i8, false) }
|
let ref version = gl.GetString(gl::VERSION) as *const i8;
|
||||||
|
String::from_utf8_lossy(c_str_to_bytes(version)).into_owned()
|
||||||
};
|
};
|
||||||
|
|
||||||
println!("OpenGL version {}", version.as_str().unwrap());
|
println!("OpenGL version {}", version);
|
||||||
|
|
||||||
Context { gl: gl }
|
Context { gl: gl }
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
#![feature(unsafe_destructor)]
|
#![feature(unsafe_destructor)]
|
||||||
#![feature(globs)]
|
|
||||||
#![feature(phase)]
|
|
||||||
#![unstable]
|
#![unstable]
|
||||||
#![feature(associated_types)]
|
|
||||||
|
|
||||||
//! The purpose of this library is to provide an OpenGL context on as many
|
//! The purpose of this library is to provide an OpenGL context on as many
|
||||||
//! platforms as possible.
|
//! platforms as possible.
|
||||||
|
|
|
@ -5,6 +5,12 @@ use libc;
|
||||||
use std::{mem, ptr};
|
use std::{mem, ptr};
|
||||||
use super::ffi;
|
use super::ffi;
|
||||||
|
|
||||||
|
fn with_c_str<F, T>(s: &str, f: F) -> T where F: FnOnce(*const i8) -> T {
|
||||||
|
use std::ffi::CString;
|
||||||
|
let c_str = CString::from_slice(s.as_bytes());
|
||||||
|
f(c_str.as_slice_with_nul().as_ptr())
|
||||||
|
}
|
||||||
|
|
||||||
pub struct HeadlessContext {
|
pub struct HeadlessContext {
|
||||||
context: ffi::OSMesaContext,
|
context: ffi::OSMesaContext,
|
||||||
buffer: Vec<u32>,
|
buffer: Vec<u32>,
|
||||||
|
@ -41,10 +47,8 @@ impl HeadlessContext {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_proc_address(&self, addr: &str) -> *const () {
|
pub fn get_proc_address(&self, addr: &str) -> *const () {
|
||||||
use std::c_str::ToCStr;
|
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
addr.with_c_str(|s| {
|
with_c_str(addr, |s| {
|
||||||
ffi::OSMesaGetProcAddress(mem::transmute(s)) as *const ()
|
ffi::OSMesaGetProcAddress(mem::transmute(s)) as *const ()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,13 +17,19 @@ mod monitor;
|
||||||
static THREAD_INIT: Once = ONCE_INIT;
|
static THREAD_INIT: Once = ONCE_INIT;
|
||||||
|
|
||||||
fn ensure_thread_init() {
|
fn ensure_thread_init() {
|
||||||
THREAD_INIT.doit(|| {
|
THREAD_INIT.call_once(|| {
|
||||||
unsafe {
|
unsafe {
|
||||||
ffi::XInitThreads();
|
ffi::XInitThreads();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn with_c_str<F, T>(s: &str, f: F) -> T where F: FnOnce(*const i8) -> T {
|
||||||
|
use std::ffi::CString;
|
||||||
|
let c_str = CString::from_slice(s.as_bytes());
|
||||||
|
f(c_str.as_slice_with_nul().as_ptr())
|
||||||
|
}
|
||||||
|
|
||||||
struct XWindow {
|
struct XWindow {
|
||||||
display: *mut ffi::Display,
|
display: *mut ffi::Display,
|
||||||
window: ffi::Window,
|
window: ffi::Window,
|
||||||
|
@ -234,13 +240,13 @@ impl Window {
|
||||||
|
|
||||||
// creating window, step 2
|
// creating window, step 2
|
||||||
let wm_delete_window = unsafe {
|
let wm_delete_window = unsafe {
|
||||||
use std::c_str::ToCStr;
|
let mut wm_delete_window = with_c_str("WM_DELETE_WINDOW", |delete_window|
|
||||||
|
ffi::XInternAtom(display, delete_window, 0)
|
||||||
let delete_window = "WM_DELETE_WINDOW".to_c_str();
|
);
|
||||||
let mut wm_delete_window = ffi::XInternAtom(display, delete_window.as_ptr(), 0);
|
|
||||||
ffi::XSetWMProtocols(display, window, &mut wm_delete_window, 1);
|
ffi::XSetWMProtocols(display, window, &mut wm_delete_window, 1);
|
||||||
let c_title = builder.title.to_c_str();
|
with_c_str(&*builder.title, |title| {;
|
||||||
ffi::XStoreName(display, window, c_title.as_ptr());
|
ffi::XStoreName(display, window, title);
|
||||||
|
});
|
||||||
ffi::XFlush(display);
|
ffi::XFlush(display);
|
||||||
|
|
||||||
wm_delete_window
|
wm_delete_window
|
||||||
|
@ -257,13 +263,15 @@ impl Window {
|
||||||
|
|
||||||
// creating input context
|
// creating input context
|
||||||
let ic = unsafe {
|
let ic = unsafe {
|
||||||
use std::c_str::ToCStr;
|
let ic = with_c_str("inputStyle", |input_style|
|
||||||
|
with_c_str("clientWindow", |client_window|
|
||||||
let input_style = "inputStyle".to_c_str();
|
ffi::XCreateIC(
|
||||||
let client_window = "clientWindow".to_c_str();
|
im, input_style,
|
||||||
let ic = ffi::XCreateIC(im, input_style.as_ptr(),
|
ffi::XIMPreeditNothing | ffi::XIMStatusNothing, client_window,
|
||||||
ffi::XIMPreeditNothing | ffi::XIMStatusNothing, client_window.as_ptr(),
|
window, ptr::null()
|
||||||
window, ptr::null());
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
if ic.is_null() {
|
if ic.is_null() {
|
||||||
return Err(OsError(format!("XCreateIC failed")));
|
return Err(OsError(format!("XCreateIC failed")));
|
||||||
}
|
}
|
||||||
|
@ -302,8 +310,7 @@ impl Window {
|
||||||
|
|
||||||
// loading the extra GLX functions
|
// loading the extra GLX functions
|
||||||
let extra_functions = ffi::glx_extra::Glx::load_with(|addr| {
|
let extra_functions = ffi::glx_extra::Glx::load_with(|addr| {
|
||||||
use std::c_str::ToCStr;
|
with_c_str(addr, |s| {
|
||||||
addr.with_c_str(|s| {
|
|
||||||
use libc;
|
use libc;
|
||||||
ffi::glx::GetProcAddress(s as *const u8) as *const libc::c_void
|
ffi::glx::GetProcAddress(s as *const u8) as *const libc::c_void
|
||||||
})
|
})
|
||||||
|
@ -356,12 +363,10 @@ impl Window {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_title(&self, title: &str) {
|
pub fn set_title(&self, title: &str) {
|
||||||
use std::c_str::ToCStr;
|
with_c_str(title, |title| unsafe {
|
||||||
let c_title = title.to_c_str();
|
ffi::XStoreName(self.x.display, self.x.window, title);
|
||||||
unsafe {
|
|
||||||
ffi::XStoreName(self.x.display, self.x.window, c_title.as_ptr());
|
|
||||||
ffi::XFlush(self.x.display);
|
ffi::XFlush(self.x.display);
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn show(&self) {
|
pub fn show(&self) {
|
||||||
|
@ -582,11 +587,10 @@ impl Window {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_proc_address(&self, addr: &str) -> *const () {
|
pub fn get_proc_address(&self, addr: &str) -> *const () {
|
||||||
use std::c_str::ToCStr;
|
|
||||||
use std::mem;
|
use std::mem;
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
addr.with_c_str(|s| {
|
with_c_str(addr, |s| {
|
||||||
ffi::glx::GetProcAddress(mem::transmute(s)) as *const ()
|
ffi::glx::GetProcAddress(mem::transmute(s)) as *const ()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
#![feature(phase)]
|
#[no_link]
|
||||||
|
|
||||||
#[phase(plugin)]
|
|
||||||
extern crate gl_generator;
|
extern crate gl_generator;
|
||||||
extern crate glutin;
|
extern crate glutin;
|
||||||
extern crate libc;
|
extern crate libc;
|
||||||
|
|
Loading…
Reference in a new issue