From 810b154c7a148ceff8832ba329f1bfff7f2cfe34 Mon Sep 17 00:00:00 2001
From: Paul McCarthy <pauld.mccarthy@gmail.com>
Date: Wed, 15 Jul 2015 09:00:22 +0100
Subject: [PATCH] Bugfixes in GLVector - incorrect way of accessing displayCtx
 object in GLVector, and GLRGBVector was not updating image texture on
 interpolation change.

---
 fsl/fslview/gl/glrgbvector.py | 24 ++++++++++++++++++++++++
 fsl/fslview/gl/glvector.py    | 11 ++++-------
 2 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/fsl/fslview/gl/glrgbvector.py b/fsl/fslview/gl/glrgbvector.py
index 47d89ebc5..a30c54751 100644
--- a/fsl/fslview/gl/glrgbvector.py
+++ b/fsl/fslview/gl/glrgbvector.py
@@ -9,6 +9,9 @@ vector images in RGB mode.
 """
 
 import numpy                   as np
+import OpenGL.GL               as gl
+
+
 import fsl.fslview.gl          as fslgl
 import fsl.fslview.gl.glvector as glvector
 
@@ -25,6 +28,27 @@ class GLRGBVector(glvector.GLVector):
         glvector.GLVector.__init__(self, image, display, self.__prefilter)
         fslgl.glrgbvector_funcs.init(self)
 
+        self.displayOpts.addListener('interpolation',
+                                     self.name,
+                                     self.__interpChanged)
+
+
+    def destroy(self):
+        self.displayOpts.removeListener('interpolation', self.name)
+        glvector.GLVector.destroy(self)
+
+        
+    def __interpChanged(self, *a):
+
+        opts = self.displayOpts
+
+        if opts.interpolation == 'none': interp = gl.GL_NEAREST
+        else:                            interp = gl.GL_LINEAR
+
+        self.imageTexture.set(interp=interp)
+        self.updateShaderState()
+        self.onUpdate()
+
 
     def compileShaders(self):
         fslgl.glrgbvector_funcs.compileShaders(self)
diff --git a/fsl/fslview/gl/glvector.py b/fsl/fslview/gl/glvector.py
index 90c4359e0..cdcb16091 100644
--- a/fsl/fslview/gl/glvector.py
+++ b/fsl/fslview/gl/glvector.py
@@ -147,10 +147,10 @@ class GLVector(globject.GLImageObject):
             self.refreshImageTexture()
             self.updateShaderState()
             self.onUpdate()
-
+            
         def imageUpdate(*a):
-            self.imageTexture.set(volume=opts.volume,
-                                  resolution=opts.resolution)
+
+            self.imageTexture.set(resolution=opts.resolution)
             self.updateShaderState()
             self.onUpdate()
 
@@ -166,11 +166,8 @@ class GLVector(globject.GLImageObject):
         opts   .addListener('suppressZ',     name, cmapUpdate,    weak=False)
         opts   .addListener('modulate',      name, modUpdate,     weak=False)
         opts   .addListener('modThreshold',  name, shaderUpdate,  weak=False)
-        opts   .addListener('volume',        name, imageUpdate,   weak=False)
         opts   .addListener('resolution',    name, imageUpdate,   weak=False)
         
-        opts.addSyncChangeListener(
-            'volume',     name, imageRefresh, weak=False)
         opts.addSyncChangeListener(
             'resolution', name, imageRefresh, weak=False)
 
@@ -264,7 +261,7 @@ class GLVector(globject.GLImageObject):
             norm       = False
             
         else:
-            modOpts = self.displayCtx.getOpts(modImage)
+            modOpts = self.displayOpts.displayCtx.getOpts(modImage)
             norm    = True
 
         texName = '{}_{}_{}_modulate'.format(
-- 
GitLab