概要
openFrameworksを用いたマルチディスプレイ上で動くアプリケーションを作るときに、定番のAdd-onとしてofxFensterがあります。
これは広く使われていますが、一度でもofxFensterを使った物を作った人は、大抵「ofxFensterにはお世話になったし苦しめられた」みたいな感想を持っていることが多いです。
中身としてはBlenderのGhost( http://www.letworyinteractive.com/blendercode/d5/d2e/GHOSTPage.html )とGLUTに依存しています。
openFrameworksから使えるマルチウィンドウシステム用のadd-onみたいな物です。
僕はそれほど詳しくないですが、歴史的な経緯を含めて調べたのでまとめておきます。
結論
- 最新のopenFrameworks(0.8.x)上で今の段階で最新のofxFensterを新規導入するのは待った方が良い
- 新規に使うならofxSyphon https://github.com/astellato/ofxSyphon が良さそう。(Mac限定)
- windowsなら、ofxFenster ghost branchのheadを直して使うのが一番固い( https://github.com/underdoeg/ofxFenster/commit/42a080e1457c6fab9d8046f31305d93022d6c50f )
- 単にopenFrameworks0.8以上で、全画面でFullHD2枚ぶち抜きとかを作るなら
ofAppGLFWWindow win; win.setMultiDisplayFullscreen(true); ofSetupOpenGL(&win, 1920+1920,1080+1080, OF_FULLSCREEN);
こんな感じで良い。無理にofxFensterとか使わなくても良いと思います。
ofxFensterの歴史
つらい…
-openframeworks0.74
openFrameworksが一気に普及して、add-onがワシャワシャ出てきた ofxFensterもバリバリと開発されてドンドンissue出て、ちゃんと(?)ワークアラウンドも整備された
0.8-
changed default window manager from GLUT to GLFW とeventシステム周りがちょっと変わったので、ofxFensterもissueいっぱい出て枯れてきた
最近
作者が「ヨッシャなんか破壊的変更してGhost非依存でGLFWベースに書き換えるわ!!!」
みたいな事言って書き換えている最中。usage examplesとかもほとんど空っぽになってるので今使うのはちょっと怖い。
作者が「まあ開発中に安定板使いたければghostブランチ作っておく。それ使って」みたいな事言っています。
windows上でopenFrameworks0.8以上でofxFensterを使う
安定板扱いなので、ghostブランチのheadから持ってくる https://github.com/underdoeg/ofxFenster/tree/ghost/
ここに含まれる依存ライブラリ(ghost.lib)のビルドしたコンパイラが古いままなのでghost.libをビルドし直す。
ghostは
https://github.com/underdoeg/ghost
からチェックアウトしてVS2012でビルドし直す。
後は無限にwindowが生成されたらこんな感じで書き換える。
https://github.com/underdoeg/ofxFenster/commit/42a080e1457c6fab9d8046f31305d93022d6c50f
この使おうとしているghostブランチの古いofxfensterはGLUT依存で、最近のopenFrameworksはGLFW依存なので、openFrameworksの本体のsetup()の早い段階でおまじないとして glewInit(); を呼んでおくと良い(例えばフレームバッファ確保しようとしてaccess violation例外が出たら、これをしないとダメ)
そしてissueを眺めて地雷踏まない事を祈ります。 https://github.com/underdoeg/ofxFenster/issues?state=open
結論
Windowsつらい
openFrameworks周りのエコシステム、ProjectGeneratorやadd-on等で非常に素晴らしいけど、バージョンアップに追従していけないadd-onとかで酷いことになる。RubyのBundler相当のものが欲しい。