いつも通り何もできていない。
イベントサイトを大幅に手を入れようとしたが、DBをだいぶ作り替えることになってしんどいのであった。 まだちょっと時間かかりそうだけど、サイト自体は公開しておいてあとで直せばいいか……。
Vulkanの勉強をしているがなかなか難しいな。
SIGGRAPH ASIAでちょうどVulkanのコースがあったんだが、そのコースをやっていた時間は裏で機械学習のコースを聞いてカックンカックン寝てたので聞きに行けなかったのだ。 でも資料はあるのでこれが非常に参考になる。 これと各種サンプルでなんとか。
基本的にはめんどくさいOpenGLという感じだが、実際それらしいデバイスを持ってないとどうなるんだかよくわからんところもあるのが難しいな。 Queueっていくつ作れるんだ?と思ったが、Graphicsキューは基本的に1つで、DB見る限りNVIDIAのだけ16個も作れるらしい。16並列で同時に描画できるの?ほんとにー?
描画はできるが画面表示できるわけでないPhysicalDeviceだのQueueFamilyだのがあるぽい。 どうしてそんなことに……って、GPUが2つ以上ある時だったりするんかな。 単体GPUはあるが、直接画面表示できるのは統合GPU側だけ、とかいう時にそうなるのかもしれない。 でもなるかもしれないってだけなのでよくわからなくて困る……。
F#で書いてるのでSharpVkというバインディングを使ってたんだが、これがC#前提で暗黙的変換を多用しており、F#だと暗黙的変換がほぼ使えねえのでop_Implicit
を明示的に呼び出す必要があってめんどい。op_Implicit
て名前長いし。
他のでVulkanSharpというのがあってこれは暗黙的変換はあまり無いので良いかと思ったんだが、オブジェクト作成のためのパラメータを格納するクラスがIDisposable
になっており内部でメモリ確保してるんだが、このパラメータは入れ子になることがあるのよね。
一時的に作るオブジェクトなのでuse
とかで適切にDispose
したいんだが、入れ子になってると中のオブジェクトまでDispose
していかないといけないし標準ではしてくれなさそう。
単に一段入れ子になってるくらいならまだ良いんだけど、配列の中に入れ子になったオブジェクトが入ることもあって、それはもうuse
じゃなんともならん。
もちろんファイナライザで勝手にメモリ解放はしてくれるのでGC任せでつっぱしれ!ということもできなくはないが、ちょっと気持ち悪いのよなあ。
サンプルではそうしてるし、そんなにオブジェクト頻繁に作るものでもないし、しばらく残ったとしても些細な量というのは確かなんだが、行儀悪いのが気になるわ……。
Vulkanは勉強用やいろいろ試すのに使うだけで、直接Vulkan使って何かリリースするような物作ることはないつもりなんで、どっちでも良いと言えば良いんだがな。
何かリリースする用に使うならVeldridてのが良さそうに見える。 Vulkan素ではなく一段ラップしたようなライブラリでだいたいVulkanなんだけど、バックエンドにVulkan以外にMetalだのD3D11だのOpenGL(ES)だのも選べるのでいろんなところで動きそう。 ラップされてるから新しい機能いじって遊ぶには向いてないけど、何か他所の環境で動く物作るにはよさそうね。