class_docstr: Emulates the API of a MainFunction while wrapping all vertex or fragment
  shaders in a MultiProgram.
  
  Example::
  
      mp = MultiProgram(vert, frag)
      mp.add_program('p1')
      mp.add_program('p2')
  
      # applies to all programs
      mp.vert['u_scale'] = (1, 2)
  
      # applies to one program
      mp.get_program('p1').frag['u_color'] = (1, 1, 1, 1)  
code: def __init__(self, program, shader):
      self._program = program
      self._shader = shader
      self._set_items = {}
  
imports: import weakref
  from .program import ModularProgram
label_desc: Use image node_id 1 to create a new MultiShader object from inherited base classes: object with example: obj = MultiShader(program, shader)