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 語言還不是非常很熟練,你可以看看
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,因此可能有部分文字不易理解或出現錯誤,如有發現還望告知,本人必定及時更改。