Make tst_qopengl more verbose.
Add more checks, compare size of converted images. Task-number: QTBUG-31611 Change-Id: I995071f4be097c08aa2917be03fd7196882ae2c2 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
This commit is contained in:
parent
18a444c330
commit
ebd8530cbc
@ -407,6 +407,10 @@ void qt_opengl_check_test_pattern(const QImage& img)
|
|||||||
// As we're doing more than trivial painting, we can't just compare to
|
// As we're doing more than trivial painting, we can't just compare to
|
||||||
// an image rendered with raster. Instead, we sample at well-defined
|
// an image rendered with raster. Instead, we sample at well-defined
|
||||||
// test-points:
|
// test-points:
|
||||||
|
QVERIFY(!img.isNull());
|
||||||
|
QVERIFY2(img.width() > 217, QByteArray::number(img.width()));
|
||||||
|
QVERIFY2(img.height() > 90, QByteArray::number(img.height()));
|
||||||
|
|
||||||
QFUZZY_COMPARE_PIXELS(img.pixel(39, 64), QColor(Qt::red).rgb());
|
QFUZZY_COMPARE_PIXELS(img.pixel(39, 64), QColor(Qt::red).rgb());
|
||||||
QFUZZY_COMPARE_PIXELS(img.pixel(89, 64), QColor(Qt::red).rgb());
|
QFUZZY_COMPARE_PIXELS(img.pixel(89, 64), QColor(Qt::red).rgb());
|
||||||
QFUZZY_COMPARE_PIXELS(img.pixel(64, 39), QColor(Qt::blue).rgb());
|
QFUZZY_COMPARE_PIXELS(img.pixel(64, 39), QColor(Qt::blue).rgb());
|
||||||
@ -430,7 +434,7 @@ void tst_QOpenGL::fboSimpleRendering()
|
|||||||
QOpenGLContext ctx;
|
QOpenGLContext ctx;
|
||||||
QVERIFY(ctx.create());
|
QVERIFY(ctx.create());
|
||||||
|
|
||||||
ctx.makeCurrent(surface.data());
|
QVERIFY(ctx.makeCurrent(surface.data()));
|
||||||
|
|
||||||
if (!QOpenGLFramebufferObject::hasOpenGLFramebufferObjects())
|
if (!QOpenGLFramebufferObject::hasOpenGLFramebufferObjects())
|
||||||
QSKIP("QOpenGLFramebufferObject not supported on this platform");
|
QSKIP("QOpenGLFramebufferObject not supported on this platform");
|
||||||
@ -439,21 +443,21 @@ void tst_QOpenGL::fboSimpleRendering()
|
|||||||
QOpenGLFramebufferObjectFormat fboFormat;
|
QOpenGLFramebufferObjectFormat fboFormat;
|
||||||
fboFormat.setAttachment(QOpenGLFramebufferObject::NoAttachment);
|
fboFormat.setAttachment(QOpenGLFramebufferObject::NoAttachment);
|
||||||
|
|
||||||
QOpenGLFramebufferObject *fbo = new QOpenGLFramebufferObject(200, 100, fboFormat);
|
const QSize size(200, 100);
|
||||||
|
QScopedPointer<QOpenGLFramebufferObject> fbo(new QOpenGLFramebufferObject(size, fboFormat));
|
||||||
|
|
||||||
fbo->bind();
|
QVERIFY(fbo->bind());
|
||||||
|
|
||||||
glClearColor(1.0, 0.0, 0.0, 1.0);
|
glClearColor(1.0, 0.0, 0.0, 1.0);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
glFinish();
|
glFinish();
|
||||||
|
|
||||||
QImage fb = fbo->toImage().convertToFormat(QImage::Format_RGB32);
|
const QImage fb = fbo->toImage().convertToFormat(QImage::Format_RGB32);
|
||||||
QImage reference(fb.size(), QImage::Format_RGB32);
|
QCOMPARE(fb.size(), size);
|
||||||
|
QImage reference(size, QImage::Format_RGB32);
|
||||||
reference.fill(0xffff0000);
|
reference.fill(0xffff0000);
|
||||||
|
|
||||||
QFUZZY_COMPARE_IMAGES(fb, reference);
|
QFUZZY_COMPARE_IMAGES(fb, reference);
|
||||||
|
|
||||||
delete fbo;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QOpenGL::fboTextureOwnership_data()
|
void tst_QOpenGL::fboTextureOwnership_data()
|
||||||
@ -526,7 +530,7 @@ void tst_QOpenGL::fboRendering()
|
|||||||
QOpenGLContext ctx;
|
QOpenGLContext ctx;
|
||||||
QVERIFY(ctx.create());
|
QVERIFY(ctx.create());
|
||||||
|
|
||||||
ctx.makeCurrent(surface.data());
|
QVERIFY(ctx.makeCurrent(surface.data()));
|
||||||
|
|
||||||
if (!QOpenGLFramebufferObject::hasOpenGLFramebufferObjects())
|
if (!QOpenGLFramebufferObject::hasOpenGLFramebufferObjects())
|
||||||
QSKIP("QOpenGLFramebufferObject not supported on this platform");
|
QSKIP("QOpenGLFramebufferObject not supported on this platform");
|
||||||
@ -536,12 +540,13 @@ void tst_QOpenGL::fboRendering()
|
|||||||
fboFormat.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
|
fboFormat.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
|
||||||
|
|
||||||
// Uncomplicate things by using NPOT:
|
// Uncomplicate things by using NPOT:
|
||||||
QOpenGLFramebufferObject fbo(256, 128, fboFormat);
|
const QSize size(256, 128);
|
||||||
|
QOpenGLFramebufferObject fbo(size, fboFormat);
|
||||||
|
|
||||||
if (fbo.attachment() != QOpenGLFramebufferObject::CombinedDepthStencil)
|
if (fbo.attachment() != QOpenGLFramebufferObject::CombinedDepthStencil)
|
||||||
QSKIP("FBOs missing combined depth~stencil support");
|
QSKIP("FBOs missing combined depth~stencil support");
|
||||||
|
|
||||||
fbo.bind();
|
QVERIFY(fbo.bind());
|
||||||
|
|
||||||
QPainter fboPainter;
|
QPainter fboPainter;
|
||||||
QOpenGLPaintDevice device(fbo.width(), fbo.height());
|
QOpenGLPaintDevice device(fbo.width(), fbo.height());
|
||||||
@ -552,7 +557,8 @@ void tst_QOpenGL::fboRendering()
|
|||||||
|
|
||||||
fboPainter.end();
|
fboPainter.end();
|
||||||
|
|
||||||
QImage fb = fbo.toImage().convertToFormat(QImage::Format_RGB32);
|
const QImage fb = fbo.toImage().convertToFormat(QImage::Format_RGB32);
|
||||||
|
QCOMPARE(fb.size(), size);
|
||||||
|
|
||||||
qt_opengl_check_test_pattern(fb);
|
qt_opengl_check_test_pattern(fb);
|
||||||
}
|
}
|
||||||
@ -603,9 +609,11 @@ void tst_QOpenGL::openGLPaintDevice()
|
|||||||
QSurfaceFormat format = ctx.format();
|
QSurfaceFormat format = ctx.format();
|
||||||
if (format.majorVersion() < 2)
|
if (format.majorVersion() < 2)
|
||||||
QSKIP("This test requires at least OpenGL 2.0");
|
QSKIP("This test requires at least OpenGL 2.0");
|
||||||
ctx.makeCurrent(surface.data());
|
QVERIFY(ctx.makeCurrent(surface.data()));
|
||||||
|
|
||||||
QImage image(128, 128, QImage::Format_RGB32);
|
const QSize size(128, 128);
|
||||||
|
|
||||||
|
QImage image(size, QImage::Format_RGB32);
|
||||||
QPainter p(&image);
|
QPainter p(&image);
|
||||||
p.fillRect(0, 0, image.width() / 2, image.height() / 2, Qt::red);
|
p.fillRect(0, 0, image.width() / 2, image.height() / 2, Qt::red);
|
||||||
p.fillRect(image.width() / 2, 0, image.width() / 2, image.height() / 2, Qt::green);
|
p.fillRect(image.width() / 2, 0, image.width() / 2, image.height() / 2, Qt::green);
|
||||||
@ -613,32 +621,38 @@ void tst_QOpenGL::openGLPaintDevice()
|
|||||||
p.fillRect(0, image.height() / 2, image.width() / 2, image.height() / 2, Qt::white);
|
p.fillRect(0, image.height() / 2, image.width() / 2, image.height() / 2, Qt::white);
|
||||||
p.end();
|
p.end();
|
||||||
|
|
||||||
QOpenGLFramebufferObject fbo(128, 128);
|
QOpenGLFramebufferObject fbo(size);
|
||||||
fbo.bind();
|
QVERIFY(fbo.bind());
|
||||||
|
|
||||||
QOpenGLPaintDevice device(128, 128);
|
QOpenGLPaintDevice device(size);
|
||||||
p.begin(&device);
|
QVERIFY(p.begin(&device));
|
||||||
p.fillRect(0, 0, image.width() / 2, image.height() / 2, Qt::red);
|
p.fillRect(0, 0, image.width() / 2, image.height() / 2, Qt::red);
|
||||||
p.fillRect(image.width() / 2, 0, image.width() / 2, image.height() / 2, Qt::green);
|
p.fillRect(image.width() / 2, 0, image.width() / 2, image.height() / 2, Qt::green);
|
||||||
p.fillRect(image.width() / 2, image.height() / 2, image.width() / 2, image.height() / 2, Qt::blue);
|
p.fillRect(image.width() / 2, image.height() / 2, image.width() / 2, image.height() / 2, Qt::blue);
|
||||||
p.fillRect(0, image.height() / 2, image.width() / 2, image.height() / 2, Qt::white);
|
p.fillRect(0, image.height() / 2, image.width() / 2, image.height() / 2, Qt::white);
|
||||||
p.end();
|
p.end();
|
||||||
|
|
||||||
QCOMPARE(image, fbo.toImage().convertToFormat(QImage::Format_RGB32));
|
QImage actual = fbo.toImage().convertToFormat(QImage::Format_RGB32);
|
||||||
|
QCOMPARE(image.size(), actual.size());
|
||||||
|
QCOMPARE(image, actual);
|
||||||
|
|
||||||
p.begin(&device);
|
QVERIFY(p.begin(&device));
|
||||||
p.fillRect(0, 0, image.width(), image.height(), Qt::black);
|
p.fillRect(0, 0, image.width(), image.height(), Qt::black);
|
||||||
p.drawImage(0, 0, image);
|
p.drawImage(0, 0, image);
|
||||||
p.end();
|
p.end();
|
||||||
|
|
||||||
QCOMPARE(image, fbo.toImage().convertToFormat(QImage::Format_RGB32));
|
actual = fbo.toImage().convertToFormat(QImage::Format_RGB32);
|
||||||
|
QCOMPARE(image.size(), actual.size());
|
||||||
|
QCOMPARE(image, actual);
|
||||||
|
|
||||||
p.begin(&device);
|
QVERIFY(p.begin(&device));
|
||||||
p.fillRect(0, 0, image.width(), image.height(), Qt::black);
|
p.fillRect(0, 0, image.width(), image.height(), Qt::black);
|
||||||
p.fillRect(0, 0, image.width(), image.height(), QBrush(image));
|
p.fillRect(0, 0, image.width(), image.height(), QBrush(image));
|
||||||
p.end();
|
p.end();
|
||||||
|
|
||||||
QCOMPARE(image, fbo.toImage().convertToFormat(QImage::Format_RGB32));
|
actual = fbo.toImage().convertToFormat(QImage::Format_RGB32);
|
||||||
|
QCOMPARE(image.size(), actual.size());
|
||||||
|
QCOMPARE(image, actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QOpenGL::aboutToBeDestroyed()
|
void tst_QOpenGL::aboutToBeDestroyed()
|
||||||
@ -704,9 +718,11 @@ void tst_QOpenGL::QTBUG15621_triangulatingStrokerDivZero()
|
|||||||
QSKIP("QTBUG-22617");
|
QSKIP("QTBUG-22617");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const QSize size(128, 128);
|
||||||
|
|
||||||
QWindow window;
|
QWindow window;
|
||||||
window.setSurfaceType(QWindow::OpenGLSurface);
|
window.setSurfaceType(QWindow::OpenGLSurface);
|
||||||
window.setGeometry(0, 0, 128, 128);
|
window.setGeometry(QRect(QPoint(0, 0), size));
|
||||||
window.create();
|
window.create();
|
||||||
|
|
||||||
QOpenGLContext ctx;
|
QOpenGLContext ctx;
|
||||||
@ -716,10 +732,10 @@ void tst_QOpenGL::QTBUG15621_triangulatingStrokerDivZero()
|
|||||||
if (!QOpenGLFramebufferObject::hasOpenGLFramebufferObjects())
|
if (!QOpenGLFramebufferObject::hasOpenGLFramebufferObjects())
|
||||||
QSKIP("QOpenGLFramebufferObject not supported on this platform");
|
QSKIP("QOpenGLFramebufferObject not supported on this platform");
|
||||||
|
|
||||||
QOpenGLFramebufferObject fbo(128, 128);
|
QOpenGLFramebufferObject fbo(size);
|
||||||
fbo.bind();
|
QVERIFY(fbo.bind());
|
||||||
|
|
||||||
QOpenGLPaintDevice device(128, 128);
|
QOpenGLPaintDevice device(size);
|
||||||
|
|
||||||
// QTBUG-15621 is only a problem when qreal is double, but do the test anyway.
|
// QTBUG-15621 is only a problem when qreal is double, but do the test anyway.
|
||||||
qreal delta = sizeof(qreal) == sizeof(float) ? 1e-4 : 1e-8;
|
qreal delta = sizeof(qreal) == sizeof(float) ? 1e-4 : 1e-8;
|
||||||
@ -746,10 +762,11 @@ void tst_QOpenGL::QTBUG15621_triangulatingStrokerDivZero()
|
|||||||
QPen pen(Qt::red, 28, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin);
|
QPen pen(Qt::red, 28, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin);
|
||||||
|
|
||||||
QPainter p(&device);
|
QPainter p(&device);
|
||||||
p.fillRect(QRect(0, 0, 128, 128), Qt::blue);
|
p.fillRect(QRect(QPoint(0, 0), size), Qt::blue);
|
||||||
p.strokePath(path, pen);
|
p.strokePath(path, pen);
|
||||||
p.end();
|
p.end();
|
||||||
QImage image = fbo.toImage().convertToFormat(QImage::Format_RGB32);
|
const QImage image = fbo.toImage().convertToFormat(QImage::Format_RGB32);
|
||||||
|
QCOMPARE(image.size(), size);
|
||||||
|
|
||||||
const QRgb red = 0xffff0000;
|
const QRgb red = 0xffff0000;
|
||||||
const QRgb blue = 0xff0000ff;
|
const QRgb blue = 0xff0000ff;
|
||||||
|
Loading…
Reference in New Issue
Block a user