From c385b796633c4c053eb154a3d66337dbb81a511b Mon Sep 17 00:00:00 2001 From: Paul McCarthy <pauld.mccarthy@gmail.com> Date: Mon, 4 Jan 2016 10:37:57 +0000 Subject: [PATCH] GLLineVector ported to using ARBPShader --- fsl/fsleyes/gl/gl14/gllinevector_funcs.py | 45 ++++++++-------------- fsl/fsleyes/gl/gl14/gllinevector_vert.prog | 8 ++-- 2 files changed, 19 insertions(+), 34 deletions(-) diff --git a/fsl/fsleyes/gl/gl14/gllinevector_funcs.py b/fsl/fsleyes/gl/gl14/gllinevector_funcs.py index 1c0cfec7b..8d5033c96 100644 --- a/fsl/fsleyes/gl/gl14/gllinevector_funcs.py +++ b/fsl/fsleyes/gl/gl14/gllinevector_funcs.py @@ -18,17 +18,14 @@ according to the orientation of the underlying vector. import logging -import numpy as np +import numpy as np -import OpenGL.GL as gl -import OpenGL.GL.ARB.fragment_program as arbfp -import OpenGL.GL.ARB.vertex_program as arbvp +import OpenGL.GL as gl -import fsl.utils.transform as transform -import fsl.fsleyes.gl.gllinevector as gllinevector -import fsl.fsleyes.gl.resources as glresources -import fsl.fsleyes.gl.shaders as shaders -import glvector_funcs +import fsl.utils.transform as transform +import fsl.fsleyes.gl.gllinevector as gllinevector +import fsl.fsleyes.gl.resources as glresources +import glvector_funcs log = logging.getLogger(__name__) @@ -42,9 +39,8 @@ def init(self): :func:`updateShaderState`, and :func:`updateVertices` functions. """ - self.vertexProgram = None - self.fragmentProgram = None - self.lineVertices = None + self.shader = None + self.lineVertices = None self._vertexResourceName = '{}_{}_vertices'.format( type(self).__name__, id(self.vectorImage)) @@ -122,32 +118,23 @@ def updateShaderState(self): glvector_funcs.updateFragmentShaderState(self) - gl.glEnable(arbvp.GL_VERTEX_PROGRAM_ARB) - - arbvp.glBindProgramARB(arbvp.GL_VERTEX_PROGRAM_ARB, self.vertexProgram) - shape = np.array(list(image.shape[:3]) + [0], dtype=np.float32) invShape = 1.0 / shape offset = [0.5, 0.5, 0.5, 0.0] - shaders.setVertexProgramVector(0, invShape) - shaders.setVertexProgramVector(1, offset) + self.shader.load() + + self.shader.setVertParam('invImageShape', invShape) + self.shader.setVertParam('voxelOffsets', offset) - gl.glDisable(arbvp.GL_VERTEX_PROGRAM_ARB) + self.shader.unload() def preDraw(self): """Initialises the GL state ready for drawing the :class:`.GLLineVector`. """ - gl.glEnable(arbvp.GL_VERTEX_PROGRAM_ARB) - gl.glEnable(arbfp.GL_FRAGMENT_PROGRAM_ARB) - gl.glEnableClientState(gl.GL_VERTEX_ARRAY) - - arbvp.glBindProgramARB(arbvp.GL_VERTEX_PROGRAM_ARB, - self.vertexProgram) - arbfp.glBindProgramARB(arbfp.GL_FRAGMENT_PROGRAM_ARB, - self.fragmentProgram) + self.shader.load() def draw(self, zpos, xform=None): @@ -186,7 +173,5 @@ def drawAll(self, zposes, xforms): def postDraw(self): """Clears the GL state after drawing the :class:`.GLLineVector`. """ - gl.glDisable(arbvp.GL_VERTEX_PROGRAM_ARB) - gl.glDisable(arbfp.GL_FRAGMENT_PROGRAM_ARB) - + self.shader.unload() gl.glDisableClientState(gl.GL_VERTEX_ARRAY) diff --git a/fsl/fsleyes/gl/gl14/gllinevector_vert.prog b/fsl/fsleyes/gl/gl14/gllinevector_vert.prog index ffcf9df43..525c90508 100644 --- a/fsl/fsleyes/gl/gl14/gllinevector_vert.prog +++ b/fsl/fsleyes/gl/gl14/gllinevector_vert.prog @@ -20,8 +20,8 @@ TEMP texCoord; -PARAM invImageShape = program.local[0]; -PARAM voxelOffsets = program.local[1]; +PARAM invImageShape = {{ param_invImageShape }}; +PARAM voxelOffsets = {{ param_voxelOffsets }}; # Transform the vertex position (which is in voxel # coordinates) into display coordinates. It is @@ -38,13 +38,13 @@ MOV texCoord, vertex.position; ADD texCoord, texCoord, voxelOffsets; FLR texCoord, texCoord; -MOV result.texcoord[1], texCoord; +MOV {{ varying_voxCoord }}, texCoord; # Transform those integer voxel # coordinates into texture coordinates ADD texCoord, texCoord, { 0.5, 0.5, 0.5, 0.0 }; MUL texCoord, texCoord, invImageShape; -MOV result.texcoord[0], texCoord; +MOV {{ varying_texCoord }}, texCoord; END -- GitLab