lumino trail

ゲームエンジン作ってます。Github:https://github.com/lriki/Lumino Twitter:https://twitter.com/lriki8

開発状況 2021 #1

C++17対応

AndroidiOS のビルドツール回りのアップデートが必要だったのでずっと後回しにしてましたが、対応しました。これに伴い iOS11 以降が必須となります。

これからは Optional 等は標準ライブラリのものがりようできるようになるので、少しずつベースライブラリをダイエットできそうです。

OpenGL 廃止と DirectX12 対応 (と WebGPU)

0.10.0 リリース前にしては少し大きい変更です。

というのも OpenGL の RHI は Lumino の RHI 全体をモダングラフィックスAPIに寄せて最適化を続けていく過程で 実質使い物にならないくらいまでオーバーヘッドが大きくなってしまいました。 メンテナンスを続けるモチベーションも尽きているので、廃止することにしました。

ただそうすると大体5年以上前くらいの少し古いハードウェアでは Vulkan が動かないことが多いです。 その代わり…というわけではありませんが、DirectX12 を実験的に対応中です。Vulkan 非対応でも DirectX12 は対応しているハードもあったりするためです。 一応、ソフトウェアドライバを使えば実行速度はともかく、ほとんどの環境で絵を出すことはできるはずです。

DirectX12 はあと MSAA を対応すれば一通り実装は終えられそうです。

またこれの影響で Web 版が動かなくなりますが、WebGPU の検討を始めました。 Dawn で動かす予定です。

外部アプリへの埋め込みサポート中

HSP3 対応のため、実装中です。

例えば Windows ネイティブアプリケーションであれば、HWND を受け取ってそこに Lumino のシーンを描画できるようになります。

Builder イディオム実装中

C++ で疑似的な名前付き引数や柔軟な初期化を行うための Builder イディオムを試していました。

継承に対応しつつできるだけ実装をシンプルにできるよう試行錯誤していましたが、目途がついてきたので各クラスに順次実装を始めています。

// これまでの書き方
auto sprite = Sprite::create()
sprite->setPosition(0, 10, 0) // 座標 (0, 10, 0) へ表示する
sprite->setTexture(texture)   // 指定されたテクスチャを表示する
sprite->setSize(200, 100)     // 200x100 サイズで表示する
Engine::world()->add(sprite): // デフォルトの World へ追加する

// 新しい書き方
auto sprite = Sprite::With()
    .position(0, 10, 0) // 座標 (0, 10, 0) へ表示する
    .texture(texture)   // 指定されたテクスチャを表示する
    .size(200, 100)     // 200x100 サイズで表示する
    .buildInto();       // インスタンスを作成し、デフォルトの World へ追加する