web-dev-qa-db-ja.com

macOSでvsyncを無効にする方法

私のすべてのSDL/OpenGLプログラムでは、フレームレートが60 fpsで止まっているため、vsyncが有効になっているように見えますが、私やコードや設定では有効ではありません。だから私はそれを無効にする方法があるかどうか、おそらくいくつかの深いmacOS設定で今やりたいですか?

14
Nox

何年も回避策を探した後(そして Brett Hale の助けを借りて)これは私のために働いたものです-私はレンダリングループの開始時にそのコードを追加しました(そしてinit、as Appleは毎回SwapInterval設定をリセットするようです...)そして最終的にフレームレートを非同期にすることができました:

#ifdef __Apple__
GLint                       sync = 0;
CGLContextObj               ctx = CGLGetCurrentContext();

CGLSetParameter(ctx, kCGLCPSwapInterval, &sync);
#endif

<OpenGL/gl.h>を含めることを忘れないでください

それは最高の解決策ではありませんが、実際に私が見つけた唯一の解決策は魅力のように機能します。

5
Nox

これにより、MacBookProで毎秒約700フレームを取得することができました。

永続的なものでもなく、テスト/ベンチマークに最適です。

ソース

8
cevaris

SOへようこそ。同様の質問に対するアプローチの概要を説明しました ここ 。ほとんどのMacLCDは60Hzにロックされており、最近のハードウェアは120Hzに制限されていることを考慮する必要があります。 vsyncを無効にすると、CPU/GPUサイクルが無駄になり、ティアリングアーティファクトが発生する可能性があります。

5
Brett Hale