8000 GraphicsContext::supported_resolutions panics on Wayland · Issue #1270 · ggez/ggez · GitHub 8000
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
GraphicsContext::supported_resolutions panics on Wayland #1270
Open
@pophilpo

Description

@pophilpo

Describe the bug
When calling ctx.gfx.supported_resolutions() program panics on calling Option::unwrap() on a None value

To Reproduce
Here's a small code snippet that panics

use ggez::GameResult;

fn main() -> GameResult {
    let window_mode = ggez::conf::WindowMode::default()
        .resizable(true)
        .dimensions(1024.0, 1024.0);

    let cb = ggez::ContextBuilder::new("Bug", "pophilpo").window_mode(window_mode);
    let (mut ctx, event_loop) = cb.build()?;
    ctx.gfx.supported_resolutions();
    Ok(())
}

Cargo run output:

Running `target/debug/bug-report`
Failed to initialize graphics, trying secondary backends.. Please mention this if you encounter any bugs!
thread 'main' panicked at /home/philipp/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ggez-0.9.3/src/graphics/context.rs:566:14:
called `Option::unwrap()` on a `None` value

Hardware and Software:

  • ggez version: "0.9.3"
  • OS: Arch Linux
  • Graphics card: Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] (rev 01)
  • Graphics card drivers: 4.6 (Compatibility Profile) Mesa 23.3.1-arch1.1
  • WM: sway version 1.8.1
  • Wayland version: 1.22.0-1

UPD
This seems to be a xinit issue:
When calling window.current_monitor() I get None, but as weird as it is, when calling window.available_monitors() I get my monitor and can check the resolution.

use ggez::{event, Context, GameResult};

fn main() -> GameResult {
    let window_mode = ggez::conf::WindowMode::default()
        .resizable(true)
        .dimensions(1024.0, 1024.0);

    let cb = ggez::ContextBuilder::new("Invoke", "Popov Philipp").window_mode(window_mode);
    let (mut ctx, event_loop) = cb.build()?;

    if let Some(_monitor) = ctx.gfx.window().current_monitor() {
        println!("I have a monitor!");
    } else {
        println!("There is no monitor...");
    }

    for monitor in ctx.gfx.window().available_monitors() {
        for mode in monitor.video_modes() {
            println!("{:?}", mode);
        }
    }

    Ok(())
}

Cargo run output:

Failed to initialize graphics, trying secondary backends.. Please mention this if you encounter any bugs!
There is no monitor...
Wayland(VideoMode { size: PhysicalSize { width: 3840, height: 2160 }, bit_depth: 32, refresh_rate_millihertz: 59997, monitor: MonitorHandle { proxy: wl_output@14 } })

I guess the only thing that can be done here is to handle the None value when calling window.available_monitors() instead of unwrapping.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0