mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
Don't panic if surfman initialization fails.
This commit is contained in:
parent
0d549e8146
commit
9d8b15f1bf
1 changed files with 24 additions and 9 deletions
|
@ -510,7 +510,7 @@ where
|
||||||
webrender_api_sender,
|
webrender_api_sender,
|
||||||
webxr_main_thread.registry(),
|
webxr_main_thread.registry(),
|
||||||
player_context,
|
player_context,
|
||||||
Some(webgl_threads),
|
webgl_threads,
|
||||||
webvr_chan,
|
webvr_chan,
|
||||||
webvr_constellation_sender,
|
webvr_constellation_sender,
|
||||||
glplayer_threads,
|
glplayer_threads,
|
||||||
|
@ -1023,7 +1023,7 @@ fn create_webgl_threads<W>(
|
||||||
webxr_main_thread: &mut webxr::MainThreadRegistry,
|
webxr_main_thread: &mut webxr::MainThreadRegistry,
|
||||||
external_image_handlers: &mut WebrenderExternalImageHandlers,
|
external_image_handlers: &mut WebrenderExternalImageHandlers,
|
||||||
external_images: Arc<Mutex<WebrenderExternalImageRegistry>>,
|
external_images: Arc<Mutex<WebrenderExternalImageRegistry>>,
|
||||||
) -> WebGLThreads
|
) -> Option<WebGLThreads>
|
||||||
where
|
where
|
||||||
W: WindowMethods + 'static + ?Sized,
|
W: WindowMethods + 'static + ?Sized,
|
||||||
{
|
{
|
||||||
|
@ -1033,18 +1033,33 @@ where
|
||||||
#[cfg(not(target_os = "windows"))]
|
#[cfg(not(target_os = "windows"))]
|
||||||
let (device, context) = unsafe {
|
let (device, context) = unsafe {
|
||||||
if opts::get().headless {
|
if opts::get().headless {
|
||||||
let (device, context) = SWDevice::from_current_context()
|
let (device, context) = match SWDevice::from_current_context() {
|
||||||
.expect("Failed to create software graphics context!");
|
Ok(a) => a,
|
||||||
|
Err(e) => {
|
||||||
|
warn!("Failed to create software graphics context: {:?}", e);
|
||||||
|
return None;
|
||||||
|
},
|
||||||
|
};
|
||||||
(Device::Software(device), Context::Software(context))
|
(Device::Software(device), Context::Software(context))
|
||||||
} else {
|
} else {
|
||||||
let (device, context) = HWDevice::from_current_context()
|
let (device, context) = match HWDevice::from_current_context() {
|
||||||
.expect("Failed to create hardware graphics context!");
|
Ok(a) => a,
|
||||||
|
Err(e) => {
|
||||||
|
warn!("Failed to create hardware graphics context: {:?}", e);
|
||||||
|
return None;
|
||||||
|
},
|
||||||
|
};
|
||||||
(Device::Hardware(device), Context::Hardware(context))
|
(Device::Hardware(device), Context::Hardware(context))
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
let (device, context) =
|
let (device, context) = match unsafe { Device::from_current_context() } {
|
||||||
unsafe { Device::from_current_context().expect("Failed to create graphics context!") };
|
Ok(a) => a,
|
||||||
|
Err(e) => {
|
||||||
|
warn!("Failed to create graphics context: {:?}", e);
|
||||||
|
return None;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
let gl_type = match window.gl().get_type() {
|
let gl_type = match window.gl().get_type() {
|
||||||
gleam::gl::GlType::Gl => sparkle::gl::GlType::Gl,
|
gleam::gl::GlType::Gl => sparkle::gl::GlType::Gl,
|
||||||
|
@ -1077,5 +1092,5 @@ where
|
||||||
webrender.set_output_image_handler(output_handler);
|
webrender.set_output_image_handler(output_handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
webgl_threads
|
Some(webgl_threads)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue