Skip to content
Permalink
Browse files

Windows: Correctly set the DPI-awareness of OpenGL worker threads

  • Loading branch information...
ed95 committed Sep 2, 2019
1 parent f95d9ea commit a37b918082b1a18d5ebbcf510bf4eba57393d6c0
@@ -4095,6 +4095,27 @@ JUCE_API bool shouldScaleGLWindow (void* hwnd)
}
#endif

JUCE_API void setThreadDPIAwareness (void* hwnd)
{
if (setThreadDPIAwarenessContext != nullptr)
{
if (! JUCEApplicationBase::isStandaloneApp())
{
if (hwnd != nullptr)
setThreadDPIAwarenessContext (isPerMonitorDPIAwareWindow ((HWND) hwnd) ? DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE
: DPI_AWARENESS_CONTEXT_UNAWARE);
}
else
{
#if JUCE_WIN_PER_MONITOR_DPI_AWARE
setThreadDPIAwarenessContext (DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE);
#else
setThreadDPIAwarenessContext (DPI_AWARENESS_CONTEXT_UNAWARE);
#endif
}
}
}

JUCE_IMPLEMENT_SINGLETON (HWNDComponentPeer::WindowClassHolder)

//==============================================================================
@@ -40,6 +40,8 @@ extern bool shouldScaleGLWindow (void* hwnd);
void setProcessDPIAwarenessIfNecessary (void*);
#endif

void setThreadDPIAwareness (void*);

//==============================================================================
class OpenGLContext::NativeContext
#if JUCE_WIN_PER_MONITOR_DPI_AWARE
@@ -109,14 +111,16 @@ class OpenGLContext::NativeContext
setProcessDPIAwarenessIfNecessary (nativeWindow->getNativeHandle());
#endif

updateThreadDPIAwareness();

context = &c;
return true;
}

void shutdownOnRenderThread() { deactivateCurrentContext(); context = nullptr; }

static void deactivateCurrentContext() { wglMakeCurrent (0, 0); }
bool makeActive() const noexcept { return isActive() || wglMakeCurrent (dc, renderContext) != FALSE; }
bool makeActive() const noexcept { updateThreadDPIAwareness(); return isActive() || wglMakeCurrent (dc, renderContext) != FALSE; }
bool isActive() const noexcept { return wglGetCurrentContext() == renderContext; }
void swapBuffers() const noexcept { SwapBuffers (dc); }

@@ -336,6 +340,15 @@ class OpenGLContext::NativeContext
return format;
}

void updateThreadDPIAwareness() const
{
if (nativeWindow.get() != nullptr)
setThreadDPIAwareness (nativeWindow->getNativeHandle());
else
setThreadDPIAwareness (nullptr);

}

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NativeContext)
};

0 comments on commit a37b918

Please sign in to comment.
You can’t perform that action at this time.