code reduction w.r.t offscreen rendering

This commit is contained in:
wmayer
2018-01-07 17:12:50 +01:00
parent 292608e466
commit a9b1356bc7
9 changed files with 67 additions and 199 deletions

View File

@@ -476,60 +476,6 @@ void View3DInventor::printPreview()
void View3DInventor::print(QPrinter* printer)
{
// The SVG output needs to be improved
#if 0
SoFCVectorizeSVGAction action;
SoSVGVectorOutput* out = action.getSVGOutput();
std::string tmp = Base::FileInfo::getTempFileName();
if (!out || !out->openFile(tmp.c_str()))
return;
SoVectorizeAction::PageSize ps;
switch (printer->pageSize()) {
case QPrinter::A0:
ps = SoVectorizeAction::A0;
break;
case QPrinter::A1:
ps = SoVectorizeAction::A1;
break;
case QPrinter::A2:
ps = SoVectorizeAction::A2;
break;
case QPrinter::A3:
ps = SoVectorizeAction::A3;
break;
case QPrinter::A4:
ps = SoVectorizeAction::A4;
break;
case QPrinter::A5:
ps = SoVectorizeAction::A5;
break;
case QPrinter::A6:
ps = SoVectorizeAction::A6;
break;
case QPrinter::A7:
ps = SoVectorizeAction::A7;
break;
case QPrinter::A8:
ps = SoVectorizeAction::A8;
break;
case QPrinter::A9:
ps = SoVectorizeAction::A9;
break;
default:
ps = SoVectorizeAction::A4;
break;
}
QColor c = Qt::white;
_viewer->saveGraphic(ps,c,&action);
out->closeFile();
QSvgRenderer svg;
if (svg.load(QString::fromUtf8(tmp.c_str()))) {
QPainter p(printer);
svg.render(&p);
p.end();
}
#else
QImage img;
QPainter p(printer);
p.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing);
if (!p.isActive() && !printer->outputFileName().isEmpty()) {
@@ -539,56 +485,12 @@ void View3DInventor::print(QPrinter* printer)
qApp->restoreOverrideCursor();
return;
}
QRect rect = printer->pageRect();
#if !defined(HAVE_QT5_OPENGL)
bool pbuffer = QGLPixelBuffer::hasOpenGLPbuffers();
#else
bool pbuffer = false;
#endif
if (App::GetApplication().GetParameterGroupByPath
("User parameter:BaseApp/Preferences/Document")->GetBool("DisablePBuffers",!pbuffer)) {
previewFromFramebuffer(rect, img);
}
else {
try {
_viewer->savePicture(rect.width(), rect.height(), QColor(Qt::white), img);
}
catch (...) {
previewFromFramebuffer(rect, img);
}
}
QImage img;
_viewer->imageFromFramebuffer(rect.width(), rect.height(), 8, QColor(255,255,255), img);
p.drawImage(0,0,img);
p.end();
#endif
}
void View3DInventor::previewFromFramebuffer(const QRect& rect, QImage& img)
{
static_cast<QtGLWidget*>(_viewer->getGLWidget())->makeCurrent();
#if QT_VERSION >= 0x040600
QtGLFramebufferObjectFormat format;
format.setSamples(8);
format.setAttachment(QtGLFramebufferObject::Depth);
#if defined(HAVE_QT5_OPENGL)
format.setInternalTextureFormat(GL_RGB32F_ARB);
#else
format.setInternalTextureFormat(GL_RGB);
#endif
QtGLFramebufferObject fbo(rect.width(), rect.height(), format);
#else
QtGLFramebufferObject fbo(rect.width(), rect.height(), QtGLFramebufferObject::Depth);
#endif
const QColor col = _viewer->backgroundColor();
bool on = _viewer->hasGradientBackground();
_viewer->setBackgroundColor(QColor(255,255,255));
_viewer->setGradientBackground(false);
_viewer->renderToFramebuffer(&fbo);
_viewer->setBackgroundColor(col);
_viewer->setGradientBackground(on);
img = fbo.toImage();
}
// **********************************************************************************