anchor.diff:        _uniforms[v] = b;
       }
       return b;
  +  }
  +
  +  delete() {
  +    if (_fragShader != null) {
  +      gl.detachShader(program, _fragShader);
  +      gl.deleteShader(_fragShader);
  +      _fragShader = null;
  +    }
  +    if (_vertShader != null) {
  +      gl.detachShader(program, _vertShader);
  +      gl.deleteShader(_vertShader);
  +      _vertShader = null;
  +    }
  +    if (program != null) {
  +     gl.deleteProgram(program);
  +     program = null;
  +    }
     }
   }
   
  
positive.code: 
      if (req.beforeAll != null) _beforeAlls.add(req.beforeAll);
      if (req.onAddProgramCtx != null) _onAddProgramCtxs.add(req.onAddProgramCtx);
      if (req.onRemoveProgramCtx != null) _onAddProgramCtxs.add(req.onRemoveProgramCtx);
  
      if (req.ctx != null) {
        var isNew = !_ctxs.contains(req.ctx);
  
negative.code:   }
    return program;
  }
  
  
  void injectMatrix4(ProgramContext ctx, Matrix4 mat, String sname) {
    var u = ctx.getUniformLocation(sname);
  