OgreMeshy

OGREのメッシュファイルビューアのOgreMeshyってやつがあります.

せっかくOGRE1.9のバイナリを作ったので,手元でビルドしてみました. ソースはrev29を使いました.何点か変更しないと上手く動かなかったので,パッチも置いておきます.

ogremeshy

以下,変更点です.

  • デバッグビルド時にはOGREもデバッグ版をリンクするように変更.
  • CMakeLists.txtのインストール処理などを一部変更.
  • D3D11に対応.もともと対応しているようなんですがRTShaderSystemが使われないような微妙なバグがありました.
  • スレッドサポートに対応.スレッド有効でビルドされているOGREを使うと,デッドロックが発生するバグを修正しました.
  • UNICODEビルドに対応.
  • RTShaderSystemの終了処理が書かれていなかったので追記.

OGREをスレッド有効でビルドしてる場合,OGREは初期化時にスレッド(WorkQueue)をいくつか立てるようです. これらスレッドが立ち上がるときログメッセージが非同期に書き込まれるのですが,それとOgreMeshyのログを ウィンドウに表示する機能とが干渉してデッドロックを引き起こしていたようです.

ちなみにスレッド有効ビルドをしている場合は,この初期化時のスレッド作成を無効化する機能が 公式にはありません.ただ,スレッド作成はレンダーウィンドウ作成時に発生するので, その前に以下のような処理を挟むとWorkQueueの作成を防止できます(余り意味はありませんけど).

  Ogre::Root* root = /* ... */;
  static_cast<Ogre::DefaultWorkQueueBase*>(root->getWorkQueue())
    ->setWorkerThreadCount(0);

ビルド方法メモ

普通にCMakeでconfigureすればいいのですが注意点をメモっておきます.

  • CMAKE_MODULE_PATHを定義してOGREに同梱されているCMakeファイルのパスを指すようにする必要があります.
  • OGRE_HOMEを定義してOGREのあるパス(bin/lib/includeがあるパス)を指定する必要があります.
  • CMAKE_POLICY_DEFAULT_CMP0021CMAKE_POLICY_DEFAULT_CMP0043を”OLD”に設定しないと警告が出ます.
  • デフォルトだとboostのDLL版をリンクしようとするので,スタティックリンクしたい場合はBoost_USE_STATIC_LIBS(bool型)を定義する必要があります.
  • wxWidgets3以降を使っている場合,CMake2.8系ではwxWidgetsを上手く見つけてくれないようです.
  • INSTALLをビルドする前に,ogremeshy_rev29\scripts\Resources\copyresources.batを実行しておく必要があります.

Leave a Reply