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

SliceCanvas/LightBoxCanvas were mis-managing render textures - not

restoring viewport properly.
parent 4ff3769a
No related branches found
No related tags found
No related merge requests found
......@@ -6,6 +6,7 @@
#
import copy
import logging
import props
......@@ -15,6 +16,9 @@ import fsl.fslview.gl.colourbarcanvas as colourbarcanvas
import fsl.data.strings as strings
log = logging.getLogger(__name__)
class SceneOpts(props.HasProperties):
"""The ``SceneOpts`` class defines settings which are applied to
:class:`.CanvasPanel` views.
......@@ -127,3 +131,11 @@ class SceneOpts(props.HasProperties):
self.renderMode = 'prerender'
self.softwareMode = True
self.resolutionLimit = 1
log.debug('Performance settings changed: '
'renderMode={}, '
'softwareMode={}, '
'resolutionLimit={}'.format(
self.renderMode,
self.softwareMode,
self.resolutionLimit))
......@@ -759,6 +759,7 @@ class LightBoxCanvas(slicecanvas.SliceCanvas):
if self.renderMode == 'offscreen':
rt.unbindAsRenderTarget()
rt.restoreViewport()
self._setViewport()
rt.drawOnBounds(
0,
......
......@@ -952,6 +952,7 @@ class SliceCanvas(props.HasProperties):
globj.postDraw()
rt.unbindAsRenderTarget()
rt.restoreViewport()
# Pre-rendering - a pre-generated 2D
# texture of the current z position
......
......@@ -49,9 +49,9 @@ class RenderTexture(texture.Texture2D):
def destroy(self):
texture.Texture.destroy(self)
log.debug('Deleting fbo {} and render buffer {}'.format(
self.__frameBuffer,
self.__renderBuffer))
log.debug('Deleting RB{}/FBO{}'.format(
self.__renderBuffer,
self.__frameBuffer))
glfbo.glDeleteFramebuffersEXT( gltypes.GLuint(self.__frameBuffer))
glfbo.glDeleteRenderbuffersEXT(1, gltypes.GLuint(self.__renderBuffer))
......@@ -66,8 +66,14 @@ class RenderTexture(texture.Texture2D):
if self.__oldSize is not None or \
self.__oldProjMat is not None or \
self.__oldMVMat is not None:
raise RuntimeError('This RenderTexture has already '
'configured the viewport')
raise RuntimeError('RenderTexture RB{}/FBO{} has already '
'configured the viewport'.format(
self.__renderBuffer,
self.__frameBuffer))
log.debug('Configuring viewport for RB{}/FBO{}'.format(
self.__renderBuffer,
self.__frameBuffer))
width, height = self.getSize()
......@@ -83,8 +89,14 @@ class RenderTexture(texture.Texture2D):
if self.__oldSize is None or \
self.__oldProjMat is None or \
self.__oldMVMat is None:
raise RuntimeError('This RenderTexture has not '
'configured the viewport')
raise RuntimeError('RenderTexture RB{}/FBO{} has not '
'configured the viewport'.format(
self.__renderBuffer,
self.__frameBuffer))
log.debug('Clearing viewport (from RB{}/FBO{})'.format(
self.__renderBuffer,
self.__frameBuffer))
gl.glViewport(*self.__oldSize)
gl.glMatrixMode(gl.GL_PROJECTION)
......@@ -101,13 +113,19 @@ class RenderTexture(texture.Texture2D):
if self.__oldFrameBuffer is not None or \
self.__oldRenderBuffer is not None:
raise RuntimeError('This RenderTexture is already bound')
raise RuntimeError('RenderTexture RB{}/FBO{} is not bound'.format(
self.__renderBuffer,
self.__frameBuffer))
self.__oldFrameBuffer = gl.glGetIntegerv(
glfbo.GL_FRAMEBUFFER_BINDING_EXT)
self.__oldRenderBuffer = gl.glGetIntegerv(
glfbo.GL_RENDERBUFFER_BINDING_EXT)
log.debug('Setting RB{}/FBO{} as render target'.format(
self.__renderBuffer,
self.__frameBuffer))
glfbo.glBindFramebufferEXT( glfbo.GL_FRAMEBUFFER_EXT,
self.__frameBuffer)
glfbo.glBindRenderbufferEXT(glfbo.GL_RENDERBUFFER_EXT,
......@@ -118,8 +136,17 @@ class RenderTexture(texture.Texture2D):
if self.__oldFrameBuffer is None or \
self.__oldRenderBuffer is None:
raise RuntimeError('This RenderTexture is not '
'the current render target')
raise RuntimeError('RenderTexture RB{}/FBO{} '
'has not been bound'.format(
self.__renderBuffer,
self.__frameBuffer))
log.debug('Restoring render target to RB{}/FBO{} '
'(from RB{}/FBO{})'.format(
self.__oldRenderBuffer,
self.__oldFrameBuffer,
self.__renderBuffer,
self.__frameBuffer))
glfbo.glBindFramebufferEXT( glfbo.GL_FRAMEBUFFER_EXT,
self.__oldFrameBuffer)
......
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