anchor.diff:                  swTotal.Reset()
                   swRender.Reset()
                   frameCount <- 0
  -
  -
  -        OpenVR.Shutdown()
  -        lTex.Dispose()
  -        rTex.Dispose()
  -        x.Release()
  +                
  +        //OpenVR.Shutdown()
  +        //lTex.Dispose()
  +        //rTex.Dispose()
  +        //x.Release()
  +
  +    member x.Dispose() =
  +        if not isDisposed then
  +            isDisposed <- true
  +
  +            if running then x.Shutdown()
  +
  +            OpenVR.Shutdown()
  +            match textures with
  +            | Some (lTex, rTex) -> 
  +                lTex.Dispose()
  +                rTex.Dispose()
  +                textures <- None
  +            | None ->
  +                ()
  +            x.Release()
   
       member x.Hmd = hmds.[0]
   
       member x.Controllers = devices |> Array.filter (fun d -> d.Type = VrDeviceType.Controller)
   
  +    interface IDisposable with
  +        member x.Dispose() = x.Dispose()
  
positive.code: 
  
      [<VolatileField>]
      let mutable isAlive = true
  
      let check (str : string) (err : EVRCompositorError) =
          if err <> EVRCompositorError.None then
  
negative.code:     member x.DesiredSize = desiredSize
  
      member x.Shutdown() =
          running <- false
  
      member x.Info = infos.[0]
  
  