如何解决如何使SDL2在调整大小时刷新convas内容?
(前提:(伪)代码在Rust中,但是可以接受任何语言的答案,因为Rust SDL库非常类似于标准库)。
当需要绘制图像,在最大化的窗口中显示图像并等待按键时,我使用的SDL2模板非常小。
当前的逻辑有效,但是有一个小问题:在最大化窗口(并更新画布)之后,如果我调整窗口大小,则不会发生重绘。
这是我当前的伪代码:
let sdl_context = sdl2::init().unwrap();
let window = sdl_context
.video()
.unwrap()
.window(""window_title"",width as u32,height as u32)
.maximized()
.position_centered()
.resizable()
.build()
.unwrap();
let mut event_pump = sdl_context.event_pump().unwrap();
let mut canvas = window.into_canvas().present_vsync().build().unwrap();
canvas.set_logical_size(640,480).unwrap();
// Needed to redraw,as the window has been maximized above.
//
event_pump.pump_events();
////////////////////////////////////////
// Here some pixels are drawn.
////////////////////////////////////////
canvas.present();
// Wait for a keypress or quit event.
//
for event in event_pump.wait_iter() {
match event {
Event::KeyDown { .. } => std::process::exit(0),Event::KeyUp { .. } => std::process::exit(0),Event::Quit { .. } => std::process::exit(0),_ => {}
}
}
如果我运行此代码,并在不按任何键(或退出)的情况下调整窗口大小,则画布不会重新绘制。
我应该如何更改代码以使其重绘?
(请注意,我没有使用纹理,因为它们使代码变得更加复杂,并且在我使用此模板的情况下,速度不是问题,或者速度没有可测量的提高)>
解决方法
有一个WindowEvent::Resized
事件,因此以下操作应该有效(未试用):
for event in event_pump.wait_iter() {
match event {
Event::KeyDown { .. } => std::process::exit(0),Event::KeyUp { .. } => std::process::exit(0),Event::Quit { .. } => std::process::exit(0),Event::WindowEvent (WindowEvent::Resized (w,h)) => unimplemented!(),// Redraw the window
_ => {}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。