summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2024-04-10 14:51:44 +0200
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2024-04-18 23:15:25 +0200
commita78938e0f686263540e06d923f2949169f3219e4 (patch)
tree73c6aa0b540adca30d6b8db02e526b39efafe38f
parent8d84f7643bb80902ea4fedb2686557b58be2b221 (diff)
rhiwindow: Set DPR on image texture to ensure DPR-agnostic drawing
Otherwise the 20x20 margins will produce different layouts depending on the DPR, which is not what we want. Pick-to: 6.7 Change-Id: I4153d0843ef51c8e0f60d7d5166b153d45201c95 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
-rw-r--r--examples/gui/doc/src/rhiwindow.qdoc5
-rw-r--r--examples/gui/rhiwindow/rhiwindow.cpp9
2 files changed, 10 insertions, 4 deletions
diff --git a/examples/gui/doc/src/rhiwindow.qdoc b/examples/gui/doc/src/rhiwindow.qdoc
index b6fc279816..3ee33c8002 100644
--- a/examples/gui/doc/src/rhiwindow.qdoc
+++ b/examples/gui/doc/src/rhiwindow.qdoc
@@ -427,6 +427,11 @@
QRhiShaderResourceBindings, continue to be valid all the time. It is only
the underlying native resources that come and go over time.
+ Note also that we set a device pixel ratio on the image that matches
+ the window that we're drawing into. This ensures that the drawing code
+ can be DPR-agnostic, producing the same layout regardless of the DPR,
+ while also taking advantage of the additional pixels for improved fidelity.
+
\snippet rhiwindow/rhiwindow.cpp ensure-texture
Once a QImage is generated and the QPainter-based drawing into it has
diff --git a/examples/gui/rhiwindow/rhiwindow.cpp b/examples/gui/rhiwindow/rhiwindow.cpp
index 345286b635..3ae6faa802 100644
--- a/examples/gui/rhiwindow/rhiwindow.cpp
+++ b/examples/gui/rhiwindow/rhiwindow.cpp
@@ -281,17 +281,18 @@ void HelloWindow::ensureFullscreenTexture(const QSize &pixelSize, QRhiResourceUp
m_texture->create();
QImage image(pixelSize, QImage::Format_RGBA8888_Premultiplied);
+ image.setDevicePixelRatio(devicePixelRatio());
//! [ensure-texture]
QPainter painter(&image);
- painter.fillRect(QRectF(QPointF(0, 0), pixelSize), QColor::fromRgbF(0.4f, 0.7f, 0.0f, 1.0f));
+ painter.fillRect(QRectF(QPointF(0, 0), size()), QColor::fromRgbF(0.4f, 0.7f, 0.0f, 1.0f));
painter.setPen(Qt::transparent);
painter.setBrush({ QGradient(QGradient::DeepBlue) });
- painter.drawRoundedRect(QRectF(QPointF(20, 20), pixelSize - QSize(40, 40)), 16, 16);
+ painter.drawRoundedRect(QRectF(QPointF(20, 20), size() - QSize(40, 40)), 16, 16);
painter.setPen(Qt::black);
QFont font;
- font.setPixelSize(0.05 * qMin(pixelSize.width(), pixelSize.height()));
+ font.setPixelSize(0.05 * qMin(width(), height()));
painter.setFont(font);
- painter.drawText(QRectF(QPointF(60, 60), pixelSize - QSize(120, 120)), 0,
+ painter.drawText(QRectF(QPointF(60, 60), size() - QSize(120, 120)), 0,
QLatin1String("Rendering with QRhi to a resizable QWindow.\nThe 3D API is %1.\nUse the command-line options to choose a different API.")
.arg(graphicsApiName()));
painter.end();