1. 程式人生 > 其它 >WebGPU01-初見Wgpu與開始的一些操作

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,因此可能有部分文字不易理解或出現錯誤,如有發現還望告知,本人必定及時更改。