Activate this Shader, making it the currently-bound program.

        Any Mesh.draw() calls after bind() will have their data processed by this Shader.  To unbind, call Shader.unbind().

        Example::

           shader.bind()
           mesh.draw()
           shader.unbind()

        .. note:: Shader.bind() and Shader.unbind() can be also be called implicitly by using the 'with' statement.

        Example of with statement with Shader::
            with shader:
                mesh.draw()

def bind(self):
        """Activate this Shader, making it the currently-bound program.

        Any Mesh.draw() calls after bind() will have their data processed by this Shader.  To unbind, call Shader.unbind().

        Example::

           shader.bind()
           mesh.draw()
           shader.unbind()

        .. note:: Shader.bind() and Shader.unbind() can be also be called implicitly by using the 'with' statement.

        Example of with statement with Shader::
            with shader:
                mesh.draw()
        """
        if not self.is_linked:
            if not self.is_compiled:
                self.compile()
            self.link()
        super(self.__class__, self).bind()