From 65262f121dd71064b204dd04be856c8411347642 Mon Sep 17 00:00:00 2001
From: Stephane ALBERT <stephane.albert@c-s.fr>
Date: Wed, 27 Apr 2016 15:26:01 +0200
Subject: [PATCH] BUG: MANTIS-1204: Fixed desynchronized gamma between
 image-view and quicklook-view.

---
 Code/Application/Monteverdi/mvdMainWindow.cxx |  9 +++++
 .../Common/Gui/mvdAbstractImageViewRenderer.h | 34 ++++++++++++++++++-
 Code/Common/Gui/mvdImageViewRenderer.cxx      | 16 ++++++---
 3 files changed, 53 insertions(+), 6 deletions(-)

diff --git a/Code/Application/Monteverdi/mvdMainWindow.cxx b/Code/Application/Monteverdi/mvdMainWindow.cxx
index 28f36c91bc..03332abb4a 100644
--- a/Code/Application/Monteverdi/mvdMainWindow.cxx
+++ b/Code/Application/Monteverdi/mvdMainWindow.cxx
@@ -181,6 +181,15 @@ MainWindow
 
   bool isGLSL = m_ImageView->GetRenderer()->CheckGLCapabilities( &m_GLSL140 );
 
+  // MANTIS-1204
+  // {
+  //
+  // Forward GLSL state to quicklook view.
+  assert( GetQuicklookView()!=NULL );
+  assert( GetQuicklookView()->GetRenderer()!=NULL );
+
+  GetQuicklookView()->GetRenderer()->SetGLSLEnabled( isGLSL );
+  // }
 
   assert( m_ShaderWidget!=NULL );
 
diff --git a/Code/Common/Gui/mvdAbstractImageViewRenderer.h b/Code/Common/Gui/mvdAbstractImageViewRenderer.h
index aac347f879..909533b4e2 100644
--- a/Code/Common/Gui/mvdAbstractImageViewRenderer.h
+++ b/Code/Common/Gui/mvdAbstractImageViewRenderer.h
@@ -215,6 +215,12 @@ public:
   /**
    */
   inline bool IsBypassRenderingEnabled() const;
+  /**
+   */
+  inline bool SetGLSLEnabled( bool );
+  /**
+   */
+  inline bool IsGLSLEnabled() const;
   /**
    */
   inline bool ZoomToRegion( const PointType & origin,
@@ -264,7 +270,8 @@ protected:
   AbstractImageViewRenderer( QObject* parent = NULL ) :
     QObject( parent ),
     m_StackedLayerModel( NULL ),
-    m_BypassRenderingEnabled( false )
+    m_BypassRenderingEnabled( false ),
+    m_GLSLEnabled( true )
   {
   }
 
@@ -330,6 +337,9 @@ private:
   /**
    */
   bool m_BypassRenderingEnabled: 1;
+  /**
+   */
+  bool m_GLSLEnabled: 1;
 
   /*-[ PRIVATE SLOTS SECTION ]-----------------------------------------------*/
 
@@ -419,6 +429,28 @@ AbstractImageViewRenderer
   return bypass;
 }
 
+/*****************************************************************************/
+inline
+bool
+AbstractImageViewRenderer
+::IsGLSLEnabled() const
+{
+  return m_GLSLEnabled;
+}
+
+/*****************************************************************************/
+inline
+bool
+AbstractImageViewRenderer
+::SetGLSLEnabled( bool isEnabled )
+{
+  bool wasEnabled = m_GLSLEnabled;
+
+  m_GLSLEnabled = isEnabled;
+
+  return wasEnabled;
+}
+
 /*****************************************************************************/
 inline
 void
diff --git a/Code/Common/Gui/mvdImageViewRenderer.cxx b/Code/Common/Gui/mvdImageViewRenderer.cxx
index 4da26d3569..8dc1be9d05 100644
--- a/Code/Common/Gui/mvdImageViewRenderer.cxx
+++ b/Code/Common/Gui/mvdImageViewRenderer.cxx
@@ -197,15 +197,15 @@ ImageViewRenderer
     );
     }
 
+  //
+  // Set GLSL effects state.
+  SetGLSLEnabled( isOk );
+
   //
   // Return if check has succeeded.
   if( isOk )
     return true;
 
-  //
-  // Disable GLSL effects.
-  m_EffectsEnabled = false;
-
   //
   // Construct message.
   QString message(
@@ -696,6 +696,8 @@ ImageViewRenderer
           imageSettings->SetMaxBlue( settings.GetHighIntensity(RGBW_CHANNEL_BLUE ) );
           }
 
+	// qDebug() << this << " gamma: " << settings.GetGamma();
+
         imageSettings->SetGamma( settings.GetGamma() );
 
         if( properties==NULL )
@@ -722,6 +724,10 @@ ImageViewRenderer
 
 	if( !fragmentShader.IsNull() )
 	  {
+	  // If this point is reached, shader is not null which means
+	  // that isGLSLEnabled() is true.
+	  assert( IsGLSLEnabled() );
+
 	  otb::StandardShader::Pointer shader(
 	    otb::DynamicCast< otb::StandardShader >( fragmentShader )
 	  );
@@ -877,7 +883,7 @@ ImageViewRenderer
 	  //   << "\tQString:" << vectorImageModel->GetFilename()
 	  //   << "\tstd::string" << QFile::encodeName( vectorImageModel->GetFilename() );
 
-	  if( m_EffectsEnabled )
+	  if( IsGLSLEnabled() )
 	    {
 	    // qDebug() << "Created shader for" << FromStdString( it->first );
 
-- 
GitLab