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

Some little changes and bugfixes.

 - RenderTexture unbinds itself on frame buffer configuration fail,
   before raising an error.
 - RenderTexture was potentially doing integer division on texture
   size ratio calculation
 - GL21 LineVector software draw could possibly be called before
   line vertices had been created.
 - Line/RGB vector command line args were not enabled
 - RGBVector was not initialising texture interpolation correctly
parent a7226a87
No related branches found
No related tags found
No related merge requests found
......@@ -13,10 +13,10 @@ import wx
import pwidgets.elistbox as elistbox
import fsl.data.atlases as atlases
import fsl.data.strings as strings
import fsl.utils.messagedlg as msgdlg
import fsl.fslview.panel as fslpanel
import fsl.data.atlases as atlases
import fsl.data.strings as strings
import fsl.utils.dialog as dialog
import fsl.fslview.panel as fslpanel
log = logging.getLogger(__name__)
......@@ -210,7 +210,7 @@ class AtlasOverlayPanel(fslpanel.FSLViewPanel):
self.__updateAtlasState(atlasIdx)
msgdlg.ProcessingDialog(
dialog.ProcessingDialog(
self,
strings.messages[self, 'loadRegions'].format(atlasDesc.name),
buildRegionList).Run()
......
......@@ -23,11 +23,15 @@ log = logging.getLogger(__name__)
def init(self):
self.shaders = None
self.vertexBuffer = gl.glGenBuffers(1)
self.texCoordBuffer = gl.glGenBuffers(1)
self.vertexIDBuffer = gl.glGenBuffers(1)
self.lineVertices = None
self.shaders = None
self.vertexBuffer = gl.glGenBuffers(1)
self.texCoordBuffer = gl.glGenBuffers(1)
self.vertexIDBuffer = gl.glGenBuffers(1)
self.lineVertices = None
# False -> hardware shaders are in use
# True -> software shaders are in use
self.swShadersInUse = False
self._vertexResourceName = '{}_{}_vertices'.format(
type(self).__name__, id(self.image))
......@@ -40,7 +44,6 @@ def init(self):
self.updateShaderState()
self.onUpdate()
name = '{}_vertices'.format(self.name)
opts.addListener('transform', name, vertexUpdate, weak=False)
......@@ -78,6 +81,8 @@ def compileShaders(self):
self.shaders = shaders.compileShaders(vertShaderSrc, fragShaderSrc)
self.swShadersInUse = self.display.softwareMode
self.vertexPos = gl.glGetAttribLocation( self.shaders,
'vertex')
self.vertexIDPos = gl.glGetAttribLocation( self.shaders,
......@@ -211,6 +216,11 @@ def draw(self, zpos, xform=None):
def softwareDraw(self, zpos, xform=None):
# Software shaders have not yet been compiled -
# we can't draw until they're updated
if not self.swShadersInUse:
return
opts = self.displayOpts
vertices, texCoords = self.lineVertices.getVertices(self, zpos)
......@@ -254,6 +264,9 @@ def softwareDraw(self, zpos, xform=None):
def hardwareDraw(self, zpos, xform=None):
if self.swShadersInUse:
return
image = self.image
opts = self.displayOpts
v2dMat = opts.getTransform('voxel', 'display')
......
......@@ -37,15 +37,23 @@ class GLRGBVector(glvector.GLVector):
self.displayOpts.removeListener('interpolation', self.name)
glvector.GLVector.destroy(self)
def __interpChanged(self, *a):
def refreshImageTexture(self):
glvector.GLVector.refreshImageTexture(self)
self.__setInterp()
def __setInterp(self):
opts = self.displayOpts
if opts.interpolation == 'none': interp = gl.GL_NEAREST
else: interp = gl.GL_LINEAR
else: interp = gl.GL_LINEAR
self.imageTexture.set(interp=interp)
def __interpChanged(self, *a):
self.__setInterp()
self.updateShaderState()
self.onUpdate()
......
......@@ -187,6 +187,8 @@ class RenderTexture(texture.Texture2D):
if glfbo.glCheckFramebufferStatusEXT(glfbo.GL_FRAMEBUFFER_EXT) != \
glfbo.GL_FRAMEBUFFER_COMPLETE_EXT:
self.unbindAsRenderTarget()
self.unbindTexture()
raise RuntimeError('An error has occurred while '
'configuring the frame buffer')
......@@ -248,8 +250,8 @@ class GLObjectRenderTexture(RenderTexture):
if width > maxRes or height > maxRes:
oldWidth, oldHeight = width, height
ratio = min(width, height) / max(width, height)
ratio = min(width, height) / float(max(width, height))
if width > height:
width = maxRes
height = width * ratio
......
......@@ -515,13 +515,15 @@ def _configOverlayParser(ovlParser):
configure the display of a single overlay.
"""
Display = fsldisplay.Display
ImageOpts = fsldisplay.ImageOpts
VolumeOpts = fsldisplay.VolumeOpts
VectorOpts = fsldisplay.VectorOpts
MaskOpts = fsldisplay.MaskOpts
ModelOpts = fsldisplay.ModelOpts
LabelOpts = fsldisplay.LabelOpts
Display = fsldisplay.Display
ImageOpts = fsldisplay.ImageOpts
VolumeOpts = fsldisplay.VolumeOpts
VectorOpts = fsldisplay.VectorOpts
RGBVectorOpts = fsldisplay.RGBVectorOpts
LineVectorOpts = fsldisplay.LineVectorOpts
MaskOpts = fsldisplay.MaskOpts
ModelOpts = fsldisplay.ModelOpts
LabelOpts = fsldisplay.LabelOpts
dispDesc = 'Each display option will be applied to the '\
'overlay which is listed before that option.'
......@@ -531,17 +533,21 @@ def _configOverlayParser(ovlParser):
imgParser = ovlParser.add_argument_group(GROUPNAMES[ImageOpts])
volParser = ovlParser.add_argument_group(GROUPNAMES[VolumeOpts])
vecParser = ovlParser.add_argument_group(GROUPNAMES[VectorOpts])
lvParser = ovlParser.add_argument_group(GROUPNAMES[LineVectorOpts])
rvParser = ovlParser.add_argument_group(GROUPNAMES[RGBVectorOpts])
maskParser = ovlParser.add_argument_group(GROUPNAMES[MaskOpts])
modelParser = ovlParser.add_argument_group(GROUPNAMES[ModelOpts])
labelParser = ovlParser.add_argument_group(GROUPNAMES[LabelOpts])
targets = [(Display, dispParser),
(ImageOpts, imgParser),
(VolumeOpts, volParser),
(VectorOpts, vecParser),
(MaskOpts, maskParser),
(ModelOpts, modelParser),
(LabelOpts, labelParser)]
targets = [(Display, dispParser),
(ImageOpts, imgParser),
(VolumeOpts, volParser),
(VectorOpts, vecParser),
(LineVectorOpts, lvParser),
(RGBVectorOpts, rvParser),
(MaskOpts, maskParser),
(ModelOpts, modelParser),
(LabelOpts, labelParser)]
for target, parser in targets:
......
......@@ -29,7 +29,7 @@ class SimpleMessageDialog(wx.Dialog):
proportion=1,
flag=wx.CENTRE | wx.ALL)
self.SetBackgroundColour((250, 250, 225))
self.SetBackgroundColour((225, 225, 200))
self.SetSizer(self.__sizer)
self.SetMessage(message)
......
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