gpt4 book ai didi

canvas - 如何使SDL(2)在调整大小时刷新convas内容?

转载 作者:行者123 更新时间:2023-12-03 11:44:34 25 4
gpt4 key购买 nike

(前提:(伪)代码在Rust中,但是可以接受任何语言的答案,因为Rust SDL库非常类似于标准库)。
我有一个非常小的SDL2模板,当我需要绘制图像,在最大化的窗口中显示它并等待按键时使用。
当前的逻辑有效,但是有一个小问题:在最大化窗口(并更新 Canvas )之后,如果我调整窗口大小,则不会发生重绘。
这是我当前的伪代码:

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),
_ => {}
}
}
如果我运行此代码,并在不按任何键(或退出)的情况​​下调整窗口大小,则 Canvas 不会重绘。
我应该如何更改代码以使其重绘?
(请注意,我不使用纹理,因为它们使代码更加复杂,并且在我使用此模板的情况下,速度不是问题,或者速度没有可衡量的提升)

最佳答案

有一个 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
_ => {}
}
}

关于canvas - 如何使SDL(2)在调整大小时刷新convas内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64575864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com