Exemplo n.º 1
0
def compileShaders(self):
    """Loads the ``glmesh`` vertex/fragment shader source and creates
    :class:`.GLSLShader` instance(s).
    """

    if self.threedee:

        flatVertSrc = shaders.getVertexShader('glmesh_3d_flat')
        flatFragSrc = shaders.getFragmentShader('glmesh_3d_flat')
        dataVertSrc = shaders.getVertexShader('glmesh_3d_data')
        dataFragSrc = shaders.getFragmentShader('glmesh_3d_data')

        self.flatShader = shaders.GLSLShader(flatVertSrc,
                                             flatFragSrc,
                                             indexed=True)
        self.dataShader = shaders.GLSLShader(dataVertSrc,
                                             dataFragSrc,
                                             indexed=True)

    else:

        vertSrc = shaders.getVertexShader('glmesh_2d_data')
        fragSrc = shaders.getFragmentShader('glmesh_2d_data')

        self.dataShader = shaders.GLSLShader(vertSrc, fragSrc)
Exemplo n.º 2
0
    def __initShader(self):
        """Called by :meth:`__init__` if this ``RenderTexture`` was
        configured to use a colour and depth texture. Compiles
        vertex/fragment shader programs which pass the colour and depth
        values through.

        These shaders are used if the :meth:`draw` or
        :meth:`.Texture2D.drawOnBounds` methods are used with the
        ``useDepth=True`` argument.
        """

        self.__shader = None

        vertSrc = shaders.getVertexShader('rendertexture')
        fragSrc = shaders.getFragmentShader('rendertexture')
        shaderDir = shaders.getShaderDir()

        if float(fslplatform.glVersion) < 2.1:
            self.__shader = shaders.ARBPShader(vertSrc, fragSrc, shaderDir)

        else:
            self.__shader = shaders.GLSLShader(vertSrc, fragSrc)

            self.__shader.load()
            self.__shader.set('colourTexture', 0)
            self.__shader.set('depthTexture', 1)
            self.__shader.unload()
Exemplo n.º 3
0
    def __init__(self, filterName, texture):
        """Create a ``Filter``.

        :arg filterName: Name of the filter to create.

        :arg texture:    Number of the texture unit that the filter input
                         texture will be bound to. This must be specified
                         when the shader program is compiled, to support
                         OpenGL 1.4.
        """

        basename = filterName
        filterName = 'filter_{}'.format(filterName)
        vertSrc = shaders.getVertexShader('filter')
        fragSrc = shaders.getFragmentShader(filterName)
        self.__texture = texture
        self.__basename = basename

        if float(fslgl.GL_COMPATIBILITY) >= 2.1:
            self.__shader = shaders.GLSLShader(vertSrc, fragSrc)
        else:
            constants = {n: 1 for n in GL14_CONSTANTS[basename]}
            self.__shader = shaders.ARBPShader(vertSrc,
                                               fragSrc,
                                               shaders.getShaderDir(),
                                               {'texture': texture},
                                               constants=constants)
Exemplo n.º 4
0
def compileShaders(self):
    """Compiles vertex and fragment shaders. """
    if self.shader is not None:
        self.shader.destroy()

    vertSrc = shaders.getVertexShader('glvolume')
    fragSrc = shaders.getFragmentShader('glmip')

    self.shader = shaders.GLSLShader(vertSrc, fragSrc)
Exemplo n.º 5
0
def compileShaders(self):
    """Loads the vertex/fragment shader source code, and creates a
    :class:`.GLSLShader` program.
    """

    if self.shader is not None:
        self.shader.destroy()

    vertSrc = shaders.getVertexShader(  'glvolume')
    fragSrc = shaders.getFragmentShader('glmask')

    self.shader = shaders.GLSLShader(vertSrc, fragSrc)
Exemplo n.º 6
0
def compileShaders(self):
    """Loads the vertex/fragment shader source code, and creates a
    :class:`.GLSLShader` program.
    """

    if self.shader is not None:
        self.shader.destroy()

    vertSrc = shaders.getVertexShader('glvolume')
    fragSrc = shaders.getFragmentShader('glrgbvolume')

    constants = {'textureIs2D': self.imageTexture.ndim == 2}

    self.shader = shaders.GLSLShader(vertSrc, fragSrc, constants=constants)
Exemplo n.º 7
0
def compileShaders(self):
    """Loads the vertex/fragment shader source, and creates a
    :class:`.GLSLShader`.
    """

    if self.shader is not None:
        self.shader.destroy()

    if self.threedee: prefix = 'glvolume_3d'
    else: prefix = 'glvolume'

    vertSrc = shaders.getVertexShader(prefix)
    fragSrc = shaders.getFragmentShader(prefix)

    self.shader = shaders.GLSLShader(vertSrc, fragSrc)
Exemplo n.º 8
0
def compileShaders(self):
    """Loads the vertex/fragment shader source, and creates a
    :class:`.GLSLShader`.
    """

    if self.shader is not None:
        self.shader.destroy()

    if self.threedee: prefix = 'glvolume_3d'
    else: prefix = 'glvolume'

    env = {'textureIs2D': self.imageTexture.ndim == 2}

    vertSrc = shaders.getVertexShader(prefix)
    fragSrc = shaders.getFragmentShader(prefix)

    self.shader = shaders.GLSLShader(vertSrc, fragSrc, constants=env)
Exemplo n.º 9
0
def compileShaders(self):
    """Creates a :class:`.GLSLShader`, and attaches it to this :class:`.GLSH`
    instance as an attribute called ``shader``.
    """

    if self.shader is not None:
        self.shader.destroy()

    opts = self.opts
    self.useVolumeFragShader = opts.colourImage is not None

    if self.useVolumeFragShader:
        vertShader = 'glsh_volume'
        fragShader = 'glvolume'
    else:
        vertShader = 'glsh'
        fragShader = 'glsh'

    vertSrc = shaders.getVertexShader(vertShader)
    fragSrc = shaders.getFragmentShader(fragShader)

    self.shader = shaders.GLSLShader(vertSrc, fragSrc, indexed=True)
Exemplo n.º 10
0
def compileShaders(self, vertShader, indexed=False):
    """Compiles the vertex/fragment shader programs (by creating a
    :class:`.GLSLShader` instance).

    If the :attr:`.VectorOpts.colourImage` property is set, the ``glvolume``
    fragment shader is used. Otherwise, the ``glvector`` fragment shader
    is used.
    """

    if self.shader is not None:
        self.shader.destroy()

    opts = self.opts
    useVolumeFragShader = opts.colourImage is not None

    self.useVolumeFragShader = useVolumeFragShader

    if useVolumeFragShader: fragShader = 'glvolume'
    else: fragShader = 'glvector'

    vertSrc = shaders.getVertexShader(vertShader)
    fragSrc = shaders.getFragmentShader(fragShader)

    return shaders.GLSLShader(vertSrc, fragSrc, indexed)