WinRT QPA: Fix crash in QWinRTBackingStore::flush()
QWinRTBackingStore::flush() was not considering the possibility that the supplied region may fall partially outside the bounds of the paint device. This resulted in possible accesses to invalid memory addresses, causing a crash. This bug was exposed by an update in ANGLE that was causing a crash when running tst_QTableView::bigMode with a small screen size. With this fix the function will use the intersection of the supplied region with the paint device bounds. Change-Id: I2f0f0f7f5510688bfa1459320a0c146df6be65d1 Reviewed-by: Miguel Costa <miguel.costa@qt.io>
This commit is contained in:
parent
9098ef697a
commit
4d51e099b3
@ -118,11 +118,14 @@ void QWinRTBackingStore::flush(QWindow *window, const QRegion ®ion, const QPo
|
|||||||
if (d->size.isEmpty())
|
if (d->size.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
const QRect bounds = region.boundingRect() & d->paintDevice.rect();
|
||||||
|
if (bounds.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
const bool ok = d->context->makeCurrent(window);
|
const bool ok = d->context->makeCurrent(window);
|
||||||
if (!ok)
|
if (!ok)
|
||||||
qWarning("unable to flush");
|
qWarning("unable to flush");
|
||||||
|
|
||||||
const QRect bounds = region.boundingRect();
|
|
||||||
glBindTexture(GL_TEXTURE_2D, d->fbo->texture());
|
glBindTexture(GL_TEXTURE_2D, d->fbo->texture());
|
||||||
// TODO: when ANGLE GLES3 support is finished, use the glPixelStorei functions to minimize upload
|
// TODO: when ANGLE GLES3 support is finished, use the glPixelStorei functions to minimize upload
|
||||||
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, bounds.y(), d->size.width(), bounds.height(),
|
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, bounds.y(), d->size.width(), bounds.height(),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user