anchor.diff:      member x.Statistics = evtStatistics :> IEvent<_>
   
       member x.Run () =
  -        if not isAlive then raise <| ObjectDisposedException("VrSystem")
  -        let (lTex, rTex) = x.OnLoad infos.[0] 
  -        
  -        while isAlive do
  +        if isDisposed then raise <| ObjectDisposedException("VrRenderer")
  +        running <- true
  +        let (lTex, rTex) =
  +            match textures with
  +            | Some t -> t
  +            | None ->
  +                let t = x.OnLoad infos.[0] 
  +                textures <- Some t
  +                t
  +
  +        while running do
               swTotal.Start()
               swProcessEvents.Start()
               x.ProcessEvents(eventQueue)
  
positive.code: 
  
      [<VolatileField>]
      let mutable isAlive = true
  
      let check (str : string) (err : EVRCompositorError) =
          if err <> EVRCompositorError.None then
  
negative.code:                 ]
          )
              
      let getChaperone () =
          let mutable quad = Unchecked.defaultof<_>
          if OpenVR.Chaperone.GetPlayAreaRect(&quad) then
              let quad = 
                  Polygon3d [|
                      V3d(quad.vCorners0.v0, quad.vCorners0.v1, quad.vCorners0.v2)
                      V3d(quad.vCorners1.v0, quad.vCorners1.v1, quad.vCorners1.v2)
                      V3d(quad.vCorners2.v0, quad.vCorners2.v1, quad.vCorners2.v2)
                      V3d(quad.vCorners3.v0, quad.vCorners3.v1, quad.vCorners3.v2)
                  |]
              Some quad
          else
              None
  
      let compositor = OpenVR.Compositor
      let renderPoses = Array.zeroCreate (int OpenVR.k_unMaxTrackedDeviceCount)
  