Fix QOpenGLWindow tests when devicePixelRatio != 1
Change-Id: I83d71de8b9d735cd649a6c514e41a9ff23625005 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
This commit is contained in:
parent
bcda685be9
commit
c231694949
@ -211,8 +211,11 @@ public:
|
|||||||
context->makeCurrent(q);
|
context->makeCurrent(q);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const int deviceWidth = q->width() * q->devicePixelRatio();
|
||||||
|
const int deviceHeight = q->height() * q->devicePixelRatio();
|
||||||
|
const QSize deviceSize(deviceWidth, deviceHeight);
|
||||||
if (updateBehavior > QOpenGLWindow::NoPartialUpdate) {
|
if (updateBehavior > QOpenGLWindow::NoPartialUpdate) {
|
||||||
if (!fbo || fbo->size() != q->size() * q->devicePixelRatio()) {
|
if (!fbo || fbo->size() != deviceSize) {
|
||||||
QOpenGLFramebufferObjectFormat fboFormat;
|
QOpenGLFramebufferObjectFormat fboFormat;
|
||||||
fboFormat.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
|
fboFormat.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
|
||||||
if (q->requestedFormat().samples() > 0) {
|
if (q->requestedFormat().samples() > 0) {
|
||||||
@ -221,15 +224,13 @@ public:
|
|||||||
else
|
else
|
||||||
qWarning("QOpenGLWindow: PartialUpdateBlend does not support multisampling");
|
qWarning("QOpenGLWindow: PartialUpdateBlend does not support multisampling");
|
||||||
}
|
}
|
||||||
fbo.reset(new QOpenGLFramebufferObject(q->size() * q->devicePixelRatio(), fboFormat));
|
fbo.reset(new QOpenGLFramebufferObject(deviceSize, fboFormat));
|
||||||
markWindowAsDirty();
|
markWindowAsDirty();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
markWindowAsDirty();
|
markWindowAsDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
const int deviceWidth = q->width() * q->devicePixelRatio();
|
|
||||||
const int deviceHeight = q->height() * q->devicePixelRatio();
|
|
||||||
paintDevice->setSize(QSize(deviceWidth, deviceHeight));
|
paintDevice->setSize(QSize(deviceWidth, deviceHeight));
|
||||||
paintDevice->setDevicePixelRatio(q->devicePixelRatio());
|
paintDevice->setDevicePixelRatio(q->devicePixelRatio());
|
||||||
context->functions()->glViewport(0, 0, deviceWidth, deviceHeight);
|
context->functions()->glViewport(0, 0, deviceWidth, deviceHeight);
|
||||||
@ -252,11 +253,13 @@ public:
|
|||||||
context->functions()->glBindFramebuffer(GL_FRAMEBUFFER, context->defaultFramebufferObject());
|
context->functions()->glBindFramebuffer(GL_FRAMEBUFFER, context->defaultFramebufferObject());
|
||||||
|
|
||||||
if (updateBehavior == QOpenGLWindow::PartialUpdateBlit && hasFboBlit) {
|
if (updateBehavior == QOpenGLWindow::PartialUpdateBlit && hasFboBlit) {
|
||||||
|
const int deviceWidth = q->width() * q->devicePixelRatio();
|
||||||
|
const int deviceHeight = q->height() * q->devicePixelRatio();
|
||||||
QOpenGLExtensions extensions(context.data());
|
QOpenGLExtensions extensions(context.data());
|
||||||
extensions.glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo->handle());
|
extensions.glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo->handle());
|
||||||
extensions.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, context->defaultFramebufferObject());
|
extensions.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, context->defaultFramebufferObject());
|
||||||
extensions.glBlitFramebuffer(0, 0, q->width(), q->height(),
|
extensions.glBlitFramebuffer(0, 0, deviceWidth, deviceHeight,
|
||||||
0, 0, q->width(), q->height(),
|
0, 0, deviceWidth, deviceHeight,
|
||||||
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||||
} else if (updateBehavior > QOpenGLWindow::NoPartialUpdate) {
|
} else if (updateBehavior > QOpenGLWindow::NoPartialUpdate) {
|
||||||
if (updateBehavior == QOpenGLWindow::PartialUpdateBlend) {
|
if (updateBehavior == QOpenGLWindow::PartialUpdateBlend) {
|
||||||
@ -591,7 +594,7 @@ int QOpenGLWindow::metric(PaintDeviceMetric metric) const
|
|||||||
break;
|
break;
|
||||||
case PdmDevicePixelRatio:
|
case PdmDevicePixelRatio:
|
||||||
if (d->paintDevice)
|
if (d->paintDevice)
|
||||||
return d->paintDevice->devicePixelRatio();
|
return devicePixelRatio();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -116,8 +116,8 @@ void tst_QOpenGLWindow::basic()
|
|||||||
QVERIFY(w.paintCount >= 1);
|
QVERIFY(w.paintCount >= 1);
|
||||||
|
|
||||||
// Check that something has been drawn;
|
// Check that something has been drawn;
|
||||||
QCOMPARE(w.img.size(), w.size());
|
QCOMPARE(w.img.size(), w.size() * w.devicePixelRatio());
|
||||||
QVERIFY(w.img.pixel(5, 5) == qRgb(255, 0, 0));
|
QVERIFY(w.img.pixel(QPoint(5, 5) * w.devicePixelRatio()) == qRgb(255, 0, 0));
|
||||||
|
|
||||||
// Check that the viewport was properly set.
|
// Check that the viewport was properly set.
|
||||||
w.makeCurrent();
|
w.makeCurrent();
|
||||||
@ -168,9 +168,9 @@ void tst_QOpenGLWindow::painter()
|
|||||||
w.show();
|
w.show();
|
||||||
QTest::qWaitForWindowExposed(&w);
|
QTest::qWaitForWindowExposed(&w);
|
||||||
|
|
||||||
QCOMPARE(w.img.size(), w.size());
|
QCOMPARE(w.img.size(), w.size() * w.devicePixelRatio());
|
||||||
QVERIFY(w.img.pixel(5, 5) == qRgb(0, 0, 255));
|
QVERIFY(w.img.pixel(QPoint(5, 5) * w.devicePixelRatio()) == qRgb(0, 0, 255));
|
||||||
QVERIFY(w.img.pixel(200, 5) == qRgb(255, 0, 0));
|
QVERIFY(w.img.pixel(QPoint(200, 5) * w.devicePixelRatio()) == qRgb(255, 0, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
class PartialPainterWindow : public QOpenGLWindow
|
class PartialPainterWindow : public QOpenGLWindow
|
||||||
@ -222,10 +222,10 @@ void tst_QOpenGLWindow::partial()
|
|||||||
// Now since the painting went to an extra framebuffer, all the rects should
|
// Now since the painting went to an extra framebuffer, all the rects should
|
||||||
// be present since everything is preserved between the frames.
|
// be present since everything is preserved between the frames.
|
||||||
QImage img = w.grabFramebuffer();
|
QImage img = w.grabFramebuffer();
|
||||||
QCOMPARE(img.size(), w.size());
|
QCOMPARE(img.size(), w.size() * w.devicePixelRatio());
|
||||||
QCOMPARE(img.pixel(5, 5), qRgb(0, 0, 255));
|
QCOMPARE(img.pixel(QPoint(5, 5) * w.devicePixelRatio()), qRgb(0, 0, 255));
|
||||||
QCOMPARE(img.pixel(15, 5), qRgb(0, 255, 0));
|
QCOMPARE(img.pixel(QPoint(15, 5) * w.devicePixelRatio()), qRgb(0, 255, 0));
|
||||||
QCOMPARE(img.pixel(25, 5), qRgb(0, 0, 255));
|
QCOMPARE(img.pixel(QPoint(25, 5) * w.devicePixelRatio()), qRgb(0, 0, 255));
|
||||||
}
|
}
|
||||||
|
|
||||||
class PaintUnderOverWindow : public QOpenGLWindow
|
class PaintUnderOverWindow : public QOpenGLWindow
|
||||||
|
Loading…
x
Reference in New Issue
Block a user