code: def loadShapeTexture(filename, texID):
      """loadShapeTexture - load 8-bit shape texture data
      from a TGA file and set up the corresponding texture object."""
      data, texw, texh = loadImage(load_data_file("jfa/" + filename))
      gl.glActiveTexture(gl.GL_TEXTURE0)
      gl.glBindTexture(gl.GL_TEXTURE_2D, texID)
      # Load image into texture
      gl.glTexImage2D(
          gl.GL_TEXTURE_2D,
          0,
          gl.GL_LUMINANCE,
          texw,
          texh,
          0,
          gl.GL_LUMINANCE,
          gl.GL_UNSIGNED_BYTE,
          data,
      )
      # This is the input image. We want unaltered 1-to-1 pixel values,
      # so specify nearest neighbor sampling to be sure.
      gl.glTexParameteri(
          gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_NEAREST
      )
      gl.glTexParameteri(
          gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST
      )
      gl.glTexParameteri(
          gl.GL_TEXTURE_2D, gl.GL_TEXTURE_WRAP_S, gl.GL_REPEAT
      )
      gl.glTexParameteri(
          gl.GL_TEXTURE_2D, gl.GL_TEXTURE_WRAP_T, gl.GL_REPEAT
      )
      checkGLError()
      return texw, texh
  
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 4 for calling a global function with example usage: loadShapeTexture(filename, texID) and returns: texw,  texh