ページ

2012年1月29日日曜日

Ogre3Dのruby wrapper

Swig


Swigを使って自動生成を試みたところ、以下の2点の対処が困難。途中からSwigのコード解析をする羽目になり、人力で必要な部分だけwrapperを書いた方が早い気がしてきたので断念。

  • ネストされたネームスペースがうまく扱えない。

  • ネストされたテンプレートの展開が大変


それぞれ暫定対処があるものの、Iterator関係で両方絡んでくると、なかなか思い通りのwrapperコードが生成されず、発狂しそうになる。コードの自動生成ではよくあること。自動コード生成の試み自体は好きなので、嫌いになる前に、そっと距離を置くことにした...

Ogre.rb


Rice及びgccxmlを使ったruby wrapper生成プログラム(Rb++)を作成した作者自身が、それらのツールをOgre1.7.1に適用して生成したもの。とても便利なツール群を使った自動生成環境なのですが、Ogre1.7.4で試した際に以下の問題があり断念。

  • 使用しているRiceの制限で、コンストラクタを一つだけ選択する必要がある。

  • gccxmlのtr1 parse問題のためにOgre3Dのコードにパッチを当てる必要がある。

  • template系でコード生成エラーが出るため対象から外さないといけないlass/methodあり。

  • ネストされたtemplateクラス用wrapperコードのファイル名が254バイトを超え、書き出せない。

  • 単一ファイル生成モードによる回避を図ったが、gccxmlのファイル書き出し最中にError。


こちらもコード生成ツールのデバッグモードに突入。また、コード生成に必要なツールが多く、それぞれの動作を追いかけるのが少々面倒くさい。こちらも、再び気が向くまでそっとしておくことにした...

Libogre-ruby


普通に人力wrapperを作成しているが、まだ完成していない。進捗度は自作のwrapperと大差なく、開発も止まっているようなので、遠くから見守ることにした...

まとめ


ざっとググってみたが、意外に少なく、また今のところ決定打が見当たらない。C++からのruby wrapper自動生成に関しては、Ogre3Dで多用しているtemplateとネストの対処が鬼門のようで、皆さん苦労しているように見受けられる。人力生成は途中で飽きてくるため、各自必要な部分だけ作ったら止めてしまっているようだ。 どれかを手伝うのが世の中的には良い気がするが、シャイな私には無理のようだ。