diff --git a/src/Gui/View3DInventorViewer.cpp b/src/Gui/View3DInventorViewer.cpp index 66f6fc8800..a1fee6459c 100644 --- a/src/Gui/View3DInventorViewer.cpp +++ b/src/Gui/View3DInventorViewer.cpp @@ -927,10 +927,32 @@ void View3DInventorViewer::setSceneGraph(SoNode* root) void View3DInventorViewer::savePicture(int w, int h, int s, const QColor& bg, QImage& img) const { + // Save picture methods: + // FramebufferObject -- viewer renders into FBO (no offscreen) + // CoinOffscreenRenderer -- Coin's offscreen rendering method + // PixelBuffer -- Qt's pixel buffer used for offscreen rendering (only Qt4) + // Otherwise (Default) -- Qt's FBO used for offscreen rendering + std::string saveMethod = App::GetApplication().GetParameterGroupByPath + ("User parameter:BaseApp/Preferences/View")->GetASCII("SavePicture"); + + bool useFramebufferObject = false; + bool usePixelBuffer = false; bool useCoinOffscreenRenderer = false; - useCoinOffscreenRenderer = App::GetApplication().GetParameterGroupByPath - ("User parameter:BaseApp/Preferences/Document")-> - GetBool("CoinOffscreenRenderer", useCoinOffscreenRenderer); + if (saveMethod == "FramebufferObject") { + useFramebufferObject = true; + } + else if (saveMethod == "PixelBuffer") { + usePixelBuffer = true; + } + else if (saveMethod == "CoinOffscreenRenderer") { + useCoinOffscreenRenderer = true; + } + + if (useFramebufferObject) { + View3DInventorViewer* self = const_cast(this); + self->imageFromFramebuffer(w, h, s, bg, img); + return; + } // if no valid color use the current background bool useBackground = false; @@ -1008,6 +1030,7 @@ void View3DInventorViewer::savePicture(int w, int h, int s, const QColor& bg, QI if (!useCoinOffscreenRenderer) { SoQtOffscreenRenderer renderer(vp); renderer.setNumPasses(s); + renderer.setPbufferEnable(usePixelBuffer); if (bgColor.isValid()) renderer.setBackgroundColor(SbColor4f(bgColor.redF(), bgColor.greenF(), bgColor.blueF(), bgColor.alphaF())); if (!renderer.render(root)) diff --git a/src/Gui/View3DPy.cpp b/src/Gui/View3DPy.cpp index 9a053b99a8..e2b8cf3872 100644 --- a/src/Gui/View3DPy.cpp +++ b/src/Gui/View3DPy.cpp @@ -719,13 +719,7 @@ Py::Object View3DInventorPy::saveImage(const Py::Tuple& args) bg.setNamedColor(colname); QImage img; - if (App::GetApplication().GetParameterGroupByPath - ("User parameter:BaseApp/Preferences/Document")->GetBool("DisablePBuffers", false)) { - _view->getViewer()->imageFromFramebuffer(w, h, 8, bg, img); - } - else { - _view->getViewer()->savePicture(w, h, 8, bg, img); - } + _view->getViewer()->savePicture(w, h, 8, bg, img); SoFCOffscreenRenderer& renderer = SoFCOffscreenRenderer::instance(); SoCamera* cam = _view->getViewer()->getSoRenderManager()->getCamera();