summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/kernel/qsurface.cpp4
-rw-r--r--src/gui/kernel/qsurface.h3
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.cpp36
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.h4
-rw-r--r--tests/manual/rhi/hellominimalcrossgfxtriangle/window.cpp2
-rw-r--r--tests/manual/rhi/multiwindow/multiwindow.cpp4
-rw-r--r--tests/manual/rhi/multiwindow_threaded/window.cpp4
-rw-r--r--tests/manual/rhi/shared/examplefw.h2
8 files changed, 32 insertions, 27 deletions
diff --git a/src/gui/kernel/qsurface.cpp b/src/gui/kernel/qsurface.cpp
index 85c576b21c..5a293e4250 100644
--- a/src/gui/kernel/qsurface.cpp
+++ b/src/gui/kernel/qsurface.cpp
@@ -85,7 +85,9 @@ QT_BEGIN_NAMESPACE
\value MetalSurface The surface is a Metal compatible surface and can be used
in conjunction with Apple's Metal graphics API. This surface type is supported
on macOS only.
-
+ \value Direct3DSurface The surface is a Direct 3D 11 and 12 compatible
+ surface and can be used in conjunction with the DXGI and Direct3D APIs. This
+ surface type is supported on Windows only.
*/
diff --git a/src/gui/kernel/qsurface.h b/src/gui/kernel/qsurface.h
index 521593ea5c..4ba1d4b589 100644
--- a/src/gui/kernel/qsurface.h
+++ b/src/gui/kernel/qsurface.h
@@ -69,7 +69,8 @@ public:
RasterGLSurface,
OpenVGSurface,
VulkanSurface,
- MetalSurface
+ MetalSurface,
+ Direct3DSurface
};
Q_ENUM(SurfaceType)
diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp
index 5987324ac1..7528bf4155 100644
--- a/src/plugins/platforms/windows/qwindowswindow.cpp
+++ b/src/plugins/platforms/windows/qwindowswindow.cpp
@@ -351,6 +351,8 @@ static inline bool windowIsAccelerated(const QWindow *w)
return qt_window_private(const_cast<QWindow *>(w))->compositing;
case QSurface::VulkanSurface:
return true;
+ case QSurface::Direct3DSurface:
+ return true;
default:
return false;
}
@@ -1365,14 +1367,12 @@ QWindowsWindow::QWindowsWindow(QWindow *aWindow, const QWindowsWindowData &data)
const Qt::WindowType type = aWindow->type();
if (type == Qt::Desktop)
return; // No further handling for Qt::Desktop
-#ifndef QT_NO_OPENGL
- if (aWindow->surfaceType() == QWindow::OpenGLSurface) {
- if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL)
- setFlag(OpenGLSurface);
- else
- setFlag(OpenGL_ES2);
- }
-#endif // QT_NO_OPENGL
+ if (aWindow->surfaceType() == QWindow::Direct3DSurface)
+ setFlag(Direct3DSurface);
+#if QT_CONFIG(opengl)
+ if (aWindow->surfaceType() == QWindow::OpenGLSurface)
+ setFlag(OpenGLSurface);
+#endif
#if QT_CONFIG(vulkan)
if (aWindow->surfaceType() == QSurface::VulkanSurface)
setFlag(VulkanSurface);
@@ -1831,8 +1831,11 @@ void QWindowsWindow::handleHidden()
void QWindowsWindow::handleCompositionSettingsChanged()
{
const QWindow *w = window();
- if ((w->surfaceType() == QWindow::OpenGLSurface || w->surfaceType() == QWindow::VulkanSurface)
- && w->format().hasAlpha()) {
+ if ((w->surfaceType() == QWindow::OpenGLSurface
+ || w->surfaceType() == QWindow::VulkanSurface
+ || w->surfaceType() == QWindow::Direct3DSurface)
+ && w->format().hasAlpha())
+ {
applyBlurBehindWindow(handle());
}
}
@@ -2008,9 +2011,10 @@ void QWindowsWindow::handleGeometryChange()
return; // QGuiApplication will send resize when screen actually changes
}
QWindowSystemInterface::handleGeometryChange(window(), m_data.geometry);
- // QTBUG-32121: OpenGL/normal windows (with exception of ANGLE) do not receive
- // expose events when shrinking, synthesize.
- if (!testFlag(OpenGL_ES2) && isExposed()
+ // QTBUG-32121: OpenGL/normal windows (with exception of ANGLE
+ // which we no longer support in Qt 6) do not receive expose
+ // events when shrinking, synthesize.
+ if (isExposed()
&& m_data.geometry.size() != previousGeometry.size() // Exclude plain move
// One dimension grew -> Windows will send expose, no need to synthesize.
&& !(m_data.geometry.width() > previousGeometry.width() || m_data.geometry.height() > previousGeometry.height())) {
@@ -2139,7 +2143,9 @@ bool QWindowsWindow::handleWmPaint(HWND hwnd, UINT message,
// Observed painting problems with Aero style disabled (QTBUG-7865).
if (Q_UNLIKELY(!dwmIsCompositionEnabled())
- && ((testFlag(OpenGLSurface) && testFlag(OpenGLDoubleBuffered)) || testFlag(VulkanSurface)))
+ && ((testFlag(OpenGLSurface) && testFlag(OpenGLDoubleBuffered))
+ || testFlag(VulkanSurface)
+ || testFlag(Direct3DSurface)))
{
SelectClipRgn(ps.hdc, nullptr);
}
@@ -2523,7 +2529,7 @@ void QWindowsWindow::setOpacity(qreal level)
m_opacity = level;
if (m_data.hwnd)
setWindowOpacity(m_data.hwnd, m_data.flags,
- window()->format().hasAlpha(), testFlag(OpenGLSurface) || testFlag(VulkanSurface),
+ window()->format().hasAlpha(), testFlag(OpenGLSurface) || testFlag(VulkanSurface) || testFlag(Direct3DSurface),
level);
}
}
diff --git a/src/plugins/platforms/windows/qwindowswindow.h b/src/plugins/platforms/windows/qwindowswindow.h
index 1f1af82da2..b0f58b09a9 100644
--- a/src/plugins/platforms/windows/qwindowswindow.h
+++ b/src/plugins/platforms/windows/qwindowswindow.h
@@ -219,7 +219,6 @@ public:
WithinSetParent = 0x2,
WithinSetGeometry = 0x8,
OpenGLSurface = 0x10,
- OpenGL_ES2 = 0x20,
OpenGLDoubleBuffered = 0x40,
OpenGlPixelFormatInitialized = 0x80,
BlockedByModal = 0x100,
@@ -239,7 +238,8 @@ public:
WithinDpiChanged = 0x400000,
VulkanSurface = 0x800000,
ResizeMoveActive = 0x1000000,
- DisableNonClientScaling = 0x2000000
+ DisableNonClientScaling = 0x2000000,
+ Direct3DSurface = 0x4000000
};
QWindowsWindow(QWindow *window, const QWindowsWindowData &data);
diff --git a/tests/manual/rhi/hellominimalcrossgfxtriangle/window.cpp b/tests/manual/rhi/hellominimalcrossgfxtriangle/window.cpp
index 0395ffd8bb..edcb81b4fe 100644
--- a/tests/manual/rhi/hellominimalcrossgfxtriangle/window.cpp
+++ b/tests/manual/rhi/hellominimalcrossgfxtriangle/window.cpp
@@ -65,7 +65,7 @@ Window::Window(QRhi::Implementation graphicsApi)
setSurfaceType(VulkanSurface);
break;
case QRhi::D3D11:
- setSurfaceType(OpenGLSurface);
+ setSurfaceType(Direct3DSurface);
break;
case QRhi::Metal:
setSurfaceType(MetalSurface);
diff --git a/tests/manual/rhi/multiwindow/multiwindow.cpp b/tests/manual/rhi/multiwindow/multiwindow.cpp
index f48b931b01..4a5345beb9 100644
--- a/tests/manual/rhi/multiwindow/multiwindow.cpp
+++ b/tests/manual/rhi/multiwindow/multiwindow.cpp
@@ -330,12 +330,10 @@ Window::Window(const QString &title, const QColor &bgColor, int axis, bool noVSy
#endif
break;
case D3D11:
- setSurfaceType(OpenGLSurface); // not a typo
+ setSurfaceType(Direct3DSurface);
break;
case Metal:
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0))
setSurfaceType(MetalSurface);
-#endif
break;
default:
break;
diff --git a/tests/manual/rhi/multiwindow_threaded/window.cpp b/tests/manual/rhi/multiwindow_threaded/window.cpp
index aa7b479047..d05543b4ae 100644
--- a/tests/manual/rhi/multiwindow_threaded/window.cpp
+++ b/tests/manual/rhi/multiwindow_threaded/window.cpp
@@ -75,12 +75,10 @@ Window::Window(const QString &title, GraphicsApi api)
#endif
break;
case D3D11:
- setSurfaceType(OpenGLSurface); // not a typo
+ setSurfaceType(Direct3DSurface);
break;
case Metal:
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0))
setSurfaceType(MetalSurface);
-#endif
break;
default:
break;
diff --git a/tests/manual/rhi/shared/examplefw.h b/tests/manual/rhi/shared/examplefw.h
index 92e95313e8..282e3ec8d6 100644
--- a/tests/manual/rhi/shared/examplefw.h
+++ b/tests/manual/rhi/shared/examplefw.h
@@ -192,7 +192,7 @@ Window::Window()
setSurfaceType(VulkanSurface);
break;
case D3D11:
- setSurfaceType(OpenGLSurface); // not a typo
+ setSurfaceType(Direct3DSurface);
break;
case Metal:
#if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0))