1- use ash:: vk;
2-
31use std:: default:: Default ;
42use std:: ffi:: CString ;
53
4+ use ash:: vk;
65use gpu_allocator:: vulkan:: { Allocator , AllocatorCreateDesc } ;
7-
8- mod helper;
9- use helper:: record_and_submit_command_buffer;
6+ use raw_window_handle:: { HasRawDisplayHandle , HasRawWindowHandle } ;
107
118mod imgui_renderer;
12- use imgui_renderer:: ImGuiRenderer ;
9+ use imgui_renderer:: { handle_imgui_event , ImGuiRenderer } ;
1310
14- use imgui_winit_support:: { HiDpiMode , WinitPlatform } ;
11+ mod helper;
12+ use helper:: record_and_submit_command_buffer;
1513
1614fn main ( ) -> ash:: prelude:: VkResult < ( ) > {
1715 let entry = unsafe { ash:: Entry :: load ( ) } . unwrap ( ) ;
@@ -21,7 +19,7 @@ fn main() -> ash::prelude::VkResult<()> {
2119 let window_width = 1920 ;
2220 let window_height = 1080 ;
2321 let window = winit:: window:: WindowBuilder :: new ( )
24- . with_title ( "gpu-allocator vulkan visualization" )
22+ . with_title ( "gpu-allocator Vulkan visualization" )
2523 . with_inner_size ( winit:: dpi:: PhysicalSize :: new (
2624 window_width as f64 ,
2725 window_height as f64 ,
@@ -30,7 +28,7 @@ fn main() -> ash::prelude::VkResult<()> {
3028 . build ( & event_loop)
3129 . unwrap ( ) ;
3230
33- // Create vulkan instance
31+ // Create Vulkan instance
3432 let instance = {
3533 let app_name = CString :: new ( "gpu-allocator examples vulkan-visualization" ) . unwrap ( ) ;
3634
@@ -47,7 +45,8 @@ fn main() -> ash::prelude::VkResult<()> {
4745 . map ( |raw_name| raw_name. as_ptr ( ) )
4846 . collect ( ) ;
4947
50- let surface_extensions = ash_window:: enumerate_required_extensions ( & window) . unwrap ( ) ;
48+ let surface_extensions =
49+ ash_window:: enumerate_required_extensions ( event_loop. raw_display_handle ( ) ) . unwrap ( ) ;
5150
5251 let create_info = vk:: InstanceCreateInfo :: builder ( )
5352 . application_info ( & appinfo)
@@ -61,10 +60,19 @@ fn main() -> ash::prelude::VkResult<()> {
6160 }
6261 } ;
6362
64- let surface = unsafe { ash_window:: create_surface ( & entry, & instance, & window, None ) } . unwrap ( ) ;
63+ let surface = unsafe {
64+ ash_window:: create_surface (
65+ & entry,
66+ & instance,
67+ window. raw_display_handle ( ) ,
68+ window. raw_window_handle ( ) ,
69+ None ,
70+ )
71+ }
72+ . unwrap ( ) ;
6573 let surface_loader = ash:: extensions:: khr:: Surface :: new ( & entry, & instance) ;
6674
67- // Look for vulkan physical device
75+ // Look for Vulkan physical device
6876 let ( pdevice, queue_family_index) = {
6977 let pdevices = unsafe {
7078 instance
@@ -97,7 +105,7 @@ fn main() -> ash::prelude::VkResult<()> {
97105 . expect ( "Couldn't find suitable device." )
98106 } ;
99107
100- // Create vulkan device
108+ // Create Vulkan device
101109 let device = {
102110 let device_extension_names_raw = [ ash:: extensions:: khr:: Swapchain :: name ( ) . as_ptr ( ) ] ;
103111 let features = vk:: PhysicalDeviceFeatures {
@@ -239,13 +247,7 @@ fn main() -> ash::prelude::VkResult<()> {
239247 unsafe { device. create_semaphore ( & semaphore_create_info, None ) } . unwrap ( ) ;
240248
241249 let mut imgui = imgui:: Context :: create ( ) ;
242- let mut platform = WinitPlatform :: init ( & mut imgui) ;
243- // imgui.io_mut().display_size = [window_width as f32, window_height as f32];
244- platform. attach_window (
245- imgui. io_mut ( ) ,
246- & window,
247- HiDpiMode :: Rounded , /* Default is blurry! */
248- ) ;
250+ imgui. io_mut ( ) . display_size = [ window_width as f32 , window_height as f32 ] ;
249251
250252 let descriptor_pool = {
251253 let pool_sizes = [
@@ -294,12 +296,11 @@ fn main() -> ash::prelude::VkResult<()> {
294296 . collect :: < Vec < _ > > ( ) ;
295297
296298 let mut visualizer = Some ( gpu_allocator:: vulkan:: AllocatorVisualizer :: new ( ) ) ;
297- let mut last_frame = std:: time:: Instant :: now ( ) ;
298299
299300 event_loop. run ( move |event, _, control_flow| {
300301 * control_flow = winit:: event_loop:: ControlFlow :: Wait ;
301302
302- platform . handle_event ( imgui. io_mut ( ) , & window, & event) ;
303+ handle_imgui_event ( imgui. io_mut ( ) , & window, & event) ;
303304
304305 let mut ready_for_rendering = false ;
305306 match event {
@@ -318,11 +319,6 @@ fn main() -> ash::prelude::VkResult<()> {
318319 _ => { }
319320 } ,
320321 winit:: event:: Event :: MainEventsCleared => ready_for_rendering = true ,
321- winit:: event:: Event :: NewEvents ( _) => {
322- let now = std:: time:: Instant :: now ( ) ;
323- imgui. io_mut ( ) . update_delta_time ( now - last_frame) ;
324- last_frame = now;
325- }
326322 _ => { }
327323 }
328324
@@ -338,9 +334,6 @@ fn main() -> ash::prelude::VkResult<()> {
338334 . unwrap ( ) ;
339335
340336 // Start ImGui frame
341- platform
342- . prepare_frame ( imgui. io_mut ( ) , & window)
343- . expect ( "Failed to prepare frame" ) ;
344337 let ui = imgui. frame ( ) ;
345338
346339 // Submit visualizer ImGui commands
@@ -350,7 +343,6 @@ fn main() -> ash::prelude::VkResult<()> {
350343 . render ( allocator. as_ref ( ) . unwrap ( ) , & ui, None ) ;
351344
352345 // Finish ImGui Frame
353- platform. prepare_render ( & ui, & window) ;
354346 let imgui_draw_data = ui. render ( ) ;
355347
356348 record_and_submit_command_buffer (
0 commit comments