glfwSwapInterval(1)
は私のために働いていないようです。私がCCCでVSyncを強制するかSFMLでsetVerticalSyncEnabled(true)
を強制すると、my fpsは60に落ちますが、GLFWは9000 fpsで動作し続けます。私は間違ったやり方をしているのですか?またはGLFWが盗んでいますか?GLFW VSyncが動作しない
9
A
答えて
7
GLFWはデスクトップ合成を有効にするとVSyncをオンにしたくないようです。とにかくVSyncが必要な場合は、Windows上で動作します。
#ifdef _WIN32
// Turn on vertical screen sync under Windows.
// (I.e. it uses the WGL_EXT_swap_control extension)
typedef BOOL (WINAPI *PFNWGLSWAPINTERVALEXTPROC)(int interval);
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT = NULL;
wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT");
if(wglSwapIntervalEXT)
wglSwapIntervalEXT(1);
#endif
他のOSについては、Googleがお手伝いします。
+2
procアドレスが0だったので、この修正はIntel HD 4600では機能しませんでした。しかし、GLFW3を設定してGLFW_USE_DWM_SWAP_INTERVALを使用するようにしました。 – Bram
3
GLFW_USE_DWM_SWAP_INTERVALオプションを付けてGLFW3を再構築します。
glfw/src/config.h
GLFWのドキュメントは、ジッタの問題について警告するが、私はそれらを自分で表示されません。を参照してください。
+2
リリース3.1.2では、このフラグは削除されました。しかし、修正が入っているので、もう必要ありません:) – legends2k
どのGPUを使用していますか? GLFW FAQ [何か](http://www.glfw.org/faq.html#33__why_doesnt_glfwswapinterval_work)について、 'glfwSwapInterval'が一部のATIドライバで動作しないことについて説明しています。私はGLFWを使ったことはありませんが、 '(PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress(" wglSwapIntervalEXT ")'を直接呼び出せますか? –
@エドワードAはいATI。それはなぜSFMLで動作するのでしょうか? 'wglSwapIntervalEXT'は何らかの理由で動作します...だからGLFWは盗聴されていますか? – mwerschy
「wglSwapIntervalEXT」が働いていても、GLFWと何か関係があります。あなたは[GLFWソース](http://www.glfw.org/download.html)をダウンロードし、それと一緒にプログラムをコンパイルし、ブレークポイント@ [行831 window.c](https:// github。 com/glfw/glfw-legacy/blob/master/lib/window.c#L831)と[1638 win32_window.c](https://github.com/glfw/glfw-legacy/blob/master/lib/win32 /win32_window.c#L1638)実際に何が起こっているか見ることができます。チェックがうまくいかない場合は、その1つになる可能性があります。 –