4

WGL_EXT_swap_control 拡張機能を使用すると、Windows でこれを実行できますが、同じことをリモートでクロスプラットフォームで行っても何も見つかりません。つまり、バッファ スワップを画面の更新と同期します。私のアプリケーションは GLEW を使用しているため、GLEW によって提供されるものが望ましいでしょう。Linux、Mac、および Windows のクロスプラットフォーム サポートが必要ですが、同期を設定できなくても (たとえば、ユーザーがグラフィックス ドライバーで強制的にオフにした場合)、私のアプリケーションは壊れません。

有効な答えとして、GLEWを使用して、多くのプラットフォームでそれを行うプログラムコードを受け入れます。

4

3 に答える 3

6

クロスプラットフォーム ソリューションを見つけるのが簡単ではないのには理由があります。プラットフォームは最終的にディスプレイ (およびスワッピング動作) を所有します。したがって、それは必然的にプラットフォーム API の一部です (公開されている場合)。クロスプラットフォームのソリューションは実際にはあり得ません。glew でさえ、プラットフォームとの相互作用に関しては、プラットフォーム固有のビットがいくつかあります。

ここで、すべてのプラットフォームがインターフェースの特定の部分に同じ API を使用するべきだと主張することができますが、それらから何らかの牽引力を得られるとは思えません。

最後に、すべてのフレームバッファが直接表示されるわけではありません。フレームバッファ ピクセルを実際にデスクトップにブレンドするウィンドウ管理システムを使用している場合 (Aero がアクティブなときに行うように)、とにかくスワップ動作を制御することはできません。

参考までに、主要なプラットフォームでこれを行うためのさまざまな API を以下に示します。

  • wglSwapIntervalEXT
  • glXSwapIntervalSGI
  • AGLSetInteger
于 2010-01-20T18:02:06.960 に答える
1

http://www.opengl.org/wiki/Swap_Intervalから (および間接的にhttp://www.opengl.org/registry/specs/SGI/swap_control.txt):

Linuxでは、物事ははるかに簡単です。GLX_SGI_swap_controlによって返される文字列にが存在する 場合 はglGetString(GL_EXTENSIONS)、を使用glXSwapIntervalSGI(0)してvsyncを無効にするか、を使用 glXSwapIntervalSGI(1)してvsync(別名垂直同期)を有効にすることができます。

于 2010-02-26T17:20:09.877 に答える
0

OS X の場合は、http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSOpenGLContext_Class/Reference/Reference.html を確認してください

NSOpenGLCPSwapInterval

スワップ間隔を設定または取得します。スワップ間隔は 1 ロングとして表されます。スワップ間隔が 0 (デフォルト) に設定されている場合、モニターの垂直方向のリフレッシュ レートに関係なく、flushBuffer メソッドができるだけ早く実行されます。スワップ間隔が 1 に設定されている場合、バッファーはモニターの垂直リトレース中にのみスワップされます。Mac OS X v10.0 以降で利用できます。

NSOpenGL.h で宣言されています。

于 2011-12-07T06:53:18.323 に答える