wgpu + fsharp 動いた
fsharp 初めるのにいい題材は無いかと探索していたら、 Desktop版の WGPU の FSharp サンプルを発見。
Windows11 上の .Net8 で動作したので、これでやってみることにした。
https://github.com/ginger-code/WGPU.Native/tree/main/examples/FSharp
改造写経して、fsharp と wgpu を少し理解。
https://github.com/ousttrue/wgpu_fsharp
Windows11 動いた
Ubuntu:23.10(wayland) swapchain 作成クラッシュ。code 139
Ubuntu:22.04(X11) 動いた
FSharp ではまる
少しずつ慣れていきつつ。
関数引数の tuple と () 有無でひっかかる
複数引数は tuple にするべきか否か。 とりあえず、 member は tuple にするという方針した。
fsproj のソースの順番に意味がある
動く
<ItemGroup>
<Compile Include="GlfwUtil.fs" />
<Compile Include="Program.fs" />
</ItemGroup>
コンパイルエラー。
<ItemGroup>
<Compile Include="Program.fs" />
<!-- プログラムからGlfwUtil が見えない! -->
<Compile Include="GlfwUtil.fs" />
</ItemGroup>
まさかこんなところに罠が・・・
member呼び出しは括弧で囲む
obj.member()
// じゃなくて
(obj.member())
// が必要な場合がある?
nvim
=, = だと indent が壊れる
lsp とか使う。
Ionide-vim: 文字列中で ] をタイプすると自動で変な indent になる
よくわからなかった。 Ionide-vim の使用は休止して、lspconfig の fsautocomplete が動くようにした。 Sytax Highight がよわよわになった。後で調べる。
vulkan よりだいぶ楽
WGPU は今年になってから Desktop の chrome で利用可能になったばかりなので、 まだ Android に来るのは少し時間がかかるかもしれないが、 Quest と Apple のVision Pro とかあの辺りから意外と速く動くようになるような気がするので、 仕込みを開始する・・・。
browser 上の wgpu だとOS 毎の Surface...Device...Swapchain の初期化が browser 任せになるのでもっと簡単になる。