在 wgpu 中无论使用什么样的窗口程序,都需要实现 raw-window-handle 里定义的 raw_window_handle()
及 raw_display_handle()
两个抽象接口。如果有兴趣自己动手来为 wgpu 实现一个窗口程序,可以参考 wgpu-on-app,在我的 wgpu 教程中的 调试与集成 部分也有详情的介绍。
最简单的方式就是使用 winit 包(crate), 在项目的 Cargo.toml
文件中添加依赖项如下:
[dependencies]
winit = "0.27.1"
env_logger = "0.9"
log = "0.4"
wgpu = "0.14"
示例代码
这一部分没有什么特别之处,所以直接贴出完整的代码。只需将其粘贴到你的 main.rs
中即可:
use winit::{
event::*,
event_loop::{ControlFlow, EventLoop},
window::WindowBuilder,
};
pub fn run() {
env_logger::init();
let event_loop = EventLoop::new();
let window = WindowBuilder::new().build(&event_loop).unwrap();
event_loop.run(move |event, _, control_flow| match event {
Event::WindowEvent {
ref event,
window_id,
} if window_id == window.id() => match event {
WindowEvent::CloseRequested
| WindowEvent::KeyboardInput {
input: