anchor.diff:              
               let pool = p.Pool
               
  +            let additions = new List<DrawCallInfo>()
  +            let removals = new List<DrawCallInfo>()
  +
               let r = (p.Calls |> ASet.map (fun mdc -> mdc.Call)).GetReader()
               let calls =
                   let buffer = DrawCallBuffer(pool.Runtime, true) // who manages this? using finalizer for now
  
positive.code:     let add x (call : DrawCallInfo) =
          locked x (fun () ->
              if indices.ContainsKey call then 
                  false
              else
                  let index = calls.Count
                  indices.[call] <- calls.Count
  
negative.code:                     let deltas = r.GetChanges self
                      for d in deltas do
                          match d with
                              | Add(_,v) -> additions.Add v
                              | Rem(_,v) -> removals.Add v
  
                      buffer.Update(removals, additions) |> ignore
  
                      additions.Clear()
                      removals.Clear()
  
                      buffer.GetValue self
                  )
  