Fix high dpi support in QOpenGLWindow

Change-Id: I0be29fb25d854e09ae961cade0c8490586788394
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
bb10
Laszlo Agocs 2014-09-11 13:20:07 +02:00 committed by Simon Hausmann
parent bde9387dba
commit 75ae4dacbc
1 changed files with 4 additions and 3 deletions

View File

@ -220,7 +220,7 @@ public:
}
if (updateBehavior > QOpenGLWindow::NoPartialUpdate) {
if (!fbo || fbo->size() != q->size()) {
if (!fbo || fbo->size() != q->size() * q->devicePixelRatio()) {
QOpenGLFramebufferObjectFormat fboFormat;
fboFormat.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
if (q->requestedFormat().samples() > 0) {
@ -229,7 +229,7 @@ public:
else
qWarning("QOpenGLWindow: PartialUpdateBlend does not support multisampling");
}
fbo.reset(new QOpenGLFramebufferObject(q->size(), fboFormat));
fbo.reset(new QOpenGLFramebufferObject(q->size() * q->devicePixelRatio(), fboFormat));
markWindowAsDirty();
}
} else {
@ -239,6 +239,7 @@ public:
const int deviceWidth = q->width() * q->devicePixelRatio();
const int deviceHeight = q->height() * q->devicePixelRatio();
paintDevice->setSize(QSize(deviceWidth, deviceHeight));
paintDevice->setDevicePixelRatio(q->devicePixelRatio());
context->functions()->glViewport(0, 0, deviceWidth, deviceHeight);
context->functions()->glBindFramebuffer(GL_FRAMEBUFFER, context->defaultFramebufferObject());
@ -273,7 +274,7 @@ public:
if (!blitter.isCreated())
blitter.create();
QRect windowRect(QPoint(0, 0), q->size());
QRect windowRect(QPoint(0, 0), fbo->size());
QMatrix4x4 target = QOpenGLTextureBlitter::targetTransform(windowRect, windowRect);
blitter.bind();
blitter.blit(fbo->texture(), target, QOpenGLTextureBlitter::OriginBottomLeft);