anchor.diff:      assert(shader == null);
       // Hack
       bool isFragmentShader = attributeVars.isEmpty;
  -    List<String> out = [];
  -    out.add("#version 300 es");
  -    out.add("precision highp float;");
  -    out.add("");
  +    List<String> out = [
  +      "#version 300 es",
  +      "precision highp float;",
  +      "precision highp sampler2DShadow;",
  +      ""
  +    ];
       for (String v in attributeVars.keys) {
         ShaderVarDesc d = _VarsDb[v];
         out.add("in ${d.type} ${attributeVars[v]};");
  
positive.code:   uPerspectiveViewMatrix: new ShaderVarDesc(VarTypeMat4, ""),
    uLightPerspectiveViewMatrix: new ShaderVarDesc(VarTypeMat4, ""),
  
    uShadowMap: new ShaderVarDesc(VarTypeSampler2D, ""),
  
    uTexture: new ShaderVarDesc(VarTypeSampler2D, ""),
    uTexture2: new ShaderVarDesc(VarTypeSampler2D, ""),
  
negative.code:       case VarTypeVec3:
          return 3;
        case VarTypeVec4:
        case VarTypeUvec4:
          return 4;
        default:
          assert(false);
  