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 - bis #23696

Merged
merged 8 commits into from Jul 4, 2019

Use StaticStructGenerator on Windows

  • Loading branch information
paulrouget committed Jul 3, 2019
commit 3650f356d16b98224948e21b2e789cd97e1ec372
@@ -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.