summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2012-11-06 09:25:13 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-11-06 16:35:11 +0100
commit92cd94ed1d468554da9e3378a6ce5920b2cfc3c7 (patch)
tree1f4de01735f4f012dee03d0ad5069057ab3dd2a3 /src/3rdparty/angle/src
parent15fc255c7c0a6a693c754734c39c37bd50b0634b (diff)
Dynamically resolve functions of dwmapi.dll.
The library is not present on Windows XP, for which /DELAYLOAD is used in ANGLE. However, as this causes problems with MinGW, use dynamic resolution. Task-number: QTBUG-27741 Change-Id: Ie4a2706d57b751fbb6fc6f3e76ef2e8ddac3b892 Reviewed-by: Kai Koehne <kai.koehne@digia.com>
Diffstat (limited to 'src/3rdparty/angle/src')
-rw-r--r--src/3rdparty/angle/src/libEGL/Surface.cpp39
1 files changed, 28 insertions, 11 deletions
diff --git a/src/3rdparty/angle/src/libEGL/Surface.cpp b/src/3rdparty/angle/src/libEGL/Surface.cpp
index 732c404b10..34df14cbb2 100644
--- a/src/3rdparty/angle/src/libEGL/Surface.cpp
+++ b/src/3rdparty/angle/src/libEGL/Surface.cpp
@@ -73,6 +73,9 @@ Surface::~Surface()
bool Surface::initialize()
{
+ typedef HRESULT (STDAPICALLTYPE *PtrDwmIsCompositionEnabled)(BOOL*);
+ typedef HRESULT (STDAPICALLTYPE *PtrDwmSetPresentParameters)(HWND, DWM_PRESENT_PARAMETERS *);
+
ASSERT(!mSwapChain && !mOffscreenTexture && !mDepthStencil);
if (!resetSwapChain())
@@ -82,17 +85,31 @@ bool Surface::initialize()
// to minimize the amount of queuing done by DWM between our calls to
// present and the actual screen.
if (mWindow && (getComparableOSVersion() >= versionWindowsVista)) {
- BOOL isComposited;
- HRESULT result = DwmIsCompositionEnabled(&isComposited);
- if (SUCCEEDED(result) && isComposited) {
- DWM_PRESENT_PARAMETERS presentParams;
- memset(&presentParams, 0, sizeof(presentParams));
- presentParams.cbSize = sizeof(DWM_PRESENT_PARAMETERS);
- presentParams.cBuffer = 2;
-
- result = DwmSetPresentParameters(mWindow, &presentParams);
- if (FAILED(result))
- ERR("Unable to set present parameters: 0x%08X", result);
+ // Resolve dwmapi.dll functions dynamically as the Library is
+ // not present on Windows XP. Alternatively, /DELAYLOAD could be used.
+ static PtrDwmIsCompositionEnabled dwmIsCompositionEnabled = 0;
+ static PtrDwmSetPresentParameters dwmSetPresentParameters = 0;
+ if (!dwmIsCompositionEnabled) {
+ if (const HMODULE dwmLibrary = LoadLibraryW(L"dwmapi.dll")) {
+ dwmIsCompositionEnabled =
+ (PtrDwmIsCompositionEnabled)GetProcAddress(dwmLibrary, "DwmIsCompositionEnabled");
+ dwmSetPresentParameters =
+ (PtrDwmSetPresentParameters)GetProcAddress(dwmLibrary, "DwmSetPresentParameters");
+ }
+ }
+ if (dwmIsCompositionEnabled && dwmSetPresentParameters) {
+ BOOL isComposited;
+ HRESULT result = dwmIsCompositionEnabled(&isComposited);
+ if (SUCCEEDED(result) && isComposited) {
+ DWM_PRESENT_PARAMETERS presentParams;
+ memset(&presentParams, 0, sizeof(presentParams));
+ presentParams.cbSize = sizeof(DWM_PRESENT_PARAMETERS);
+ presentParams.cBuffer = 2;
+
+ result = dwmSetPresentParameters(mWindow, &presentParams);
+ if (FAILED(result))
+ ERR("Unable to set present parameters: 0x%08X", result);
+ }
}
}