anchor.diff:  
   List<ShaderObject> createShader() {
     return [
  -    new ShaderObject("LightBlinnPhongV")
  +    new ShaderObject("LightBlinnPhongFancyV")
         ..AddAttributeVars([aVertexPosition, aNormal, aTextureCoordinates])
         ..AddVaryingVars([vVertexPosition, vNormal, vTextureCoordinates])
         ..AddUniformVars([uPerspectiveViewMatrix, uModelMatrix, uNormalMatrix])
  
positive.code:       ..SetBodyWithMain([
          """
  
  vec2 uv = dHdxy_fwd(${vTextureCoordinates}, ${uBumpScale}, ${uBumpMap});
  vec3 normal = perturbNormalArb(${uEyePosition} - ${vVertexPosition}, vNormal, uv);
  
  vec3 diffuseAccumulator;
  vec3 specularAccumulator;
  CombinedLight(${vVertexPosition}, normal, ${uEyePosition},
                ${uLightDescs},
                ${uLightTypes},
                diffuseAccumulator, specularAccumulator);
  
  
  gl_FragColor.rgb = diffuseAccumulator +
                     specularAccumulator +
                     uColor;
  gl_FragColor.a = 1.0;
  
  """
  
negative.code:   RenderProgram prg = phase.createProgram(createShader());
  
    Illumination illumination = new Illumination();
    if (false) {
      illumination.AddLight(new SpotLight("spot", posLight, dirLight, colDiffuse,
          colSpecular, range, angle, 2.0, glossiness));
    } else {
      illumination.AddLight(new DirectionalLight(
          "dir", dirLight, colDiffuse, colSpecular, glossiness));
    }
    Material lightSourceMat = new Material("light")
      ..SetUniform(uColor, colYellow);
    Node shapePointLight = new Node(
  