Parallel force - パラレル・フォース
先日の日記の続き。 イメージの非同期ロードの相互作用概要図を書いてみました。 んー。相互作用概要図は初めて書きました。書式は多分合ってると思います。たぶん。たぶんね。 とりあえず正常系の実装は完了しました。ImageTracker::prepare もぼちぼち動作…
こちらのサイトに触発されてイメージの非同期ロードの実装に取り掛かりました。 さしあたって、これまで上流で直に呼び出していた PNG ローダーやファイル ストリーム リーダー等をアブストラクト ファクトリー パターンで抽象化してみました。とりあえずリ…
先の日記の続き。 Rendering Stage のシーケンス図を書いてみました。 Rendering Stage では名称通りに描画処理を実施します。キャッシュ サイズに合わせて描画対象領域を分割し、論理コア数に合わせて起動された複数のワーカー スレッドで次々と分割領域を…
先日の日記の続き。 これまで計測した『Parallel force - パラレル・フォース』の描画ベンチマークをグラフ*1にしてみました。 60 FPS のウェイトで Core i7 のパフォーマンスは頭打ちですが、Atom は SIMD とマルチスレッドでなかなかいい具合にパフォーマ…
先日の日記の続き。 Gaming Stage のシーケンス図を書いてみました。 Gaming Stage ではスクリプト処理とポーリングによる UI 処理、それに伴うスプライト操作を実施します。一般にいうゲーム ループですが、大きな相違が 1 点あります。それは自ループ内に…
あけましておめでとうございます。今年もよろしくお願いします。 表題の通りですので、早速『Parallel force - パラレル・フォース』のパッケージ図とアクティビティ図のスケッチなど。 パッケージ図はこちら。先日の日記のブラッシュアップ版です。Sprite …
UTF-8 から UCS-4 を取り出す処理が必要になりました。ということで、書いてみました。下記。 const std::uint32_t toUcs4(const char* iString, const std::size_t iLength, const char** oEnd) { assert(iString); assert(oEnd); const char* aCur = iStri…
先ほど『Parallel force - パラレル・フォース』の設計メモとして astah* を使おうと思ったところ、評価ライセンスの期限が切れていることに気づきました。しまったなぁ。会社に個人ライセンスがあるので、それを使い始めるまでのつなぎにしていたら、ライセ…
先日の日記の続き。 Ubuntu 11.04 on PandaBoard 上で自作ゲーム エンジン『Parallel force - パラレル・フォース』が動作しました。 とりあえず OMAP4 の ARM Cortex-A9 を 2 コアちゃんと叩いてくれているみたい。んー。純粋な C++ コードだと Intel Atom …
先日の日記の続き。 『Parallel force - パラレル・フォース』のパッケージ図を Adobe Illustrator CS4 で描いてみました。 ドキュメントとしてまとめる分には astah* のカラーでぜんぜん問題ないのですが、PowerPoint やウェブ上で提示する資料としては、こ…
『Parallel force - パラレル・フォース』のパッケージ図を astah* で描いてみました。 んー。職場で Visio で描く UML スケッチほどにはキレイに描けないなぁという印象です。もうちょっとフォントとか枠線の色がカスタマイズできるとか、グラデーションに 2…
POSIX スレッド API には pthread_cond_t 型で提供される条件変数という機能があるのですが、Win32API では Vista になるまで当該機能が存在しなかったという話です。 条件変数は、他のスレッド ライブラリには以前から含まれていましたが、残念ながら Windo…
先日の日記の続き。 Ubuntu 11.04 (x86) (VMWare) 上で自作ゲーム エンジン『Parallel force - パラレル・フォース』が動作しました。 感無量です。ポーティング元の環境依存 API は Win32API(一部に XAudio)だけでしたが、ポーティング先は xlib、FreeTyp…
先日の日記の続き。 『Parallel force - パラレル・フォース』を X-Window 環境へ移植しています。子供の相手をしながらなので休日の割に歩みが遅いですが、ぼちぼちやってます。 タイマー処理 やりたいことは ms 精度のスリープと、ms 精度の時間カウンタ取…
『Parallel force - パラレル・フォース』のウィンドウ処理とバックバッファの転送処理を X-Window 環境に移植したのですが、X11 API (xlib) のマルチスレッドでどハマリして、解決に結構時間を使いました。以下、解決メモです。 X11 API (xlib) のスレッド…
先日の日記の続き。 イメージの変形用にアフィン行列を定義しました。速度優先で固定小数(16.16)で実装してみました。演算子のオーバーロードで四則演算も可能。x64 のおかげで乗算時の 64bit 乗算も C/C++ で記述できるようになり、結構気軽な感じです。x…
先日の日記の続き。 GCC 対応をさらに進めるために VMWare Player で Ubuntu 11 をセットアップ。それぞれのソフトウェアのダウンロードから、セットアップ完了まで 1h 未満。光回線、11n の無線 LAN、論理 8 コアの CPU、8GB のメモリ、良い時代になったも…
先日の日記の続き。 パラレル・フォースをマルチ プラットフォーム (主に PandaBoard) 対応すべく、Windows 固有 API 利用箇所を徐々に修正していっています。 機能 Windows Linux 補足 Sound XAudio2 ??? 検討がついてません。というか Windows 版の実装を…
先日の日記の続き。 GCC ビルド環境のファイル I/O を Win32 から C++ 標準ライブラリの ifstream 等に変更しました。この辺は標準ライブラリだけあって、つつがなく移行が完了しました。 ただ、相変わらず getFileSize 的な API がなかったり、エラーハンド…
先日の日記の続き。 Win32API のイベント処理に対応する POSIX スレッドの API は下記のようです。 Win32API POSIX 概要 CreateEvent pthread_cond_init 同期オブジェクトの初期化 CloseHandle pthread_cond_destroy 同期オブジェクトの解放 SetEvent pthrea…
先日の日記の続き。 PandaBoard が届くまで、まだしばらくかかるので、パラレル・フォースの GCC4 向けの移植作業を進めていました。もともと Windows 向けに作っていたので、まず手始めに Cygwin 環境でのビルドに対応しました。C++0x 万歳的なコードですの…
先日の日記の続き。 改めて Core i7 で CPU 占有率を見ると、高負荷時にまんべんなくコアを使う…ということはなく、結構まばらに CPU リソースを消費しているなぁと感じます。フレーム同期のためにウェイトが入っているので 100% まで上昇しないのは理解でき…
前回更新時から随分と期間が経ってしまいましたので、現時点でのコードをまとめてデモを更新しました。今回から x64 ビルド バイナリを追加しました。マルチコア エンジンなので効果がそれと分かるように、デモ画面に CPU 使用率を表示するバーを追加しまし…
先ほどまで Parallel force - パラレル・フォースの描画処理をまとめてました。具体的にはコンパイラの出力するアセンブラ コードとにらめっこしてました。見直していると、画素あたりの処理が複雑なようで、下記の問題が発生していました。 画素あたりの処…
Paralell force - パラレル・フォースのレンダラの画素アクセスは下記の方針で対応しています。 可能な限り XMM レジスタを使用する 可能な限り movdqa 命令でロードおよびストアする 前者はともかくとして、後者がなかなか曲者なのです。 movdqa の使用条件…
先日の日記の続き。 Office 2010 が機能的に素敵なことは良く分かっているので、派生バージョンの Office Web Apps など試してみました。が、サインインして開始 10 秒でログアウトしました。相互参照が使えないとか、アウトラインモードがないとか、ありえ…
仕事では、仕様書を作るときは Office (Word (本文と表) + Visio (UML 図)) で作成したドキュメントを Acrobat (PDFMaker) で PDF 化しているんですけれど、さて。パラレル・フォースも何かドキュメンテーションしたいなぁとか思い始めてます。というのも、…
先日の日記の続き。 凡ミスでした。右端処理自体は実装してあったのですが、右端処理にきちんと移行できていなかったようです。次回のデモから修正が適用されます。あと、回転は未実装です。相方から「そろそろ何か見たい」と言われていて、デモの趣旨を徐々…
先日の日記の続き。 現状のコードをまとめました。詳細はこちら。 最新ビルドでは、解像度 1360 x 768 未満の環境は非サポートとなりました。起動時にチェッカを入れたので該当する環境では起動時エラーとなります。 前回デモを公開してから 1 ヶ月以上、空…
先日の日記の続き。 実装を進めてフルスクリーンとウィンドウ表示を切り替えられるようにしました。フルスクリーン時のメニューのオン・オフも基本的な動作として実装しました。また、フルスクリーン時の解像度は 1366 x 768 か 1360 x 768 のいずれかで対応…