Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add UWP port #23658

Closed
wants to merge 7 commits into from
Closed

Add UWP port #23658

Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Use StaticStructGenerator on Windows

  • Loading branch information
paulrouget authored and jdm committed Jul 2, 2019
commit 16dda6585f7529848fe2c0aeef44934f75db7349
@@ -15,16 +15,19 @@ fn main() {
// For now, we only support EGL, and only on Windows and Android.
if target.contains("android") || target.contains("windows") {
let mut file = File::create(&dest.join("egl_bindings.rs")).unwrap();
if target.contains("android") {
Registry::new(Api::Egl, (1, 5), Profile::Core, Fallbacks::All, [])
.write_bindings(gl_generator::StaticStructGenerator, &mut file)
.unwrap();
}
Registry::new(Api::Egl, (1, 5), Profile::Core, Fallbacks::All, [])
.write_bindings(gl_generator::StaticStructGenerator, &mut file)
.unwrap();

// Historically, Android builds have succeeded with rust-link-lib=EGL.
// On Windows when relying on %LIBS% to contain libEGL.lib, however,
// we must explicitly use rustc-link-lib=libEGL or rustc will attempt
// to link EGL.lib instead.
if target.contains("windows") {
Registry::new(Api::Egl, (1, 5), Profile::Core, Fallbacks::All, [])
.write_bindings(gl_generator::StructGenerator, &mut file)
.unwrap();
};
println!("cargo:rustc-link-lib=libEGL");
} else {
println!("cargo:rust-link-lib=EGL");
}
}

if target.contains("linux") ||
@@ -11,20 +11,9 @@ pub type ServoGl = std::rc::Rc<dyn servo::gl::Gl>;
pub mod egl {
use servo::gl::GlesFns;
use std::ffi::CString;
#[cfg(not(target_os = "windows"))]
use std::os::raw::c_void;
#[cfg(target_os = "windows")]
use winapi::um::libloaderapi::{GetProcAddress, LoadLibraryA};

#[cfg(target_os = "windows")]
pub type EGLNativeWindowType = winapi::shared::windef::HWND;
#[cfg(target_os = "linux")]
pub type EGLNativeWindowType = *const libc::c_void;
#[cfg(target_os = "android")]
pub type EGLNativeWindowType = *const libc::c_void;
#[cfg(any(target_os = "dragonfly", target_os = "freebsd", target_os = "openbsd"))]
pub type EGLNativeWindowType = *const libc::c_void;

pub type khronos_utime_nanoseconds_t = khronos_uint64_t;
pub type khronos_uint64_t = libc::uint64_t;
pub type khronos_ssize_t = libc::c_long;
@@ -37,7 +26,6 @@ pub mod egl {

include!(concat!(env!("OUT_DIR"), "/egl_bindings.rs"));

#[cfg(target_os = "android")]
pub fn init() -> Result<crate::gl_glue::ServoGl, &'static str> {
info!("Loading EGL...");
unsafe {
@@ -54,27 +42,6 @@ pub mod egl {
Ok(egl)
}
}

#[cfg(target_os = "windows")]
pub fn init() -> Result<crate::gl_glue::ServoGl, &'static str> {
info!("Loading EGL...");

let dll = b"libEGL.dll\0" as &[u8];
let dll = unsafe { LoadLibraryA(dll.as_ptr() as *const _) };
if dll.is_null() {
Err("Can't find libEGL.dll")
} else {
unsafe {
let egl = GlesFns::load_with(|addr| {
let addr = CString::new(addr.as_bytes()).unwrap();
let addr = addr.as_ptr();
GetProcAddress(dll, addr) as *const _
});
info!("EGL loaded");
Ok(egl)
}
}
}
}

#[cfg(target_os = "windows")]
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.