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

Bugfix - alpha was not working when using pre-render textures, as I was

not correctly clearing/configuring alpha blending.
parent 0f834c20
No related branches found
No related tags found
No related merge requests found
......@@ -19,6 +19,7 @@ import OpenGL.GL as gl
import fsl.fsleyes.displaycontext.canvasopts as canvasopts
import fsl.fsleyes.gl.slicecanvas as slicecanvas
import fsl.fsleyes.gl.resources as glresources
import fsl.fsleyes.gl.routines as glroutines
import fsl.fsleyes.gl.textures as textures
......@@ -723,8 +724,6 @@ class LightBoxCanvas(slicecanvas.SliceCanvas):
if not self._setGLContext():
return
gl.glClearColor(*self.bgColour)
if self.renderMode == 'offscreen':
log.debug('Rendering to off-screen texture')
......@@ -740,10 +739,12 @@ class LightBoxCanvas(slicecanvas.SliceCanvas):
rt.bindAsRenderTarget()
rt.setRenderViewport(self.xax, self.yax, lo, hi)
gl.glClear(gl.GL_COLOR_BUFFER_BIT)
glroutines.clear((0, 0, 0, 0))
else:
self._setViewport()
glroutines.clear(self.bgColour)
startSlice = self.ncols * self.topRow
endSlice = startSlice + self.nrows * self.ncols
......@@ -795,6 +796,7 @@ class LightBoxCanvas(slicecanvas.SliceCanvas):
rt.unbindAsRenderTarget()
rt.restoreViewport()
self._setViewport()
glroutines.clear(self.bgColour)
rt.drawOnBounds(
0,
self.displayBounds.xlo,
......
......@@ -20,6 +20,22 @@ import fsl.utils.transform as transform
log = logging.getLogger(__name__)
def clear(bgColour):
"""Clears the current frame buffer, and does some standard setup
operations.
"""
# set the background colour
gl.glClearColor(*bgColour)
# clear the buffer
gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
# enable transparency
gl.glEnable(gl.GL_BLEND)
gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA)
def show2D(xax, yax, width, height, lo, hi):
"""Configures the OpenGL viewport for 2D othorgraphic display.
......
......@@ -12,8 +12,7 @@ functionality to display a 2D slice from a collection of 3D overlays.
import copy
import logging
import numpy as np
import OpenGL.GL as gl
import numpy as np
import props
......@@ -904,13 +903,6 @@ class SliceCanvas(props.HasProperties):
size = self._getSize()
width, height = size
# clear the canvas
gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
# enable transparency
gl.glEnable(gl.GL_BLEND)
gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA)
if (len(self.overlayList) == 0) or \
(width == 0) or \
......@@ -1017,8 +1009,6 @@ class SliceCanvas(props.HasProperties):
if width == 0 or height == 0:
return
gl.glClearColor(*self.bgColour)
if not self._setGLContext():
return
......@@ -1026,7 +1016,8 @@ class SliceCanvas(props.HasProperties):
# display bounds and canvas size
if self.renderMode is not 'offscreen':
self._setViewport()
glroutines.clear(self.bgColour)
for overlay in self.displayCtx.getOrderedOverlays():
display = self.displayCtx.getDisplay(overlay)
......@@ -1075,7 +1066,7 @@ class SliceCanvas(props.HasProperties):
rt.bindAsRenderTarget()
rt.setRenderViewport(self.xax, self.yax, lo, hi)
gl.glClear(gl.GL_COLOR_BUFFER_BIT)
glroutines.clear((0, 0, 0, 0))
globj.preDraw()
globj.draw(self.pos.z)
......@@ -1106,6 +1097,7 @@ class SliceCanvas(props.HasProperties):
# to the screen canvas.
if self.renderMode == 'offscreen':
self._setViewport()
glroutines.clear(self.bgColour)
self._drawOffscreenTextures()
if self.showCursor:
......
......@@ -249,10 +249,10 @@ class RenderTextureStack(object):
oldProjMat = gl.glGetFloatv( gl.GL_PROJECTION_MATRIX)
oldMVMat = gl.glGetFloatv( gl.GL_MODELVIEW_MATRIX)
tex.bindAsRenderTarget()
glroutines.show2D(xax, yax, width, height, lo, hi)
glroutines.clear((0, 0, 0, 0))
tex.bindAsRenderTarget()
gl.glClear(gl.GL_COLOR_BUFFER_BIT)
self.__globj.preDraw()
self.__globj.draw(zpos)
self.__globj.postDraw()
......
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