anchor.diff:  }
   
   class Viewport {
  -  int x;
  -  int y;
  +  int x = 0;
  +  int y = 0;
     int viewWidth;
     int viewHeight;
  +
  +  var sfname_projectionmatrix = SFNAME_PROJECTIONMATRIX;
  +  var sfname_viewmatrix = SFNAME_VIEWMATRIX;
  +  var sfname_rotmatrix = SFNAME_ROTATIONMATRIX;
  +  var sfname_projectionviewmatrix = SFNAME_PROJECTIONVIEWMATRIX;
   
     final camera = new CameraInfo();
   
  
positive.code:     camera.updateViewMatrix();
    }
  
    _autoRegisterOnProgram(ProgramsRunner pr, ProgramContext p) {
      if (p.getUniformLocation(SFNAME_PROJECTIONMATRIX) != null) {
        pr.register(new RequestRunOn()
          ..ctx = p
          ..before = _setUniformProjectionMatrix
        );
      }
      if (p.getUniformLocation(SFNAME_VIEWMATRIX) != null) {
        pr.register(new RequestRunOn()
          ..ctx = p
          ..before = _setUniformViewMatrix
        );
      }
      if (p.getUniformLocation(SFNAME_PROJECTIONVIEWMATRIX) != null) {
        pr.register(new RequestRunOn()
          ..ctx = p
          ..before = _setUniformProjectionViewMatrix
        );
      }
    }
  
    _setUniformProjectionMatrix(ProgramContext ctx) {
      injectMatrix4(ctx, camera._projectionMatrix, SFNAME_PROJECTIONMATRIX);
    }
  
    _setUniformViewMatrix(ProgramContext ctx) {
      injectMatrix4(ctx, camera._viewMatrix, SFNAME_VIEWMATRIX);
    }
  
    _setUniformProjectionViewMatrix(ProgramContext ctx) {
      injectMatrix4(ctx, camera._projectionViewMatrix, SFNAME_PROJECTIONVIEWMATRIX);
    }
  
    makeRequestRunOn() => new RequestRunOn()
      ..setup = _setup
  //    ..beforeAll = ((gl) => autoScale(gl.canvas))
      ..onAddProgramCtx = _autoRegisterOnProgram
    ;
  
  
  
negative.code: 
    final _projectionMatrix = new Matrix4.zero();
    final _viewMatrix = new Matrix4.identity();
    final _rotMatrix = new Matrix3.identity();
    final _projectionViewMatrix = new Matrix4.zero();
  
    updateProjectionMatrix() {
  