code: def createBufferTexture(texID, texw, texh):
      """createBufferTexture - create an 8-bit texture render target"""
      gl.glActiveTexture(gl.GL_TEXTURE0)
      gl.glBindTexture(gl.GL_TEXTURE_2D, texID)
      black = (0.0, 0.0, 0.0, 0.0)
      # The special shader used to render this texture performs a
      # per-pixel image processing where point sampling is required,
      # so specify nearest neighbor sampling.
      #
      # Also, the flood fill shader handles its own edge clamping, so
      # texture mode GL_REPEAT is inconsequential. "Zero outside" would
      # be useful, but separate edge values are deprecated in OpenGL.
      #
      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_CLAMP_TO_EDGE
      )
      gl.glTexParameteri(
          gl.GL_TEXTURE_2D, gl.GL_TEXTURE_WRAP_T, gl.GL_CLAMP_TO_EDGE
      )
      gl.glTexParameterfv(
          gl.GL_TEXTURE_2D, gl.GL_TEXTURE_BORDER_COLOR, black
      )
      gl.glTexImage2D(
          gl.GL_TEXTURE_2D,
          0,
          gl.GL_RGBA,
          texw,
          texh,
          0,
          gl.GL_RGBA,
          gl.GL_UNSIGNED_BYTE,
          "\x00" * texw * texh * 4,
      )
      gl.glBindTexture(gl.GL_TEXTURE_2D, 0)
      checkGLError()
  
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 5 for calling a global function with example usage: createBufferTexture(texID, texw, texh) without return types