@@ -16,65 +16,56 @@ mod gl_bindings {
1616}
1717
1818use slint:: ComponentHandle ;
19- use smol:: channel;
20- use std:: rc:: Rc ;
2119
22- use crate :: {
23- adapter:: { SlintServoAdapter , upgrade_adapter} ,
24- on_events:: on_app_callbacks,
25- servo_util:: { init_servo_webview, spin_servo_event_loop} ,
26- } ;
20+ use crate :: servo_util:: init_servo;
2721
2822slint:: include_modules!( ) ;
2923
30- #[ cfg( not( target_os = "android" ) ) ]
31- use slint:: wgpu_27:: { WGPUConfiguration , WGPUSettings , wgpu} ;
32-
3324pub fn main ( ) {
34- let ( waker_sender, waker_receiver) = channel:: unbounded :: < ( ) > ( ) ;
35-
3625 #[ cfg( not( target_os = "android" ) ) ]
37- {
38- let mut wgpu_settings = WGPUSettings :: default ( ) ;
39- wgpu_settings. device_required_features = wgpu:: Features :: PUSH_CONSTANTS ;
40- wgpu_settings. device_required_limits . max_push_constant_size = 16 ; // Maximum push size
26+ let ( device, queue) = {
27+ let backends = wgpu:: Backends :: from_env ( ) . unwrap_or_default ( ) ;
28+
29+ let instance = wgpu:: Instance :: new ( & wgpu:: InstanceDescriptor {
30+ backends,
31+ flags : Default :: default ( ) ,
32+ backend_options : Default :: default ( ) ,
33+ memory_budget_thresholds : Default :: default ( ) ,
34+ } ) ;
35+
36+ let adapter = spin_on:: spin_on ( async {
37+ instance
38+ . request_adapter ( & Default :: default ( ) )
39+ . await
40+ . expect ( "Failed to find an appropriate WGPU adapter" )
41+ } ) ;
42+
43+ let ( device, queue) = spin_on:: spin_on ( async {
44+ adapter. request_device ( & Default :: default ( ) ) . await . expect ( "Failed to create WGPU device" )
45+ } ) ;
4146
4247 slint:: BackendSelector :: new ( )
43- . require_wgpu_27 ( WGPUConfiguration :: Automatic ( wgpu_settings) )
48+ . require_wgpu_27 ( slint:: wgpu_27:: WGPUConfiguration :: Manual {
49+ instance,
50+ adapter,
51+ device : device. clone ( ) ,
52+ queue : queue. clone ( )
53+ } )
4454 . select ( )
4555 . expect ( "Failed to create Slint backend with WGPU based renderer - ensure your system supports WGPU" ) ;
46- }
47-
48- let app = MyApp :: new ( ) . expect ( "Failed to create Slint application - check UI resources" ) ;
4956
50- let app_weak = app. as_weak ( ) ;
57+ ( device, queue)
58+ } ;
5159
52- let adapter =
53- Rc :: new ( SlintServoAdapter :: new ( app_weak, waker_sender. clone ( ) , waker_receiver. clone ( ) ) ) ;
60+ let app = MyApp :: new ( ) . expect ( "Failed to create Slint application - check UI resources" ) ;
5461
55- let adapter_weak = Rc :: downgrade ( & adapter ) ;
62+ let url = "https://slint.dev" ;
5663
5764 #[ cfg( not( target_os = "android" ) ) ]
58- app. window ( )
59- . set_rendering_notifier ( move |rendering_state, graphics_api| match rendering_state {
60- slint:: RenderingState :: RenderingSetup => {
61- if let slint:: GraphicsAPI :: WGPU27 { device, queue, .. } = graphics_api {
62- let adpater = upgrade_adapter ( & adapter_weak) ;
63- adpater. set_wgpu_device_queue ( device, queue) ;
64- }
65- }
66- slint:: RenderingState :: BeforeRendering => { }
67- slint:: RenderingState :: AfterRendering => { }
68- slint:: RenderingState :: RenderingTeardown => { }
69- _ => { }
70- } )
71- . expect ( "Failed to set rendering notifier - WGPU integration may not be available" ) ;
72-
73- init_servo_webview ( adapter. clone ( ) , "https://slint.dev" . into ( ) ) ;
74-
75- spin_servo_event_loop ( adapter. clone ( ) ) ;
65+ let _adapter = init_servo ( app. clone_strong ( ) , url. into ( ) , device, queue) ;
7666
77- on_app_callbacks ( adapter. clone ( ) ) ;
67+ #[ cfg( target_os = "android" ) ]
68+ let _adapter = init_servo ( app. clone_strong ( ) , url. into ( ) ) ;
7869
7970 app. run ( ) . expect ( "Application failed to run - check for runtime errors" ) ;
8071}
0 commit comments