 
   _setVertexShaderSource: (value) ->
     @_vertexShaderSource = value
+    @_vertexShaderIsDirty = true
     @_scheduleFrame()
 
 

#
#           -- VERT
#         /         \
#  CONTEXT -- FRAG -- LINK -- DATA -- RENDER
#         \                         /
#           -- GEOM ---------------
#
#
# CONTEXT:  create WebGL context
# VERT:     compile vertex shader
# FRAG:     compile fragment shader
# LINK:     link program, look up and cache attribute and uniform locations
# GEOM:     generate vertex buffer with geometry
# DATA:     set values for uniforms and update viewport dimensions if required
# RENDER:   render scene
#
# When the object is first created, each step is performed in dependency order from context creation
# to rendering. Various API methods will invalidate a specific step, requiring that it and all dependent steps

    @_fragmentShader = gl.createShader(gl.FRAGMENT_SHADER)
    gl.attachShader @_program, @_vertexShader
    gl.attachShader @_program, @_fragmentShader


  _compileShader: (shader, source) ->
