void Ut_MGLE2Renderer::testDrawing() { #ifdef M_USE_OPENGL QGLWidget glw; glw.resize(67,67); glw.makeCurrent(); MGLES2Renderer::activate(&glw); MGLES2Renderer* r = MGLES2Renderer::instance(); QPixmap pm(32,32); pm.fill(Qt::red); //draw with default shader r->setViewportSize(glw.size()); r->begin(NULL); r->bindTexture(pm); r->draw(QRect(1,1,32,32)); r->draw(34,1); r->draw(1,34,32,32); r->setInvertTexture(true); r->draw(QRect(34,34,32,32), QRect(4,4,24,24)); r->end(); //draw with custom shader r->begin(NULL, r->getShaderProgram(qApp->applicationDirPath() + "/shader1.frag", qApp->applicationDirPath() + "/shader1.vert")); r->bindTexture(pm); r->draw(17,17,33,33); r->end(); //compare resulted image with reference image QImage image1 = glw.grabFrameBuffer(); //image1.save("glw1.png", "PNG"); QImage image2(qApp->applicationDirPath() + "/glw1.png", "PNG"); QVERIFY(image1 == image2); //draw patches glw.resize(64,64); QList<QRect> targets; targets.append(QRect(0,0,32,32)); targets.append(QRect(32,0,32,32)); targets.append(QRect(0,32,32,32)); targets.append(QRect(32,32,32,32)); QList<QRect> sources; sources.append(QRect(17,17,16,16)); sources.append(QRect(32,17,16,16)); sources.append(QRect(17,32,16,16)); sources.append(QRect(32,32,16,16)); pm.convertFromImage(image2); r->begin(NULL); r->bindTexture(pm); r->draw(targets, sources); r->end(); //compare resulted image with reference image image1 = glw.grabFrameBuffer(); //image1.save("glw2.png", "PNG"); image2.load(qApp->applicationDirPath() + "/glw2.png", "PNG"); QVERIFY(image1 == image2); #endif }
void IKRRTWindow::saveScreenshot() { static int counter = 0; SbString framefile; framefile.sprintf("renderFrame_%06d.png", counter); counter++; redraw(); viewer->getSceneManager()->render(); viewer->getSceneManager()->scheduleRedraw(); QGLWidget* w = (QGLWidget*)viewer->getGLWidget(); QImage i = w->grabFrameBuffer(); bool bRes = i.save(framefile.getString(), "BMP"); if (bRes) { cout << "wrote image " << counter << endl; } else { cout << "failed writing image " << counter << endl; } }