code: def __init__(self, name, shaders, uniforms=None):
      self.name = name
      ShaderProgram.names[name] = self
      self.shaders = shaders
      self.prog = None
      self.blockData = {}
      self.uniformData = {}
  
      ## parse extra options from the shader definition
      if uniforms is not None:
          for k, v in uniforms.items():
              self[k] = v
  
imports: from OpenGL.GL import *
  from OpenGL.GL import shaders
  import numpy
  import re
label_desc: Use image node_id 1 to create a new ShaderProgram object from inherited base classes: object with example: obj = ShaderProgram(name, shaders, uniforms)