1
- use ash:: vk;
2
-
3
1
use std:: default:: Default ;
4
2
use std:: ffi:: CString ;
5
3
4
+ use ash:: vk;
6
5
use gpu_allocator:: vulkan:: { Allocator , AllocatorCreateDesc } ;
7
-
8
- mod helper;
9
- use helper:: record_and_submit_command_buffer;
6
+ use raw_window_handle:: { HasRawDisplayHandle , HasRawWindowHandle } ;
10
7
11
8
mod imgui_renderer;
12
- use imgui_renderer:: ImGuiRenderer ;
9
+ use imgui_renderer:: { handle_imgui_event , ImGuiRenderer } ;
13
10
14
- use imgui_winit_support:: { HiDpiMode , WinitPlatform } ;
11
+ mod helper;
12
+ use helper:: record_and_submit_command_buffer;
15
13
16
14
fn main ( ) -> ash:: prelude:: VkResult < ( ) > {
17
15
let entry = unsafe { ash:: Entry :: load ( ) } . unwrap ( ) ;
@@ -21,7 +19,7 @@ fn main() -> ash::prelude::VkResult<()> {
21
19
let window_width = 1920 ;
22
20
let window_height = 1080 ;
23
21
let window = winit:: window:: WindowBuilder :: new ( )
24
- . with_title ( "gpu-allocator vulkan visualization" )
22
+ . with_title ( "gpu-allocator Vulkan visualization" )
25
23
. with_inner_size ( winit:: dpi:: PhysicalSize :: new (
26
24
window_width as f64 ,
27
25
window_height as f64 ,
@@ -30,7 +28,7 @@ fn main() -> ash::prelude::VkResult<()> {
30
28
. build ( & event_loop)
31
29
. unwrap ( ) ;
32
30
33
- // Create vulkan instance
31
+ // Create Vulkan instance
34
32
let instance = {
35
33
let app_name = CString :: new ( "gpu-allocator examples vulkan-visualization" ) . unwrap ( ) ;
36
34
@@ -47,7 +45,8 @@ fn main() -> ash::prelude::VkResult<()> {
47
45
. map ( |raw_name| raw_name. as_ptr ( ) )
48
46
. collect ( ) ;
49
47
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 ( ) ;
51
50
52
51
let create_info = vk:: InstanceCreateInfo :: builder ( )
53
52
. application_info ( & appinfo)
@@ -61,10 +60,19 @@ fn main() -> ash::prelude::VkResult<()> {
61
60
}
62
61
} ;
63
62
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 ( ) ;
65
73
let surface_loader = ash:: extensions:: khr:: Surface :: new ( & entry, & instance) ;
66
74
67
- // Look for vulkan physical device
75
+ // Look for Vulkan physical device
68
76
let ( pdevice, queue_family_index) = {
69
77
let pdevices = unsafe {
70
78
instance
@@ -97,7 +105,7 @@ fn main() -> ash::prelude::VkResult<()> {
97
105
. expect ( "Couldn't find suitable device." )
98
106
} ;
99
107
100
- // Create vulkan device
108
+ // Create Vulkan device
101
109
let device = {
102
110
let device_extension_names_raw = [ ash:: extensions:: khr:: Swapchain :: name ( ) . as_ptr ( ) ] ;
103
111
let features = vk:: PhysicalDeviceFeatures {
@@ -239,13 +247,7 @@ fn main() -> ash::prelude::VkResult<()> {
239
247
unsafe { device. create_semaphore ( & semaphore_create_info, None ) } . unwrap ( ) ;
240
248
241
249
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 ] ;
249
251
250
252
let descriptor_pool = {
251
253
let pool_sizes = [
@@ -294,12 +296,11 @@ fn main() -> ash::prelude::VkResult<()> {
294
296
. collect :: < Vec < _ > > ( ) ;
295
297
296
298
let mut visualizer = Some ( gpu_allocator:: vulkan:: AllocatorVisualizer :: new ( ) ) ;
297
- let mut last_frame = std:: time:: Instant :: now ( ) ;
298
299
299
300
event_loop. run ( move |event, _, control_flow| {
300
301
* control_flow = winit:: event_loop:: ControlFlow :: Wait ;
301
302
302
- platform . handle_event ( imgui. io_mut ( ) , & window, & event) ;
303
+ handle_imgui_event ( imgui. io_mut ( ) , & window, & event) ;
303
304
304
305
let mut ready_for_rendering = false ;
305
306
match event {
@@ -318,11 +319,6 @@ fn main() -> ash::prelude::VkResult<()> {
318
319
_ => { }
319
320
} ,
320
321
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
- }
326
322
_ => { }
327
323
}
328
324
@@ -338,9 +334,6 @@ fn main() -> ash::prelude::VkResult<()> {
338
334
. unwrap ( ) ;
339
335
340
336
// Start ImGui frame
341
- platform
342
- . prepare_frame ( imgui. io_mut ( ) , & window)
343
- . expect ( "Failed to prepare frame" ) ;
344
337
let ui = imgui. frame ( ) ;
345
338
346
339
// Submit visualizer ImGui commands
@@ -350,7 +343,6 @@ fn main() -> ash::prelude::VkResult<()> {
350
343
. render ( allocator. as_ref ( ) . unwrap ( ) , & ui, None ) ;
351
344
352
345
// Finish ImGui Frame
353
- platform. prepare_render ( & ui, & window) ;
354
346
let imgui_draw_data = ui. render ( ) ;
355
347
356
348
record_and_submit_command_buffer (
0 commit comments