TL;DR
-
GLUTを用いてアプリを作成するとこのような表示バグが起こることがある.
- 画面の左下にしか表示されない
-
Mojaveでも同様のバグがおきていたが修正されていた,しかしCatalinaでまた起きてしまった
-
Retina Display やHiDPIモニター だけで開発する際は注意
背景
Retina Display
Retinaディスプレイ(レティナディスプレイ、レティーナディスプレイ、英: Retina Display)は、アップル製品のうち、100〜160ppi程度であった従来のディスプレイ解像度の、およそ倍の解像度、高画素密度のディスプレイを指す名称である。
今までのディスプレイは1dotを表現するのに1px使用していたが
Retinaディスプレイは1dotを表現するのに4pxや9px使用する.
Retinaディスプレイって何?普通のディスプレイとどこが違うの?
問題
OpenGLの表示バグはなぜ起こったか
Retina Display上では600×400の描画をするとき,600×400×4px使用する.
OpenGLでは600×400の描画をするとき,600×400pxしか指定しない.
そのため画面の表示バグが起こる.
Mojaveでは解決されてたのにというフォーラム
That render issue first appeared on macOS Mojave, due to Apple's changes to their version of OpenGL/Freeglut. That got solved with Mojave .3
Then Catalina came along, and I kept on upgrading it with every beta release. All looked good and was working fine for me.
It still is. I'm on the official version now.
妥協案
- パッチを当てる
- Viewportをいじる
パッチを当てる
glutInitDisplayString("rgba stencil double samples=8 hidpi");
Viewportをいじる.