further simplification when to use which rendering method when saving an image

This commit is contained in:
wmayer
2018-01-14 22:19:32 +01:00
parent 575dc0b76d
commit e09a276fe5
2 changed files with 27 additions and 10 deletions

View File

@@ -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<View3DInventorViewer*>(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))

View File

@@ -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();