xref: /aosp_15_r20/external/crosvm/gpu_display/examples/simple.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2019 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker 
5*bb4ee6a4SAndroid Build Coastguard Worker use std::process::exit;
6*bb4ee6a4SAndroid Build Coastguard Worker 
7*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(any(target_os = "android", target_os = "linux"))]
8*bb4ee6a4SAndroid Build Coastguard Worker mod platform {
9*bb4ee6a4SAndroid Build Coastguard Worker     use anyhow::Context;
10*bb4ee6a4SAndroid Build Coastguard Worker     use anyhow::Result;
11*bb4ee6a4SAndroid Build Coastguard Worker     use gpu_display::*;
12*bb4ee6a4SAndroid Build Coastguard Worker     use vm_control::gpu::DisplayMode;
13*bb4ee6a4SAndroid Build Coastguard Worker     use vm_control::gpu::DisplayParameters;
14*bb4ee6a4SAndroid Build Coastguard Worker 
run() -> Result<()>15*bb4ee6a4SAndroid Build Coastguard Worker     pub fn run() -> Result<()> {
16*bb4ee6a4SAndroid Build Coastguard Worker         let mut disp = GpuDisplay::open_wayland(None::<&str>).context("open_wayland")?;
17*bb4ee6a4SAndroid Build Coastguard Worker         let surface_id = disp
18*bb4ee6a4SAndroid Build Coastguard Worker             .create_surface(
19*bb4ee6a4SAndroid Build Coastguard Worker                 None,
20*bb4ee6a4SAndroid Build Coastguard Worker                 /* scanout_id= */ Some(0),
21*bb4ee6a4SAndroid Build Coastguard Worker                 &DisplayParameters::default_with_mode(DisplayMode::Windowed(1280, 1024)),
22*bb4ee6a4SAndroid Build Coastguard Worker                 SurfaceType::Scanout,
23*bb4ee6a4SAndroid Build Coastguard Worker             )
24*bb4ee6a4SAndroid Build Coastguard Worker             .context("create_surface")?;
25*bb4ee6a4SAndroid Build Coastguard Worker         disp.flip(surface_id);
26*bb4ee6a4SAndroid Build Coastguard Worker         disp.commit(surface_id).context("commit")?;
27*bb4ee6a4SAndroid Build Coastguard Worker         while !disp.close_requested(surface_id) {
28*bb4ee6a4SAndroid Build Coastguard Worker             disp.dispatch_events().context("dispatch_events")?;
29*bb4ee6a4SAndroid Build Coastguard Worker         }
30*bb4ee6a4SAndroid Build Coastguard Worker         Ok(())
31*bb4ee6a4SAndroid Build Coastguard Worker     }
32*bb4ee6a4SAndroid Build Coastguard Worker }
33*bb4ee6a4SAndroid Build Coastguard Worker 
34*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(not(unix))]
35*bb4ee6a4SAndroid Build Coastguard Worker mod platform {
36*bb4ee6a4SAndroid Build Coastguard Worker     use anyhow::anyhow;
37*bb4ee6a4SAndroid Build Coastguard Worker     use anyhow::Result;
38*bb4ee6a4SAndroid Build Coastguard Worker 
run() -> Result<()>39*bb4ee6a4SAndroid Build Coastguard Worker     pub fn run() -> Result<()> {
40*bb4ee6a4SAndroid Build Coastguard Worker         Err(anyhow!("Only supported on unix targets"))
41*bb4ee6a4SAndroid Build Coastguard Worker     }
42*bb4ee6a4SAndroid Build Coastguard Worker }
43*bb4ee6a4SAndroid Build Coastguard Worker 
main()44*bb4ee6a4SAndroid Build Coastguard Worker fn main() {
45*bb4ee6a4SAndroid Build Coastguard Worker     if let Err(e) = platform::run() {
46*bb4ee6a4SAndroid Build Coastguard Worker         eprintln!("error: {:#}", e);
47*bb4ee6a4SAndroid Build Coastguard Worker         exit(1);
48*bb4ee6a4SAndroid Build Coastguard Worker     }
49*bb4ee6a4SAndroid Build Coastguard Worker }
50