diff --git a/fsl/fsleyes/gl/gl21/gltensor_funcs.py b/fsl/fsleyes/gl/gl21/gltensor_funcs.py index 33419e57fabf84104af5c75a0078dc4624a76e8d..c999c31e88377d0f27d7b150c5a30df0b8c99961 100644 --- a/fsl/fsleyes/gl/gl21/gltensor_funcs.py +++ b/fsl/fsleyes/gl/gl21/gltensor_funcs.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# gltensor_funcs.py - +# gltensor_funcs.py - OpenGL2.1 functions used by the GLTensor class. # # Author: Paul McCarthy <pauldmccarthy@gmail.com> # @@ -26,6 +26,9 @@ log = logging.getLogger(__name__) def init(self): + """Compiles and configures the vertex and fragment shader programs, and + creates textures and vertex buffers. + """ image = self.image diff --git a/fsl/fsleyes/gl/gltensor.py b/fsl/fsleyes/gl/gltensor.py index ee76085e95c539746750a5b4564715d3232e1801..5df0291ac64611f678400f52520603572886c829 100644 --- a/fsl/fsleyes/gl/gltensor.py +++ b/fsl/fsleyes/gl/gltensor.py @@ -1,12 +1,15 @@ #!/usr/bin/env python # -# gltensor.py - +# gltensor.py - The GLTensor class. # # Author: Paul McCarthy <pauldmccarthy@gmail.com> # +"""This module provides the :class:`GLTensor` class, for displaying tensor +ellipsoids in a :class:`.TensorImage` overlay. +See :mod:`.gl21.gltensor_funcs`. +""" -import logging import numpy as np @@ -14,10 +17,11 @@ import glvector import fsl.fsleyes.gl as fslgl -log = logging.getLogger(__name__) - class GLTensor(glvector.GLVector): + """The ``GLTensor`` class encapsulates the logic required to render + :class:`.TensorImage` overlays. + """ def __init__(self, image, display): @@ -30,13 +34,48 @@ class GLTensor(glvector.GLVector): def destroy(self): + """Must be called when this ``GLTensor`` is no longer needed. Performs + cleanup tasks. + """ glvector.GLVector.destroy(self) fslgl.gltensor_funcs.destroy(self) + + def addListeners(self): + """Overrides :meth:`.GLVector.addListeners`. Calls the base class + implementation, and adds some property listeners to the + :class:`.TensorOpts` instance associated with the + :class:`.TensorImage` being displayed. + """ + glvector.GLVector.addListeners(self) + + name = self.name + opts = self.displayOpts + + def shaderUpdate(*a): + self.updateShaderState() + self.onUpdate() + + opts.addListener('lighting', name, shaderUpdate, weak=False) + opts.addListener('tensorResolution', name, shaderUpdate, weak=False) + + + def removeListeners(self): + """Overrides :meth:`.GLVector.removeListeners`. Calls the base class + implementation, and removes some property listeners. + """ + glvector.GLVector.removeListeners(self) + + name = self.name + opts = self.displayOpts + + opts.removeListener('lighting', name) + opts.removeListener('tensorResolution', name) + def getDataResolution(self, xax, yax): """Overrides :meth:`.GLVector.getDataResolution`. Returns a pixel - resolution suitable for rendering this ``GLTensor``. + resolution suitable for off-screen rendering of this ``GLTensor``. """ res = list(glvector.GLVector.getDataResolution(self, xax, yax)) @@ -47,22 +86,32 @@ class GLTensor(glvector.GLVector): def compileShaders(self): + """Overrides :meth:`.GLVector.compileShaders`. + """ fslgl.gltensor_funcs.compileShaders(self) def updateShaderState(self): + """Overrides :meth:`.GLVector.updateShaderState`. + """ fslgl.gltensor_funcs.updateShaderState(self) def preDraw(self): + """Overrides :meth:`.GLVector.preDraw`. + """ glvector.GLVector.preDraw(self) fslgl.gltensor_funcs.preDraw(self) def draw(self, zpos, xform=None): + """ + """ fslgl.gltensor_funcs.draw(self, zpos, xform) def postDraw(self): + """Overrides :meth:`.GLVector.postDraw`. + """ glvector.GLVector.postDraw(self) fslgl.gltensor_funcs.postDraw(self)