Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SurfaceOutput must be dropped before a new Surface is made error when setting fullscreen in draw #1273

Open
earomc opened this issue Feb 13, 2024 · 1 comment

Comments

@earomc
Copy link

earomc commented Feb 13, 2024

Bear with me, I'm a total noob to Rust and ggez ^^

Describe the bug
When running this code and moving my mouse around, the screen stays black and I get this error (Running with RUST_BACKTRACE = 1):

Hello ggez! dt = 402ms
thread 'main' panicked at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\wgpu-0.16.3\src\backend\direct.rs:734:18:
Error in Surface::configure: Validation Error

Caused by:
SurfaceOutput must be dropped before a new Surface is made

stack backtrace:
0: std::panicking::begin_panic_handler
at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962/library\std\src\panicking.rs:597
1: core::panicking::panic_fmt
at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962/library\core\src\panicking.rs:72
2: wgpu::backend::direct::Context::handle_error_fatal<enum2$<wgpu_core::present::ConfigureSurfaceError> >
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\wgpu-0.16.3\src\backend\direct.rs:308
3: wgpu::backend::direct::impl$7::surface_configure
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\wgpu-0.16.3\src\backend\direct.rs:734
4: wgpu::context::impl$5::surface_configurewgpu::backend::direct::Context
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\wgpu-0.16.3\src\context.rs:2056
5: wgpu::Surface::configure
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\wgpu-0.16.3\src\lib.rs:4150
6: ggez::graphics::context::GraphicsContext::set_window_mode
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\ggez-0.9.3\src\graphics\context.rs:853
7: ggez::graphics::context::GraphicsContext::set_mode
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\ggez-0.9.3\src\graphics\context.rs:615
8: ggez::graphics::context::GraphicsContext::set_fullscreen
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\ggez-0.9.3\src\graphics\context.rs:595
9: ggezgametest::impl$0::draw
at .\src\main.rs:46
10: ggez::event::run::closure$0<ggezgametest::State,enum2$ggez::error::GameError >
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\ggez-0.9.3\src\event.rs:549
11: winit::platform_impl::platform::event_loop::impl$3::run_return::closure$0<tuple$<>,ggez::event::run::closure_env$0<ggezgametest::State,enum2$ggez::error::GameError > >
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.28.7\src\platform_impl\windows\event_loop.rs:260
12: alloc::boxed::impl$48::call_mut<tuple$<enum2$<winit::event::Event<tuple$<> > >,ref_mut$<enum2$winit::event_loop::ControlFlow > >,dyn$<core::ops::function::FnMut<tuple$<enum2$<winit::event::Event<tuple$<> > >,ref_mut$<enum2$<winit::event_loop::ControlFlo
at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\alloc\src\boxed.rs:2014
13: winit::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure$0<tuple$<> >
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.28.7\src\platform_impl\windows\event_loop\runner.rs:250
14: core::panic::unwind_safe::impl$23::call_once<tuple$<>,winit::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<tuple$<> > >
at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\core\src\panic\unwind_safe.rs:271
15: std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<winit::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<tuple$<> > >,tuple$<> >
at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\std\src\panicking.rs:504
16: hashbrown::raw::alloc::inner::do_allocalloc::alloc::Global
17: std::panicking::try<tuple$<>,core::panic::unwind_safe::AssertUnwindSafe<winit::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<tuple$<> > > >
at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\std\src\panicking.rs:468
18: std::panic::catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<winit::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<tuple$<> > >,tuple$<> >
at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\std\src\panic.rs:142
19: winit::platform_impl::platform::event_loop::runner::EventLoopRunner<tuple$<> >::catch_unwind<tuple$<>,tuple$<>,winit::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<tuple$<> > >
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.28.7\src\platform_impl\windows\event_loop\runner.rs:157
20: winit::platform_impl::platform::event_loop::runner::EventLoopRunner<tuple$<> >::call_event_handler<tuple$<> >
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.28.7\src\platform_impl\windows\event_loop\runner.rs:242
21: winit::platform_impl::platform::event_loop::runner::EventLoopRunner<tuple$<> >::move_state_to<tuple$<> >
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.28.7\src\platform_impl\windows\event_loop\runner.rs:344
22: winit::platform_impl::platform::event_loop::runner::EventLoopRunner<tuple$<> >::main_events_cleared<tuple$<> >
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.28.7\src\platform_impl\windows\event_loop\runner.rs:230
23: winit::platform_impl::platform::event_loop::flush_paint_messages<tuple$<> >
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.28.7\src\platform_impl\windows\event_loop.rs:805
24: winit::platform_impl::platform::event_loop::public_window_callback_inner::closure$0<tuple$<> >
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.28.7\src\platform_impl\windows\event_loop.rs:1124
25: core::ops::function::FnOnce::call_once<winit::platform_impl::platform::event_loop::public_window_callback_inner::closure_env$0<tuple$<> >,tuple$<> >
at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\core\src\ops\function.rs:250
26: core::panic::unwind_safe::impl$23::call_once<isize,winit::platform_impl::platform::event_loop::public_window_callback_inner::closure_env$0<tuple$<> > >
at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\core\src\panic\unwind_safe.rs:271
27: std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<winit::platform_impl::platform::event_loop::public_window_callback_inner::closure_env$0<tuple$<> > >,isize>
at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\std\src\panicking.rs:504
28: ggez::graphics::image::impl$4::clone
29: std::panicking::try<isize,core::panic::unwind_safe::AssertUnwindSafe<winit::platform_impl::platform::event_loop::public_window_callback_inner::closure_env$0<tuple$<> > > >
at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\std\src\panicking.rs:468
30: std::panic::catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<winit::platform_impl::platform::event_loop::public_window_callback_inner::closure_env$0<tuple$<> > >,isize>
at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\std\src\panic.rs:142
31: winit::platform_impl::platform::event_loop::runner::EventLoopRunner<tuple$<> >::catch_unwind<tuple$<>,isize,winit::platform_impl::platform::event_loop::public_window_callback_inner::closure_env$0<tuple$<> > >
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.28.7\src\platform_impl\windows\event_loop\runner.rs:157
32: winit::platform_impl::platform::event_loop::public_window_callback_inner<tuple$<> >
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.28.7\src\platform_impl\windows\event_loop.rs:2320
33: winit::platform_impl::platform::event_loop::public_window_callback<tuple$<> >
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.28.7\src\platform_impl\windows\event_loop.rs:994
34: DispatchMessageW
35: CallWindowProcW
36: wglSwapBuffers
37: DispatchMessageW
38: DispatchMessageW
39: GetClassLongW
40: KiUserCallbackDispatcher
41: NtUserDispatchMessage
42: DispatchMessageW
43: winit::platform_impl::platform::event_loop::EventLoop<tuple$<> >::run_return<tuple$<>,ggez::event::run::closure_env$0<ggezgametest::State,enum2$ggez::error::GameError > >
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.28.7\src\platform_impl\windows\event_loop.rs:282
44: winit::platform_impl::platform::event_loop::EventLoop<tuple$<> >::run<tuple$<>,ggez::event::run::closure_env$0<ggezgametest::State,enum2$ggez::error::GameError > >
rs:245
45: winit::event_loop::EventLoop<tuple$<> >::run<tuple$<>,ggez::event::run::closure_env$0<ggezgametest::State,enum2$ggez::error::GameError > >
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.28.7\src\event_loop.rs:305
46: ggez::event::run<ggezgametest::State,enum2$ggez::error::GameError >
at C:\Users\morit.cargo\registry\src\index.crates.io-6f17d22bba15001f\ggez-0.9.3\src\event.rs:286
47: ggezgametest::main
at .\src\main.rs:29
48: core::ops::function::FnOnce::call_once<void (*)(),tuple$<> >
at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\core\src\ops\function.rs:250
note: Some details are omitted, run with RUST_BACKTRACE=full for a verbose backtrace.
error: process didn't exit successfully: target\debug\ggezgametest.exe (exit code: 101)

To Reproduce

use std::{env, time::Duration};

use ggez::{conf::{WindowMode, WindowSetup}, event::EventHandler, graphics::{Canvas, Color}, mint::Point2, *};

fn main() {
    env::set_var("RUST_BACKTRACE", "1");
    let state = State {
        dt: Duration::new(0, 0),
        mouse_pos: Point2 {x: 0_f32, y: 0_f32}
    };
    let config = conf::Conf {
        window_mode: WindowMode {
            fullscreen_type: conf::FullscreenType::Windowed,
            resizable: true,
            ..Default::default()
        },
        window_setup: WindowSetup {
            title: "GGEZ GAME TEST AHWBEAHW EbAW EBBY A E".to_string(),
            ..Default::default()
        },
        ..Default::default()
    };

    
    let (context, event_loop) = ContextBuilder::new("ggezgametest", "earomc")
        .default_conf(config)
        .build()
        .unwrap();
    event::run(context, event_loop, state);
}

struct State {
    dt: Duration,
    mouse_pos: Point2<f32>
}

impl EventHandler<GameError> for State {
    fn update(&mut self, ctx: &mut Context) -> GameResult {
        self.dt = ctx.time.delta();
        self.mouse_pos = ctx.mouse.position();
        Ok(())
    }

    fn draw(&mut self, ctx: &mut Context) -> GameResult {
        println!("Hello ggez! dt = {}ms", self.dt.as_millis());
        ctx.gfx.set_fullscreen(conf::FullscreenType::True).unwrap();
        let canvas = Canvas::from_frame(ctx, Color::from_rgb(60, self.mouse_pos.x as u8, self.mouse_pos.y as u8));
        canvas.finish(ctx)
    }
}

Do "cargo run" and move your mouse around.

Expected behavior
It's supposed to run in fullscreen and update the color of the screen as the mouse cursor position changes.

Hardware and Software:

  • ggez version: 0.9.3
  • OS: Windows 11
  • Graphics card: GeForce GTX 1060 6GB
  • Graphics card drivers: Nvidia 31.0.15.1748
@earomc
Copy link
Author

earomc commented Feb 13, 2024

Okay, I fixed it by moving "context.gfx.set_fullscreen(conf::FullscreenType::True).unwrap();" to the main function (making context mutable. Would still be interesting to know why it throws the above error

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant