mirror of
https://github.com/wez/wezterm.git
synced 2024-11-23 15:04:36 +03:00
8f1f1a65ea
With this commit, we now survive a reinstall or upgrade of the nvidia drivers on my Windows sytem without crashing. This commit allows notifying the application of the context loss so the application can either try to reinit opengl or open a new window as a replacement and init opengl there. I've not had success at reinitializing opengl after a driver upgrade; it seems to be persistently stuck in a state where it fails to allocate a vertex buffer. SO, the state we have now is that we try to reinit opengl on a new window, and if that fails, leave it set to the software renderer. This isn't a perfect UX, but it is better than terminating! refs: https://github.com/wez/wezterm/issues/156
79 lines
2.9 KiB
Rust
79 lines
2.9 KiB
Rust
fn main() {
|
|
println!("cargo:rerun-if-changed=build.rs");
|
|
|
|
#[cfg(feature = "opengl")]
|
|
{
|
|
use gl_generator::{Api, Fallbacks, Profile, Registry};
|
|
use std::env;
|
|
use std::fs::File;
|
|
use std::path::PathBuf;
|
|
|
|
let dest = PathBuf::from(&env::var("OUT_DIR").unwrap());
|
|
let target = env::var("TARGET").unwrap();
|
|
if !target.contains("macos") {
|
|
let mut file = File::create(&dest.join("egl_bindings.rs")).unwrap();
|
|
let reg = Registry::new(
|
|
Api::Egl,
|
|
(1, 5),
|
|
Profile::Core,
|
|
Fallbacks::All,
|
|
[
|
|
"EGL_KHR_create_context",
|
|
"EGL_EXT_create_context_robustness",
|
|
"EGL_KHR_create_context_no_error",
|
|
"EGL_KHR_platform_x11",
|
|
"EGL_KHR_platform_android",
|
|
"EGL_KHR_platform_wayland",
|
|
"EGL_KHR_platform_gbm",
|
|
"EGL_EXT_platform_base",
|
|
"EGL_EXT_platform_x11",
|
|
"EGL_MESA_platform_gbm",
|
|
"EGL_EXT_platform_wayland",
|
|
"EGL_EXT_platform_device",
|
|
"EGL_KHR_swap_buffers_with_damage",
|
|
],
|
|
);
|
|
|
|
if target.contains("android") || target.contains("ios") {
|
|
reg.write_bindings(gl_generator::StaticStructGenerator, &mut file)
|
|
} else {
|
|
reg.write_bindings(gl_generator::StructGenerator, &mut file)
|
|
}
|
|
.unwrap()
|
|
}
|
|
|
|
if target.contains("windows") {
|
|
let mut file = File::create(&dest.join("wgl_bindings.rs")).unwrap();
|
|
let reg = Registry::new(Api::Wgl, (1, 0), Profile::Core, Fallbacks::All, []);
|
|
|
|
reg.write_bindings(gl_generator::StructGenerator, &mut file)
|
|
.unwrap();
|
|
|
|
let mut file = File::create(&dest.join("wgl_extra_bindings.rs")).unwrap();
|
|
Registry::new(
|
|
Api::Wgl,
|
|
(1, 0),
|
|
Profile::Core,
|
|
Fallbacks::All,
|
|
[
|
|
"WGL_ARB_create_context",
|
|
"WGL_ARB_create_context_profile",
|
|
"WGL_ARB_create_context_robustness",
|
|
"WGL_ARB_context_flush_control",
|
|
"WGL_ARB_extensions_string",
|
|
"WGL_ARB_framebuffer_sRGB",
|
|
"WGL_ARB_multisample",
|
|
"WGL_ARB_pixel_format",
|
|
"WGL_ARB_pixel_format_float",
|
|
"WGL_EXT_create_context_es2_profile",
|
|
"WGL_EXT_extensions_string",
|
|
"WGL_EXT_framebuffer_sRGB",
|
|
"WGL_EXT_swap_control",
|
|
],
|
|
)
|
|
.write_bindings(gl_generator::StructGenerator, &mut file)
|
|
.unwrap();
|
|
}
|
|
}
|
|
}
|