Example #1
0
    def refreshImageTexture(self):
        """Makes sure that the :class:`.ImageTexture`, used to store the
        :class:`.Image` data, is up to date.
        """

        opts = self.opts
        texName = '{}_{}'.format(type(self).__name__, id(self.image))
        unsynced = (opts.getParent() is None
                    or not opts.isSyncedToParent('volume'))

        if unsynced:
            texName = '{}_unsync_{}'.format(texName, id(opts))

        if self.imageTexture is not None:
            if self.imageTexture.name == texName:
                return

            self.imageTexture.deregister(self.name)
            glresources.delete(self.imageTexture.name)

        if opts.interpolation == 'none': interp = gl.GL_NEAREST
        else: interp = gl.GL_LINEAR

        self.imageTexture = glresources.get(texName,
                                            textures.ImageTexture,
                                            texName,
                                            self.image,
                                            interp=interp,
                                            volume=opts.index()[3:],
                                            notify=False)

        self.imageTexture.register(self.name, self.__imageTextureChanged)
Example #2
0
 def destroy(self):
     """Must be called when this ``GLRGBVolume`` is no longer needed. """
     self.removeListeners()
     fslgl.glvolume_funcs.destroy(self)
     glresources.delete(self.imageTexture.name)
     glimageobject.GLImageObject.destroy(self)
     self.imageTexture = None
Example #3
0
 def destroy(self):
     """Must be called when this ``VoxelSelection`` is no longer needed.
     Destroys the :class:`.SelectionTexture`.
     """
     glresources.delete(self.__texture.name)
     self.__texture = None
     self.__opts    = None
Example #4
0
    def _updateRenderTextures(self):
        """Overrides :meth:`.SliceCanvas._updateRenderTextures`.
        Destroys/creates :class:`.RenderTexture` and
        :class:`.RenderTextureStack` instances as needed.
        """

        renderMode = self.opts.renderMode

        if renderMode == 'onscreen':
            return

        # The LightBoxCanvas does offscreen rendering
        # a bit different to the SliceCanvas. The latter
        # uses a separate render texture for each overlay
        # whereas here we're going to use a single
        # render texture for all overlays.
        elif renderMode == 'offscreen':
            if self._offscreenRenderTexture is not None:
                self._offscreenRenderTexture.destroy()

            self._offscreenRenderTexture = textures.RenderTexture(
                '{}_{}'.format(type(self).__name__, id(self)),
                interp=gl.GL_LINEAR)

            self._offscreenRenderTexture.shape = 768, 768

        # The LightBoxCanvas handles pre-render mode
        # the same way as the SliceCanvas - a separate
        # RenderTextureStack for eacn globject
        elif renderMode == 'prerender':

            # Delete any RenderTextureStack instances for
            # overlays which have been removed from the list
            for overlay, (tex, name) in list(self._prerenderTextures.items()):
                if overlay not in self.overlayList:
                    self._prerenderTextures.pop(overlay)
                    glresources.delete(name)

            # Create a RendeTextureStack for overlays
            # which have been added to the list
            for overlay in self.overlayList:
                if overlay in self._prerenderTextures:
                    continue

                globj = self._glObjects.get(overlay, None)

                if (globj is None) or (not globj):
                    continue

                rt, name = self._getPreRenderTexture(globj, overlay)
                self._prerenderTextures[overlay] = rt, name

        self.Refresh()
Example #5
0
    def destroy(self):
        """Must be called when this ``GLMask`` is no longer needed. Destroys
        the :class:`.ImageTexture`.
        """
        self.edgeFilter.destroy()
        self.renderTexture.destroy()
        self.imageTexture.deregister(self.name)
        glresources.delete(self.imageTexture.name)

        self.removeDisplayListeners()
        fslgl.glmask_funcs.destroy(self)
        glimageobject.GLImageObject.destroy(self)
Example #6
0
    def destroy(self):
        """Clears up resources used by the ``GLMIP``. """

        self.cmapTexture.destroy()

        self.removeDisplayListeners()
        self.imageTexture.deregister(self.name)
        glresources.delete(self.imageTexture.name)

        fslgl.glmip_funcs.destroy(self)
        glimageobject.GLImageObject.destroy(self)

        self.shader = None
        self.cmapTexture = None
        self.imageTexture = None
Example #7
0
    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)

        names = ['v1', 'v2', 'v3', 'l1', 'l2', 'l3']

        for name in names:
            attrName = '{}Texture'.format(name)
            tex = getattr(self, attrName)

            glresources.delete(tex.getTextureName())
            setattr(self, attrName, None)
Example #8
0
def destroy(self):
    """Destroys the vertex/fragment shader programs and the
    ``GLLineVertices`` instance, and removes property listeners from the
    :class:`.LineVectorOpts` instance.
    """

    glvector_funcs.destroy(self)

    name = '{}_vertices'.format(self.name)

    self.opts.removeListener('transform', name)
    self.opts.removeListener('directed', name)
    self.opts.removeListener('unitLength', name)
    self.opts.removeListener('lengthScale', name)
    self.opts.removeListener('orientFlip', name)

    glresources.delete(self._vertexResourceName)
Example #9
0
 def __destroyAuxTexture(self, which):
     """Destroys the :class:`.ImageTexture` for type ``which``. """
     tex = self.__auxtextures[which]
     if tex is not None:
         glresources.delete(tex.name)
     self.__auxtextures[which] = None