Skip to content

jprekz/rust-wasm-sandbox

Repository files navigation

デモ

https://jprekz.github.io/rust-wasm-sandbox/

glTF形式の簡単な3Dモデルデータを読み込み、WebGLを用いて描画するデモンストレーションです。 プログラムはRustで書かれており、WebAssemblyにコンパイルすることでブラウザ上で動作させています。

ソースはこのリポジトリ内の /gltf_test にあります。

ビルド

各ディレクトリ内で

  • nativeの場合 $ cargo run
  • webの場合 $ wasm-pack build --target web のち適当なwebサーバーを立てて開く

メモ

  • WebGLしたい
  • とりあえず依存無しでWebGLの呼び出しを試みた(scratch_test)
  • "Rust 側で用意したメモリをそっくりそのまま Canvas に挿入する"ことは割と簡単にできそう (参考:http://nmi.jp/2018-03-19-WebAssembly-with-Rust)
    • ネイティブで同じことできそうなやつ:https://github.com/rust-windowing/winit-blit
    • ハードウェアアクセラレーションなしでクロスプラットフォームなアプリ書くなら winit と 上記手法の組み合わせが最小構成かも
  • glow でクロスプラットフォームなウィンドウ初期化と描画テスト(glow-test)
    • webの場合は winit で初期化とイベント管理ができる。GLコンテキストは web_sys::WebGl2RenderingContext を直接 glow に渡すことができる
    • nativeの場合は glutin で初期化とイベント管理を行う。 glutin はGLコンテキストを 取得するライブラリで wasm32-unknown-unknown では動作しない。 glutinwinitpub use しているので中身は同じなのだが……
  • winit 等のラッパー blindsglow のラッパー golem のテスト(golem_test)
    • 最近いろいろ変わってるっぽくてなんとも
  • glutin / winitgolemnannou 風のAPIで雑にラップしてみたテスト(wrapper_test)
    • wrapper_test はライブラリで wrapper_test_bin は wrapper_test を使ってみたやつ
    • wrapper_test_bin のソースはぱっと見いい感じではある
  • glTF形式の3Dモデルを雑に表示してみるテスト(gltf_test)
    • gltf-viewer のコードをだいぶ参考にしている
    • web環境でファイルをfetchしようとすると非同期処理になるので blinds を使うと便利

その他リンク

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published