@@ -398,6 +398,7 @@ impl Error for DisplayCreationError {
398
398
399
399
fn try_get_display (
400
400
event_loop : & EventLoop < ( ) > ,
401
+ hardware_acceleration : bool ,
401
402
) -> Result < ( glium:: Display < WindowSurface > , Window ) , DisplayCreationError > {
402
403
let ( res_x, res_y) = Config :: display_resolution ( ) ;
403
404
let vsync = Config :: vsync_enabled ( ) ;
@@ -408,9 +409,11 @@ fn try_get_display(
408
409
. with_title ( "Sulis" )
409
410
. with_inner_size ( dims) ;
410
411
412
+ let hardware_accelerated = if hardware_acceleration { Some ( true ) } else { None } ;
413
+
411
414
let config_template_builder = ConfigTemplateBuilder :: new ( )
412
415
. with_depth_size ( 24 )
413
- . prefer_hardware_accelerated ( Some ( true ) )
416
+ . prefer_hardware_accelerated ( hardware_accelerated )
414
417
. with_alpha_size ( 8 )
415
418
. with_buffer_type ( ColorBufferType :: Rgb { r_size : 8 , g_size : 8 , b_size : 8 } ) ;
416
419
@@ -494,7 +497,13 @@ impl GliumDisplay {
494
497
debug ! ( "Initialize Glium Display adapter." ) ;
495
498
let event_loop = EventLoop :: new ( ) ?;
496
499
497
- let ( display, window) = try_get_display ( & event_loop) ?;
500
+ let ( display, window) = match try_get_display ( & event_loop, true ) {
501
+ Err ( e) => {
502
+ log:: warn!( "Error creating hardware accelerated display: {e}" ) ;
503
+ log:: warn!( "Falling back to software display" ) ;
504
+ try_get_display ( & event_loop, false ) ?
505
+ } , Ok ( val) => val,
506
+ } ;
498
507
499
508
let monitor = get_monitor ( & window) ;
500
509
@@ -663,7 +672,7 @@ impl ApplicationHandler for GliumApp {
663
672
if Config :: vsync_enabled ( ) {
664
673
self . io . window . request_redraw ( ) ;
665
674
}
666
-
675
+
667
676
if let StartCause :: ResumeTimeReached { .. } = cause {
668
677
self . io . window . request_redraw ( ) ;
669
678
}
0 commit comments