Renderer: Expose present mode and allow to query/set it

This commit is contained in:
SirLynix
2023-08-13 18:16:03 +02:00
parent 28d69ab552
commit e8620894f7
21 changed files with 420 additions and 43 deletions

View File

@@ -73,15 +73,34 @@ namespace Nz::GL
}
}
void WGLContext::EnableVerticalSync(bool enabled)
PresentModeFlags WGLContext::GetSupportedPresentModes() const
{
PresentModeFlags supportedModes = PresentMode::Immediate;
if (wglSwapIntervalEXT)
{
if (!SetCurrentContext(this))
return;
wglSwapIntervalEXT(enabled);
supportedModes |= PresentMode::VerticalSync;
if (HasPlatformExtension("WGL_EXT_swap_control_tear"))
supportedModes |= PresentMode::RelaxedVerticalSync;
}
return supportedModes;
}
void WGLContext::SetPresentMode(PresentMode presentMode)
{
if (!SetCurrentContext(this))
return;
int interval = 0;
switch (presentMode)
{
case PresentMode::Immediate: interval = 0; break;
case PresentMode::RelaxedVerticalSync: interval = -1; break; //< WGL_EXT_swap_control_tear
case PresentMode::VerticalSync: interval = 1; break;
default: return; // TODO: Unreachable
}
wglSwapIntervalEXT(interval);
}
void WGLContext::SwapBuffers()