なかなかやっている人も少ない OpenGL のフルスクリーンの話になります。さらにそれのデュアルディスプレイ版となるとほぼ皆無といっていい内容かと思います。ちなみに先日の Windows 10 では使えるのか?と試した話の延長です。
OpenGL では DirectX とは違い、それぞれの画面で OpenGL のコンテキストを作り、必要に応じてリソースを共有できるようにします。あとはコレを wglMakeCurrent で切り替えつつ描画を行う、といった感じで処理するので、別段難しいことはここにはないです。
フルスクリーン化するAPIは OpenGL にはないため、 Windows API で最前面で全画面をおおうウィンドウを作ります。
最大の問題点
OpenGL APIでフルスクリーン化する機能を備えていないため、 Windows API で何とかする感じになっています。つまりは OpenGL はフルスクリーンについて何も考慮をされていないといってもよいでしょう(言い過ぎかもしれませんが・・・)
試しに近年の Windows OS でこれらの挙動を確認してみました。以下に示すようにデバイスとOSと依存して使えない環境もあるようです。
(機材の関係で、環境をそろえることが出来なかったり、ばらばらだったりしますがご了承下さい)。
OS | デバイス | 判定 |
Windows7 | Geforce650Ti | OK |
Windows8 | Geforce750Ti | NG |
Windows8.1Update | Geforce750Ti | OK |
Windows10(build10240) | Geforce750Ti | OK |
ここでの使えないというのは、他方のウィンドウに描画される内容がとても低フレームレートになってしまい、なめらかな描画更新ができないという状況を意味しています。
そもそもそれぞれの画面内をクリックするような操作を行うと、一瞬おかしな映像が見えてしまったりするのですが・・・。
試したドライバは、現在の最新版 353.30 でした。NVIDIA というと OpenGL 対応を積極的に行っているメーカーのような印象があり、うまく動くと思っていただけに今回の件は残念でした。
続いて AMD (RADEON) で同じことを確認してみました。
OS | デバイス | 判定 |
Windows7 | RADEON HD 7750 | 未チェック |
Windows8 | RADEON HD 7750(14.4) | OK |
Windows8.1Update | RADEON HD 7750(14.4) | OK |
Windows10(build10240) | RADEON HD 7750(15.7) | OK |
こちらの場合にはそれぞれの画面内をクリックするような操作を行っても、一瞬おかしな映像が見えたりしませんでした.
まとめ
OpenGL でデュアルディスプレイのフルスクリーン対応は Windows8 が例外的な動きをするようなので、難しそうです。もしかしたらいつか NVIDIA ドライバが更新されて正常に動くかもしれませんが、今となっては比較的古い Windows8 なので見込みは薄そうです。