Fix Vsync Via Compositor causing halved refresh rate when vsync is forced by the graphics driver
Add check to prevent compositor sync if the graphics driver is forcing vsync. Fixes #35038. (Addendum: this PR does not negatively impact users unaffected by #35038.)
This commit is contained in:
parent
f2d45676c9
commit
c08d8feead
@ -89,7 +89,7 @@ void ContextGL_Windows::swap_buffers() {
|
|||||||
if (use_vsync) {
|
if (use_vsync) {
|
||||||
bool vsync_via_compositor_now = should_vsync_via_compositor();
|
bool vsync_via_compositor_now = should_vsync_via_compositor();
|
||||||
|
|
||||||
if (vsync_via_compositor_now) {
|
if (vsync_via_compositor_now && wglGetSwapIntervalEXT() == 0) {
|
||||||
DwmFlush();
|
DwmFlush();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,6 +205,7 @@ Error ContextGL_Windows::initialize() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT");
|
wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT");
|
||||||
|
wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)wglGetProcAddress("wglGetSwapIntervalEXT");
|
||||||
//glWrapperInit(wrapper_get_proc_address);
|
//glWrapperInit(wrapper_get_proc_address);
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
typedef bool(APIENTRY *PFNWGLSWAPINTERVALEXTPROC)(int interval);
|
typedef bool(APIENTRY *PFNWGLSWAPINTERVALEXTPROC)(int interval);
|
||||||
|
typedef int(APIENTRY *PFNWGLGETSWAPINTERVALEXTPROC)(void);
|
||||||
|
|
||||||
class ContextGL_Windows {
|
class ContextGL_Windows {
|
||||||
|
|
||||||
@ -53,6 +54,7 @@ class ContextGL_Windows {
|
|||||||
bool vsync_via_compositor;
|
bool vsync_via_compositor;
|
||||||
|
|
||||||
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT;
|
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT;
|
||||||
|
PFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT;
|
||||||
|
|
||||||
static bool should_vsync_via_compositor();
|
static bool should_vsync_via_compositor();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user