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)
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
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
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()
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)
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
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)
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)
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