Browse Source

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

tags/2021-05-28
ed 5 years ago
parent
commit
a37b918082
2 changed files with 35 additions and 1 deletions
  1. +21
    -0
      modules/juce_gui_basics/native/juce_win32_Windowing.cpp
  2. +14
    -1
      modules/juce_opengl/native/juce_OpenGL_win32.h

+ 21
- 0
modules/juce_gui_basics/native/juce_win32_Windowing.cpp View File

@@ -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)
//==============================================================================


+ 14
- 1
modules/juce_opengl/native/juce_OpenGL_win32.h View File

@@ -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,6 +111,8 @@ public:
setProcessDPIAwarenessIfNecessary (nativeWindow->getNativeHandle());
#endif
updateThreadDPIAwareness();
context = &c;
return true;
}
@@ -116,7 +120,7 @@ public:
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 @@ private:
return format;
}
void updateThreadDPIAwareness() const
{
if (nativeWindow.get() != nullptr)
setThreadDPIAwareness (nativeWindow->getNativeHandle());
else
setThreadDPIAwareness (nullptr);
}
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NativeContext)
};


Loading…
Cancel
Save