2014年4月15日火曜日

C++, GLFW3, wonderland: GLFW3を一般性のあるサブシステムとして扱うためのラッパーを書きました。

最近作っているPCネイティブとEmscriptenに対応したゲームエンジン用に、GLFW3、GLFW2、SDL2、SDL1、GLUTなどの入力とウィンドウの制御を担って貰う部分についてサブシステム化しようと取り組んでいます。

今日の寝る前の成果として、さしあたり、 wonder_rabbit_project::wonderland::subsystem名前空間にsubsystem_base_tとGLFW3_tを定義できました(╹◡╹)

ライブラリーコード部分は簡単ながらそこそこ一般化のためにもやや冗長な枠組みで書いてありますが、テスト用の main.cxx (コメント付けておいてみた)はとても簡潔になっていて、取り扱い方も subsystem レベルをメインシステムとしてちょっとしたサンプルなど作るのに適した "invoke world pattern 1" と、別のゲームエンジン(開発中のwonderland)の中でサブシステムとして使う場合を想定した"invoke world pattern 2" のバリエーションに対応しています。

mainではsubsystem生成→初期化パラメーター設定→初期化→updateにラムダ式を追加→renderにラムダ式を追加→メインループ、以上の実質6ステップ。コメントや不要なデモ用の表示関数を除くとわずか数行で簡潔にsubsystemを扱える様にしました。

それと、GLFW3でもこの他に今後OpenGLのプロファイルを設定するためのHintなど初期化パラメーターは幾つか増える予定ですが、 subsystem の initialize 関数は引数として std::unordered_map<std::string, boost::any> を扱うようになっており、その辺りや今後のGLFW2、SDL2、SDL1、GLUTなど異なるサブシステムへの統一的な対応も簡単なようにしました。もちろん、 デフォルト設定値を取得する default_initialize_params 関数があったり、 initialize 内部で不正な値や存在して欲しいのに存在しないkeyを補完する機能も実装してあり安全に動作します。

明日は GLFW2 版を実装したいと思います(╹◡╹)
おやすみなさい。

0 件のコメント:

コメントを投稿