【Bug】Catalina での GLUT の表示バグと妥協案


TL;DR

  • GLUTを用いてアプリを作成するとこのような表示バグが起こることがある.

    • 画面の左下にしか表示されない

  • Mojaveでも同様のバグがおきていたが修正されていた,しかしCatalinaでまた起きてしまった

  • Retina Display やHiDPIモニター だけで開発する際は注意

背景

Retina Display

Retinaディスプレイ(レティナディスプレイ、レティーナディスプレイ、英: Retina Display)は、アップル製品のうち、100〜160ppi程度であった従来のディスプレイ解像度の、およそ倍の解像度、高画素密度のディスプレイを指す名称である。

Wikipedia

今までのディスプレイは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.

妥協案

  1. パッチを当てる
  2. Viewportをいじる

パッチを当てる

glutInitDisplayString("rgba stencil double samples=8 hidpi");

Viewportをいじる.