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,因此可能有部分文本不易理解或出现错误,如有发现还望告知,本人必定及时更改。