WebGPU01-初见Wgpu与开始的一些操作
Intro | WebGPU
1.WebGPU 是什么
Wgpu 是 Rust 语言的一种实现,它允许开发者使用 Web code 时调用设备的显卡(GPU),是下一代图形应用程序接口(API),它将在互联网上提供实时三维图形和计算。
2.为什么使用 Rust 来实现 WebGPU
虽然 Wgpu 事实上有着与 C 的联系,允许你使用 C/C++ 来实现它,就像使用 C 的其他接口一样。
但要说的是,Wgpu 是用 Rust 语言写成的,这使得用 Rust 实现 Wgpu 有着许多便利,不必被许多事物所限制。
3.在开始之前,你需要知道的事
在使用本向导前,你应当对 Rust 语言较为熟练,我不会在其中赘述太多关于 Rust 语法的细节,如果你对 Rust 语言还不是非常很熟练,你可以看看 Rust Tutorial,同时你也要对 Cargo 有所熟悉。
Begin | WebGPU
1.依赖与窗口
-
我们使用了哪些包(crate)?
//Cargo.toml [dependencies] winit = "0.26" env_logger = "0.9" log = "0.4" wgpu = "0.12" pollster = "0.2"
在开始前,确保你项目中的
Cargo.toml
中写下如上内容。 -
使用 Rust 的新解析器(resolver)
为了保证你的程序正常运行,你需要检查你的 Rust 版本是否高于2021版(1.56.0),如果你发现自己的 Rust 版本仍在2018版,你应当在单个包内的
Cargo.toml
中的[package]
部分加上reslover = "2"
,或在工作组中根Cargo.toml
的[workspace]
部分中加上。 -
env_logger
让你的日志经由
env_logger::init();
十分重要。它将在 Wgpu 发生错误时提示错误信息。
如果你的代码中没有它,wgpu 发生的错误你将无法了解!
-
代码(The code)
将以下代码放入你的
lib.rs
文件或相同作用的文件内://lib.rs use winit::{ event::*, event_loop::{ControlFlow, EventLoop}, window::WindowBuilder, }; pub async 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: KeyboardInput { state: ElementState::Pressed, virtual_keycode: Some(VirtualKeyCode::Escape), .. }, .. } => *control_flow = ControlFlow::Exit, _ => {} }, _ => {} }); }
这些代码的作用是:
创建一个窗口并让它保持打开直到用户关闭它或摁下 Esc 键。
接下来我们将在
main.rs
写下如下代码来运行它:use tutorial1_window::run; fn main() { pollster::block_on(run()); }
注意其中的
tutorial1_window
部分应改成你所创建的项目的名称。
这些便是支持桌面端使用的基本步骤了,至于为 Web 添加支持我们将在随后介绍。(本项目中不需要 Web 部分,因此我们暂且跳过)
该博客由本人个人翻译自Learn Wgpu,因此可能有部分文本不易理解或出现错误,如有发现还望告知,本人必定及时更改。