code: def loadShader(shaderType, shaderFile):
      # check if file exists, get full path name
      strFilename = findFileOrThrow(shaderFile)
      shaderData = None
      with open(strFilename, "r") as f:
          shaderData = f.read()
  
      shader = glCreateShader(shaderType)
      glShaderSource(
          shader, shaderData
      )  # note that this is a simpler function call than in C
  
      # This shader compilation is more explicit than the one used in
      # framework.cpp, which relies on a glutil wrapper function.
      # This is made explicit here mainly to decrease dependence on pyOpenGL
      # utilities and wrappers, which docs caution may change in future versions.
      glCompileShader(shader)
  
      status = glGetShaderiv(shader, GL_COMPILE_STATUS)
      if status == GL_FALSE:
          # Note that getting the error log is much simpler in Python than in C/C++
          # and does not require explicit handling of the string buffer
          strInfoLog = glGetShaderInfoLog(shader)
          strShaderType = ""
          if shaderType is GL_VERTEX_SHADER:
              strShaderType = "vertex"
          elif shaderType is GL_GEOMETRY_SHADER:
              strShaderType = "geometry"
          elif shaderType is GL_FRAGMENT_SHADER:
              strShaderType = "fragment"
  
          print(
              "Compilation failure for "
              + strShaderType
              + " shader:\n"
              + str(strInfoLog)
          )
  
      return shader
  
imports: import os
  from OpenGL.GL import *
label_desc: Use image node_id 1 for calling a global function with example usage: loadShader(shaderType, shaderFile) and returns: shader