From 8ef10316d89933e32aa8c47bdbe095c11e79dba8 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 3 May 2013 10:07:53 +0200 Subject: [PATCH] Make sure grabbed buffer is GL_FRONT p4#: 21534 --- .../Application/RiaApplication.cpp | 35 +++++++++++++++---- ApplicationCode/Application/RiaApplication.h | 2 +- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/ApplicationCode/Application/RiaApplication.cpp b/ApplicationCode/Application/RiaApplication.cpp index a732d11793..38a4752df0 100644 --- a/ApplicationCode/Application/RiaApplication.cpp +++ b/ApplicationCode/Application/RiaApplication.cpp @@ -1164,9 +1164,9 @@ void RiaApplication::saveSnapshotPromtpForFilename() //-------------------------------------------------------------------------------------------------- void RiaApplication::saveSnapshotAs(const QString& fileName) { - if (m_activeReservoirView && m_activeReservoirView->viewer()) + QImage image = grabFrameBufferImage(); + if (!image.isNull()) { - QImage image = m_activeReservoirView->viewer()->grabFrameBuffer(); if (image.save(fileName)) { qDebug() << "Saved snapshot image to " << fileName; @@ -1183,12 +1183,11 @@ void RiaApplication::saveSnapshotAs(const QString& fileName) //-------------------------------------------------------------------------------------------------- void RiaApplication::copySnapshotToClipboard() { - if (m_activeReservoirView && m_activeReservoirView->viewer()) + QClipboard* clipboard = QApplication::clipboard(); + if (clipboard) { - QImage image = m_activeReservoirView->viewer()->grabFrameBuffer(); - - QClipboard* clipboard = QApplication::clipboard(); - if (clipboard) + QImage image = grabFrameBufferImage(); + if (!image.isNull()) { clipboard->setImage(image); } @@ -1479,3 +1478,25 @@ cvf::Font* RiaApplication::standardFont() return m_standardFont.p(); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QImage RiaApplication::grabFrameBufferImage() +{ + QImage image; + if (m_activeReservoirView && m_activeReservoirView->viewer()) + { + m_activeReservoirView->viewer()->repaint(); + + GLint currentReadBuffer; + glGetIntegerv(GL_READ_BUFFER, ¤tReadBuffer); + + glReadBuffer(GL_FRONT); + image = m_activeReservoirView->viewer()->grabFrameBuffer(); + + glReadBuffer(currentReadBuffer); + } + + return image; +} diff --git a/ApplicationCode/Application/RiaApplication.h b/ApplicationCode/Application/RiaApplication.h index 48087fddd3..51c7a05a8a 100644 --- a/ApplicationCode/Application/RiaApplication.h +++ b/ApplicationCode/Application/RiaApplication.h @@ -127,7 +127,7 @@ private: void onProjectOpenedOrClosed(); void setWindowCaptionFromAppState(); - + QImage grabFrameBufferImage(); private slots: void slotWorkerProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);