code: def shader(self):
      if self.compiled is None:
          try:
              self.compiled = shaders.compileShader(
                  self.code, self.shaderType
              )
          except NullFunctionError:
              raise Exception(
                  "This OpenGL implementation does not support shader programs; many OpenGL features in pyqtgraph will not work."
              )
          except RuntimeError as exc:
              ## Format compile errors a bit more nicely
              if len(exc.args) == 3:
                  err, code, typ = exc.args
                  if not err.startswith("Shader compile failure"):
                      raise
                  code = code[0].decode("utf_8").split("\n")
                  err, c, msgs = err.partition(":")
                  err = err + "\n"
                  msgs = re.sub("b'", "", msgs)
                  msgs = re.sub("'$", "", msgs)
                  msgs = re.sub("\\\\n", "\n", msgs)
                  msgs = msgs.split("\n")
                  errNums = [()] * len(code)
                  for i, msg in enumerate(msgs):
                      msg = msg.strip()
                      if msg == "":
                          continue
                      m = re.match(r"(\d+\:)?\d+\((\d+)\)", msg)
                      if m is not None:
                          line = int(m.groups()[1])
                          errNums[line - 1] = errNums[line - 1] + (
                              str(i + 1),
                          )
                          # code[line-1] = '%d\t%s' % (i+1, code[line-1])
                      err = err + "%d %s\n" % (i + 1, msg)
                  errNums = [",".join(n) for n in errNums]
                  maxlen = max(map(len, errNums))
                  code = [
                      errNums[i]
                      + " " * (maxlen - len(errNums[i]))
                      + line
                      for i, line in enumerate(code)
                  ]
                  err = err + "\n".join(code)
                  raise Exception(err)
              else:
                  raise
      return self.compiled
  
imports: from OpenGL.GL import *
  from OpenGL.GL import shaders
  import numpy
  import re
label_desc: Use image node_id 2 for calling the Shader obj's underlying member method code with example usage: obj.shader() and returns: self