wgpu_quick_start/sync_nowindow.rs
1//! A module to create `wgpu::Device` not necessarily from a window
2//!
3//!
4
5/// This synchronous function helps create a new device without any window
6///
7/// Available with `enable-sync` feature. (Hence, not available by default).
8///
9/// Can be enabled as below in the crate when being used.
10///
11/// ```toml
12/// wgpu_quick_start = { version="0.28.3", features = ["enable-sync"] }
13/// ```
14///
15/// ## Usage
16///
17/// Following is an example of using `create_new_windowless_device`.
18///
19///
20/// ```rust
21/// use wgpu_quick_start::{MyDevice, create_new_windowless_device};
22///
23///
24/// fn launch() -> Result<(), Box<dyn std::error::Error>> {
25/// let mut opt_device: Option<Box<dyn MyDevice>> = None;
26/// match create_new_windowless_device() {
27/// Ok(value) => {
28/// opt_device = Some(value);
29/// }
30/// Err(err) => {
31/// // warning - Error creating new device
32/// }
33/// }
34/// Ok(())
35/// }
36/// ```
37#[cfg(feature = "enable-sync")]
38pub fn create_new_windowless_device() -> super::GPUStarterResult<Box<dyn super::MyDevice>> {
39 use crate::my_device::MyDeviceImpl;
40
41 let device = pollster::block_on(MyDeviceImpl::new_without_window())?;
42 Ok(Box::new(device))
43}
44
45#[cfg(test)]
46mod tests {
47 // Note this useful idiom: importing names from outer (for mod tests) scope.
48 use super::*;
49
50 #[test]
51 #[ignore = "bug with adapter Vulkan/GL support etc"]
52 #[cfg(feature = "enable-sync")]
53 fn test_create_new_windowless_device() -> super::super::GPUStarterResult<()> {
54 let my_device = create_new_windowless_device()?;
55 assert!(my_device.get_texture_format().is_ok());
56 Ok(())
57 }
58}