@@ -459,6 +459,58 @@ fn main() {
459459This method is useful when you don't care about sdl2's render capabilities, but you do care about
460460its audio, controller and other neat features that sdl2 has.
461461
462+ # Vulkan
463+
464+ To use Vulkan, you need a Vulkan library for Rust. This example uses the
465+ [ Vulkano] ( https://github.com/vulkano-rs/vulkano ) library. Other libraries may use different data
466+ types for raw Vulkan object handles. The procedure to interface SDL2's Vulkan functions with these
467+ will be different for each one.
468+
469+ ``` rust
470+ extern crate sdl2;
471+ extern crate vulkano;
472+
473+ use sdl2 :: event :: Event ;
474+ use sdl2 :: keyboard :: Keycode ;
475+ use std :: ffi :: CString ;
476+ use vulkano :: VulkanObject ;
477+ use vulkano :: instance :: {Instance , RawInstanceExtensions };
478+ use vulkano :: swapchain :: Surface ;
479+
480+ fn main () {
481+ let sdl_context = sdl2 :: init (). unwrap ();
482+ let video_subsystem = sdl_context . video (). unwrap ();
483+
484+ let window = video_subsystem . window (" Window" , 800 , 600 )
485+ . vulkan ()
486+ . build ()
487+ . unwrap ();
488+
489+ let instance_extensions = window . vulkan_instance_extensions (). unwrap ();
490+ let raw_instance_extensions = RawInstanceExtensions :: new (instance_extensions . iter (). map (
491+ | & v | CString :: new (v ). unwrap ()
492+ ));
493+ let instance = Instance :: new (None , raw_instance_extensions , None ). unwrap ();
494+ let surface_handle = window . vulkan_create_surface (instance . internal_object ()). unwrap ();
495+ let surface = unsafe { Surface :: from_raw_surface (instance , surface_handle , window . context ()) };
496+
497+ let mut event_pump = sdl_context . event_pump (). unwrap ();
498+
499+ 'running : loop {
500+ for event in event_pump . poll_iter () {
501+ match event {
502+ Event :: Quit {.. } | Event :: KeyDown { keycode : Some (Keycode :: Escape ), .. } => {
503+ break 'running
504+ },
505+ _ => {}
506+ }
507+ }
508+ :: std :: thread :: sleep (:: std :: time :: Duration :: new (0 , 1_000_000_000u32 / 60 ));
509+ }
510+ }
511+
512+ ```
513+
462514# When things go wrong
463515Rust, and Rust-SDL2, are both still heavily in development, and you may run
464516into teething issues when using this. Before panicking, check that you're using
0 commit comments