1    typealias CreateDebugUtilsMessengerExt = fn
2        (instance : VkInstance)
3        * (create_info : ptr DebugUtilsMessengerCreateInfoExt)
4        * (allocator : Allocator)
5        * (messenger : mut ptr DebugUtilsMessengerExt) -> Result
6    
7    typealias DestroyDebugUtilsMessengerExt = fn
8        (instance : VkInstance)
9        * (messenger : DebugUtilsMessengerExt)
10       * (allocator : Allocator) -> Unit
11   
12   let callback (message_severity : DebugUtilsMessageSeverityFlagsExt
13                 message_type : DebugUtilsMessageTypeFlagsExt
14                 callback_data : ptr DebugUtilsMessengerCallbackDataExt
15                 user_data : MutPtr) : u32 =
16       println callback_data@to_ref.message
17       0
18   
19   module messenger
20   
21   val create_info =
22       let message_severity = DebugUtilsMessageSeverityFlagsExt/ErrorExt
23                              | DebugUtilsMessageSeverityFlagsExt/InfoExt
24                              | DebugUtilsMessageSeverityFlagsExt/WarningExt
25       let message_type = DebugUtilsMessageTypeFlagsExt/GeneralExt
26                          | DebugUtilsMessageTypeFlagsExt/PerformanceExt
27                          | DebugUtilsMessageTypeFlagsExt/ValidationExt
28       let structure_type = StructureType/DebugUtilsMessengerCreateInfoExt
29   
30       DebugUtilsMessengerCreateInfoExt
31           type = structure_type
32           next = null
33           flags = DebugUtilsMessengerCreateFlagsExt@zero
34           =message_severity
35           =message_type
36           user_callback = callback@fn
37           user_data = null
38   
39   endmodule
40   
41   type VkInstance
42       def create_messenger =
43           let proc_name = "vkCreateDebugUtilsMessengerEXT"
44           let proc_address = vk/get_instance_proc_addr self proc_name
45           let f = proc_address as CreateDebugUtilsMessengerExt
46   
47           let create_info = messenger/create_info
48           let mut messenger = DebugUtilsMessengerExt@zero
49   
50           f self create_info@ptr null messenger@mut_ptr
51   
52           messenger
53   
54       def destroy_messenger (messenger : DebugUtilsMessengerExt) =
55           let proc_name = "vkDestroyDebugUtilsMessengerEXT"
56           let proc_address = vk/get_instance_proc_addr self proc_name
57           let f = proc_address as DestroyDebugUtilsMessengerExt
58   
59           f self messenger null
60