先日の日記の続き。
PandaBoard が届くまで、まだしばらくかかるので、パラレル・フォースの GCC4 向けの移植作業を進めていました。もともと Windows 向けに作っていたので、まず手始めに Cygwin 環境でのビルドに対応しました。C++0x 万歳的なコードですので、GCC4.5.x を使ってます。対応時にひっかかったのは下記。
演算順序の不確定を指摘される。
描画処理コードの画素のブレンド処理にて下記のようなコードがあったのですが、
void foo()
{
*aDst++ = op(*aDst, *aSrc++, aAlpha);
}
aDst が不確定と警告されたので、下記のように書き換えました。
void foo()
{
*aDst = op(*aDst, *aSrc++, aAlpha);
++aDst;
}
関数テンプレートの定義順序不正を指摘される。
もともとは下記のような順序で定義していたのですが、
template<class T> const std::shared_ptr<Type> alloc(const std::size_t iLength); template<class T, std::size_t N> const std::shared_ptr<Type> alloc(const std::size_t iLength);
呼び出し先となる alloc が決定できないとエラーになったので、下記のように書き換えました。
template<class T, std::size_t N> const std::shared_ptr<Type> alloc(const std::size_t iLength); template<class T> const std::shared_ptr<Type> alloc(const std::size_t iLength);
_beginthreadex が使用できない。
もー、いろいろ検討して、PandaBoard 向けが最終ゴールということで、Thread パッケージの全クラスをプロキシ パターンで抽象化し、Win32API 版と POSIX 版の実装を揃える方針に切り替え。クリティカル セクションとスレッドは対応完了。残るはイベント。
―――イベントって、POSIX は何が相当するんだろう…。調べよう。
XAudio2 が使用できない。
もともと Null Device パターンで切り離し可能にはしてあったので、当該オブジェクトの生成処理をマクロで切り離しました。
―――PandaBoard だとどんな API で音を出すんだろう…。調べよう。