2024/8/11(日)

ゲーム制作ライブラリの開発を進めた。とりあえず画像を表示するところまで行った。一番欲しいところは叶ったが、細かい部分の実装は全然出来てないので整備していきたい。

  • 画像の切り取り描画
  • 回転描画、回転基準位置の設定
  • 透過対応(アルファブレンド)
  • ウィンドウのサイズ変更時の対処
  • 不要なDescriptorSetの切り替えの省略
  • フルスクリーンモードの実装
  • フレーム更新時の挙動の調整

あと音声まわりと入力まわりは全然手を付けてすらいない。そっちも手を付けたい。しかし別件で忙しくなってきたというのがあるので、ちょっとそれらは先になりそう。

ところで、昨日「疎結合な設計のために内部IDの発行が必須という結論になった」という話を書いたが、少なくとも一部についてはその必要はないという結論になった。

まず、疎結合化のため内部のみで利用するクラスを外部に見せたくないというのがある。そのため、公開するクラスのメンバとして内部クラスを持つことは出来ないと考えていた。しかしpImplに代表されるように、ポインタや参照であれば名前だけ出して定義を見せずに作ることができる。そしてこれは内部クラスにも当てはまる。ちょっと汚いが、必要に応じて宣言だけ書いて外に見せてやればいいのだ。

これはもちろん抽象クラスにも当てはまる。というか相性抜群だ。レンダラーについて、利用する描画バックエンドに依存せず同一性を確保するためにIDで管理していたが、これらにIDは必要ない。普通にインタフェース型のスマートポインタを公開クラスにメンバ変数として持たせればいい。設計変更が大変だ。

また一方で、レンダーターゲットとテクスチャは依然としてIDで管理せざるを得ない。レンダラーが提供するものが「処理」であるのに対し、テクスチャ等が保持・提供するものは利用する実装に依存した「データ」だからだ。実装に依存して変わるものについて無理やり同一性だけ保つには内部IDしかない。ちょっと残念な結論だが、なぜ・どこでIDによる同一性の保持が必要になるのかが自分の中で腑に落ちたので今日はこれで留飲を下げることにしよう。実際大分納得が行った。

Categories: