openFrameworksには、0.9.0からマルチウィンドウ機能があります。
このマルチウィンドウ機能を複数ディスプレイで使う方法を紹介します。
・開発環境
macOS Sierra 10.12
openFrameworks 0.9.8
Xcode8.3.3
メインディスプレイサイズ:1280×800
サブディスプレイサイズ:2560×1440
・ディスプレイ配置
複数ディスプレイで別々のウィンドウを表示
・main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include "ofMain.h" #include "ofApp.h" #include "ofAppGLFWWindow.h" int main( ){ ofGLFWWindowSettings settings; //メインウィンドウ settings.width = 1280;//ウィンドウ幅 settings.height = 800;//ウィンドウ高さ settings.resizable = true; settings.decorated = false; settings.setPosition(ofVec2f(0,0));//ウィンドウ表示位置 shared_ptr<ofAppBaseWindow> mainWindow = ofCreateWindow(settings); //サブウィンドウ settings.width = 2560; settings.height = 1440; settings.resizable = true; settings.decorated = false; settings.setPosition(ofVec2f(1280,0)); shared_ptr<ofAppBaseWindow> subWindow = ofCreateWindow(settings); //Appの生成 shared_ptr<ofApp> mainApp(new ofApp); shared_ptr<SubApp> subApp(new SubApp); ofRunApp(mainWindow,mainApp); ofRunApp(subWindow,subApp); ofRunMainLoop(); } |
ポイント
・ofAppと同様にofBaseAppを継承したSubAppクラスを作成しておきます。
(両ウィンドウにofAppを表示する場合は、必要ありません。)
・サブウィンドウのsetPositionをメインディスプレイの横幅分ずらす。
(サブディスプレイを右側に配置したため)
・プロパティのdecoratedをfalseにするとメニューバーが非表示になりフルスクリーンにできます。
(各AppのsetupでofSetFullscreen(true)を書けば必要ありません。)
おまけ:1つのウィンドウを2画面に渡って表示
・プロパティのmultiMonitorFullScreenをtrueにする。
・システム環境設定 -> Mission Controlの「ディスプレイごとに個別の操作スペース」のチェックを外す。また、一旦ログアウトする必要あり。
・main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
int main( ){ ofGLFWWindowSettings settings; settings.width = 1280; settings.height = 800; settings.setPosition(ofVec2f(612,0)); settings.resizable = true; settings.decorated = false; settings.multiMonitorFullScreen = true; shared_ptr<ofAppBaseWindow> mainWindow = ofCreateWindow(settings); shared_ptr<ofApp> mainApp(new ofApp); ofRunApp(mainWindow, mainApp); ofRunMainLoop(); } |
これによって、2画面をまたいで半分づつ表示されます。
2つのディスプレイの解像度が合っていないとウィンドウの表示のされ方に違いが出ますので、こちらは同型のディスプレイを2つ以上使う場合に適しています。