code: def createShader(vert_fname, frag_fname):
      """createShader - create, load, compile and link the shader object"""
      with open(op.join(this_dir, vert_fname), "rb") as fid:
          vert = fid.read().decode("ASCII")
      with open(op.join(this_dir, frag_fname), "rb") as fid:
          frag = fid.read().decode("ASCII")
      vertexShader = gl.glCreateShader(gl.GL_VERTEX_SHADER)
      gl.glShaderSource(vertexShader, vert)
      gl.glCompileShader(vertexShader)
      fragmentShader = gl.glCreateShader(gl.GL_FRAGMENT_SHADER)
      gl.glShaderSource(fragmentShader, frag)
      gl.glCompileShader(fragmentShader)
      programObj = gl.glCreateProgram()
      gl.glAttachShader(programObj, vertexShader)
      gl.glAttachShader(programObj, fragmentShader)
      gl.glLinkProgram(programObj)
      checkGLError()
      return programObj
  
file_path: vispy/examples/demo/gloo/jfa/jfa_translation.py
imports: import numpy
  from os import path
  from vispy.ext import glfw
  from vispy.io import load_data_file
  from OpenGL import GL
  from OpenGL import GLU
  from PIL import Image
  import time
label_desc: Use image node_id 1 for calling a global function with example usage: createShader(vert_fname, frag_fname) and returns: programObj