From 37cea0a4422c080d133ec163a9b86d9c4fa8e20d Mon Sep 17 00:00:00 2001
From: Julien Michel <julien.michel@orfeo-toolbox.org>
Date: Thu, 28 Feb 2013 09:44:32 +0100
Subject: [PATCH] ENH: Speed-up when moving (data is transfered in video memory
 only once)

---
 Code/Common/mvdImageModelRenderer.cxx | 30 ++++++++++++++-------------
 Code/Common/mvdImageModelRenderer.h   |  2 ++
 2 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/Code/Common/mvdImageModelRenderer.cxx b/Code/Common/mvdImageModelRenderer.cxx
index 8670965e55..5d58dc40c5 100644
--- a/Code/Common/mvdImageModelRenderer.cxx
+++ b/Code/Common/mvdImageModelRenderer.cxx
@@ -173,20 +173,23 @@ void ImageModelRenderer::paintGL( const RenderingContext& context )
     // needed cause RGB not RGBA rendering. 
     glPixelStorei(GL_UNPACK_ALIGNMENT,1); 
                                 
-    // texture 
-    glEnable(GL_TEXTURE_2D);
-    GLuint texture;
-    glGenTextures(1, &texture);
-    glBindTexture(GL_TEXTURE_2D, texture);
-    glTexImage2D(GL_TEXTURE_2D, 0, 3,
-                 scaledRegion.GetSize()[0],
-                 scaledRegion.GetSize()[1], 
-                 0, GL_RGB, GL_UNSIGNED_BYTE, m_Buffer);
-    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-    glBindTexture (GL_TEXTURE_2D, texture);
-
+    // Load texture 
+    if(!m_IsMoving)
+      {
+      glDeleteTextures(1,&m_Texture);
+      glGenTextures(1, &m_Texture);
+      glBindTexture(GL_TEXTURE_2D, m_Texture);
+      glTexImage2D(GL_TEXTURE_2D, 0, 3,
+                   scaledRegion.GetSize()[0],
+                   scaledRegion.GetSize()[1], 
+                   0, GL_RGB, GL_UNSIGNED_BYTE, m_Buffer);
+      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+      glBindTexture (GL_TEXTURE_2D, m_Texture);
+      }
+  
     // rectangle where to draw
+    glEnable(GL_TEXTURE_2D);
 
     // Reset color before rendering
     glColor3d(1.0f,1.0f,1.0f);
@@ -199,7 +202,6 @@ void ImageModelRenderer::paintGL( const RenderingContext& context )
     glEnd ();
 
     // free texture
-    glDeleteTextures(1, &texture);
     glDisable(GL_TEXTURE_2D);
 
     // 
diff --git a/Code/Common/mvdImageModelRenderer.h b/Code/Common/mvdImageModelRenderer.h
index c572da57c3..f69729ba3b 100644
--- a/Code/Common/mvdImageModelRenderer.h
+++ b/Code/Common/mvdImageModelRenderer.h
@@ -125,6 +125,8 @@ private:
   PointType                    m_SquarePointUL;
   PointType                    m_SquarePointLR;
 
+  unsigned int                 m_Texture;
+
 //
 // SLOTS.
 private slots:
-- 
GitLab