Skip to content
Snippets Groups Projects
Commit a4a4fe92 authored by Paul McCarthy's avatar Paul McCarthy
Browse files

GLVector, Mask and Label types use new GLSLShader feature from last commit.

parent cbad0a76
No related branches found
No related tags found
No related merge requests found
Showing
with 101 additions and 77 deletions
...@@ -85,6 +85,8 @@ def updateShaderState(self): ...@@ -85,6 +85,8 @@ def updateShaderState(self):
self.shader.unload() self.shader.unload()
return True
preDraw = glvolume_funcs.preDraw preDraw = glvolume_funcs.preDraw
draw = glvolume_funcs.draw draw = glvolume_funcs.draw
......
...@@ -136,6 +136,8 @@ def updateShaderState(self): ...@@ -136,6 +136,8 @@ def updateShaderState(self):
self.shader.setVertParam('voxelOffsets', offset) self.shader.setVertParam('voxelOffsets', offset)
self.shader.unload() self.shader.unload()
return True
def preDraw(self): def preDraw(self):
......
...@@ -63,6 +63,8 @@ def updateShaderState(self): ...@@ -63,6 +63,8 @@ def updateShaderState(self):
self.shader.setVertParam('imageShape', shape + [0]) self.shader.setVertParam('imageShape', shape + [0])
self.shader.unload() self.shader.unload()
return True
preDraw = glvolume_funcs.preDraw preDraw = glvolume_funcs.preDraw
draw = glvolume_funcs.draw draw = glvolume_funcs.draw
......
...@@ -114,3 +114,5 @@ def updateFragmentShaderState(self): ...@@ -114,3 +114,5 @@ def updateFragmentShaderState(self):
self.shader.setFragParam('cmapXform', cmapXform) self.shader.setFragParam('cmapXform', cmapXform)
self.shader.unload() self.shader.unload()
return True
...@@ -68,16 +68,20 @@ def updateShaderState(self): ...@@ -68,16 +68,20 @@ def updateShaderState(self):
shader.load() shader.load()
shader.set('outline', opts.outline) changed = False
shader.set('numLabels', opts.lut.max() + 1)
shader.set('imageShape', imageShape) changed |= shader.set('outline', opts.outline)
shader.set('voxValXform', vvx) changed |= shader.set('numLabels', opts.lut.max() + 1)
shader.set('outlineOffsets', outlineOffsets) changed |= shader.set('imageShape', imageShape)
shader.set('imageTexture', 0) changed |= shader.set('voxValXform', vvx)
shader.set('lutTexture', 1) changed |= shader.set('outlineOffsets', outlineOffsets)
changed |= shader.set('imageTexture', 0)
changed |= shader.set('lutTexture', 1)
shader.unload() shader.unload()
return changed
preDraw = glvolume_funcs.preDraw preDraw = glvolume_funcs.preDraw
draw = glvolume_funcs.draw draw = glvolume_funcs.draw
......
...@@ -71,16 +71,15 @@ def updateShaderState(self): ...@@ -71,16 +71,15 @@ def updateShaderState(self):
shader = self.shader shader = self.shader
shader.load() shader.load()
glvector_funcs.updateFragmentShaderState(self) changed = glvector_funcs.updateFragmentShaderState(self)
image = self.vectorImage
opts = self.displayOpts
image = self.vectorImage vvxMat = self.imageTexture.voxValXform
opts = self.displayOpts directed = opts.directed
imageDims = image.pixdim[:3]
vvxMat = self.imageTexture.voxValXform d2vMat = opts.getTransform('display', 'voxel')
directed = opts.directed v2dMat = opts.getTransform('voxel', 'display')
imageDims = image.pixdim[:3]
d2vMat = opts.getTransform('display', 'voxel')
v2dMat = opts.getTransform('voxel', 'display')
# The shader adds these offsets to # The shader adds these offsets to
# transformed voxel coordinates, so # transformed voxel coordinates, so
...@@ -88,16 +87,18 @@ def updateShaderState(self): ...@@ -88,16 +87,18 @@ def updateShaderState(self):
# voxel coordinates # voxel coordinates
offset = [0.5, 0.5, 0.5] offset = [0.5, 0.5, 0.5]
shader.set('vectorTexture', 0) changed |= shader.set('vectorTexture', 0)
shader.set('displayToVoxMat', d2vMat) changed |= shader.set('displayToVoxMat', d2vMat)
shader.set('voxToDisplayMat', v2dMat) changed |= shader.set('voxToDisplayMat', v2dMat)
shader.set('voxValXform', vvxMat) changed |= shader.set('voxValXform', vvxMat)
shader.set('voxelOffset', offset) changed |= shader.set('voxelOffset', offset)
shader.set('imageDims', imageDims) changed |= shader.set('imageDims', imageDims)
shader.set('directed', directed) changed |= shader.set('directed', directed)
shader.unload() shader.unload()
return changed
def preDraw(self): def preDraw(self):
"""Prepares the GL state for drawing. This amounts to loading the """Prepares the GL state for drawing. This amounts to loading the
......
...@@ -60,9 +60,12 @@ def updateShaderState(self): ...@@ -60,9 +60,12 @@ def updateShaderState(self):
useSpline = opts.interpolation == 'spline' useSpline = opts.interpolation == 'spline'
self.shader.load() self.shader.load()
glvector_funcs.updateFragmentShaderState(self, useSpline=useSpline) changed = glvector_funcs.updateFragmentShaderState(self,
useSpline=useSpline)
self.shader.unload() self.shader.unload()
return changed
preDraw = glvolume_funcs.preDraw preDraw = glvolume_funcs.preDraw
draw = glvolume_funcs.draw draw = glvolume_funcs.draw
......
...@@ -137,7 +137,8 @@ def updateShaderState(self): ...@@ -137,7 +137,8 @@ def updateShaderState(self):
opts = self.displayOpts opts = self.displayOpts
shader.load() shader.load()
glvector_funcs.updateFragmentShaderState(self)
changed = glvector_funcs.updateFragmentShaderState(self)
# Texture -> value value offsets/scales # Texture -> value value offsets/scales
# used by the vertex and fragment shaders # used by the vertex and fragment shaders
...@@ -163,24 +164,24 @@ def updateShaderState(self): ...@@ -163,24 +164,24 @@ def updateShaderState(self):
lightPos /= np.sqrt(np.sum(lightPos ** 2)) lightPos /= np.sqrt(np.sum(lightPos ** 2))
# Textures used by the vertex shader # Textures used by the vertex shader
shader.set('v1Texture', 8) changed |= shader.set('v1Texture', 8)
shader.set('v2Texture', 9) changed |= shader.set('v2Texture', 9)
shader.set('v3Texture', 10) changed |= shader.set('v3Texture', 10)
shader.set('l1Texture', 11) changed |= shader.set('l1Texture', 11)
shader.set('l2Texture', 12) changed |= shader.set('l2Texture', 12)
shader.set('l3Texture', 13) changed |= shader.set('l3Texture', 13)
shader.set('v1ValXform', v1ValXform) changed |= shader.set('v1ValXform', v1ValXform)
shader.set('v2ValXform', v2ValXform) changed |= shader.set('v2ValXform', v2ValXform)
shader.set('v3ValXform', v3ValXform) changed |= shader.set('v3ValXform', v3ValXform)
shader.set('l1ValXform', l1ValXform) changed |= shader.set('l1ValXform', l1ValXform)
shader.set('l2ValXform', l2ValXform) changed |= shader.set('l2ValXform', l2ValXform)
shader.set('l3ValXform', l3ValXform) changed |= shader.set('l3ValXform', l3ValXform)
shader.set('imageShape', imageShape) changed |= shader.set('imageShape', imageShape)
shader.set('eigValNorm', eigValNorm) changed |= shader.set('eigValNorm', eigValNorm)
shader.set('lighting', opts.lighting) changed |= shader.set('lighting', opts.lighting)
shader.set('lightPos', lightPos) changed |= shader.set('lightPos', lightPos)
# Vertices of a unit sphere. The vertex # Vertices of a unit sphere. The vertex
# shader will transform these vertices # shader will transform these vertices
...@@ -194,6 +195,8 @@ def updateShaderState(self): ...@@ -194,6 +195,8 @@ def updateShaderState(self):
shader.setIndices(indices) shader.setIndices(indices)
shader.unload() shader.unload()
return changed
def preDraw(self): def preDraw(self):
"""Must be called before :func:`draw`. Loads the shader programs, does """Must be called before :func:`draw`. Loads the shader programs, does
......
...@@ -44,6 +44,8 @@ def updateFragmentShaderState(self, useSpline=False): ...@@ -44,6 +44,8 @@ def updateFragmentShaderState(self, useSpline=False):
"""Updates the state of the fragment shader - it may be either the """Updates the state of the fragment shader - it may be either the
``glvolume`` or the ``glvector`` shader. ``glvolume`` or the ``glvector`` shader.
""" """
changed = False
opts = self.displayOpts opts = self.displayOpts
shader = self.shader shader = self.shader
useVolumeFragShader = opts.colourImage is not None useVolumeFragShader = opts.colourImage is not None
...@@ -74,34 +76,36 @@ def updateFragmentShaderState(self, useSpline=False): ...@@ -74,34 +76,36 @@ def updateFragmentShaderState(self, useSpline=False):
voxValXform, voxValXform,
self.cmapTexture.getCoordinateTransform()) self.cmapTexture.getCoordinateTransform())
shader.set('clipTexture', 2) changed |= shader.set('clipTexture', 2)
shader.set('imageTexture', 3) changed |= shader.set('imageTexture', 3)
shader.set('colourTexture', 7) changed |= shader.set('colourTexture', 7)
shader.set('negColourTexture', 7) changed |= shader.set('negColourTexture', 7)
shader.set('img2CmapXform', img2CmapXform) changed |= shader.set('img2CmapXform', img2CmapXform)
shader.set('imageShape', imageShape) changed |= shader.set('imageShape', imageShape)
shader.set('imageIsClip', False) changed |= shader.set('imageIsClip', False)
shader.set('useNegCmap', False) changed |= shader.set('useNegCmap', False)
shader.set('useSpline', useSpline) changed |= shader.set('useSpline', useSpline)
shader.set('clipLow', clipLow) changed |= shader.set('clipLow', clipLow)
shader.set('clipHigh', clipHigh) changed |= shader.set('clipHigh', clipHigh)
shader.set('texZero', texZero) changed |= shader.set('texZero', texZero)
shader.set('invertClip', False) changed |= shader.set('invertClip', False)
else: else:
voxValXform = self.imageTexture.voxValXform voxValXform = self.imageTexture.voxValXform
cmapXform = self.xColourTexture.getCoordinateTransform() cmapXform = self.xColourTexture.getCoordinateTransform()
shader.set('vectorTexture', 0) changed |= shader.set('vectorTexture', 0)
shader.set('modulateTexture', 1) changed |= shader.set('modulateTexture', 1)
shader.set('clipTexture', 2) changed |= shader.set('clipTexture', 2)
shader.set('xColourTexture', 4) changed |= shader.set('xColourTexture', 4)
shader.set('yColourTexture', 5) changed |= shader.set('yColourTexture', 5)
shader.set('zColourTexture', 6) changed |= shader.set('zColourTexture', 6)
shader.set('voxValXform', voxValXform) changed |= shader.set('voxValXform', voxValXform)
shader.set('cmapXform', cmapXform) changed |= shader.set('cmapXform', cmapXform)
shader.set('imageShape', imageShape) changed |= shader.set('imageShape', imageShape)
shader.set('clipLow', clipLow) changed |= shader.set('clipLow', clipLow)
shader.set('clipHigh', clipHigh) changed |= shader.set('clipHigh', clipHigh)
shader.set('useSpline', useSpline) changed |= shader.set('useSpline', useSpline)
return changed
...@@ -101,8 +101,8 @@ class GLLabel(globject.GLImageObject): ...@@ -101,8 +101,8 @@ class GLLabel(globject.GLImageObject):
def shaderUpdate(*a): def shaderUpdate(*a):
if self.ready(): if self.ready():
fslgl.gllabel_funcs.updateShaderState(self) if fslgl.gllabel_funcs.updateShaderState(self):
self.notify() self.notify()
def shaderCompile(*a): def shaderCompile(*a):
fslgl.gllabel_funcs.compileShaders(self) fslgl.gllabel_funcs.compileShaders(self)
......
...@@ -122,7 +122,7 @@ class GLLineVector(glvector.GLVector): ...@@ -122,7 +122,7 @@ class GLLineVector(glvector.GLVector):
"""Overrides :meth:`.GLVector.updateShaderState`. Calls the OpenGL """Overrides :meth:`.GLVector.updateShaderState`. Calls the OpenGL
version-specific ``updateShaderState`` function. version-specific ``updateShaderState`` function.
""" """
fslgl.gllinevector_funcs.updateShaderState(self) return fslgl.gllinevector_funcs.updateShaderState(self)
def preDraw(self): def preDraw(self):
......
...@@ -53,8 +53,8 @@ class GLMask(glvolume.GLVolume): ...@@ -53,8 +53,8 @@ class GLMask(glvolume.GLVolume):
def shaderUpdate(*a): def shaderUpdate(*a):
if self.ready(): if self.ready():
fslgl.glvolume_funcs.updateShaderState(self) if fslgl.glvolume_funcs.updateShaderState(self):
self.notify() self.notify()
def shaderCompile(*a): def shaderCompile(*a):
fslgl.glvolume_funcs.compileShaders(self) fslgl.glvolume_funcs.compileShaders(self)
......
...@@ -147,7 +147,7 @@ class GLRGBVector(glvector.GLVector): ...@@ -147,7 +147,7 @@ class GLRGBVector(glvector.GLVector):
"""Overrides :meth:`.GLVector.compileShaders`. Calls the OpenGL """Overrides :meth:`.GLVector.compileShaders`. Calls the OpenGL
version-specific ``updateShaderState`` function. version-specific ``updateShaderState`` function.
""" """
fslgl.glrgbvector_funcs.updateShaderState(self) return fslgl.glrgbvector_funcs.updateShaderState(self)
def preDraw(self): def preDraw(self):
......
...@@ -112,7 +112,7 @@ class GLTensor(glvector.GLVector): ...@@ -112,7 +112,7 @@ class GLTensor(glvector.GLVector):
"""Overrides :meth:`.GLVector.updateShaderState`. Calls the """Overrides :meth:`.GLVector.updateShaderState`. Calls the
:func:`.gl21.gltensor_funcs.updateShaderState` function. :func:`.gl21.gltensor_funcs.updateShaderState` function.
""" """
fslgl.gltensor_funcs.updateShaderState(self) return fslgl.gltensor_funcs.updateShaderState(self)
def preDraw(self): def preDraw(self):
......
...@@ -255,8 +255,8 @@ class GLVector(globject.GLImageObject): ...@@ -255,8 +255,8 @@ class GLVector(globject.GLImageObject):
def shaderUpdate(*a): def shaderUpdate(*a):
if self.ready(): if self.ready():
self.updateShaderState() if self.updateShaderState():
self.notify() self.notify()
def modUpdate( *a): def modUpdate( *a):
self.deregisterAuxImage('modulate') self.deregisterAuxImage('modulate')
...@@ -410,7 +410,8 @@ class GLVector(globject.GLImageObject): ...@@ -410,7 +410,8 @@ class GLVector(globject.GLImageObject):
def updateShaderState(self): def updateShaderState(self):
"""This method must be provided by subclasses (the """This method must be provided by subclasses (the
:class:`.GLRGBVector` and :class:`.GLLineVector` classes), and must :class:`.GLRGBVector` and :class:`.GLLineVector` classes), and must
update the state of the vertex/fragment shader programs. update the state of the vertex/fragment shader programs. It must return
``True`` if the shader state was updated, ``False`` otherwise.
""" """
raise NotImplementedError('updateShaderState must be implemented by ' raise NotImplementedError('updateShaderState must be implemented by '
'{} subclasses'.format(type(self).__name__)) '{} subclasses'.format(type(self).__name__))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment