anchor.diff:          { MockRenderer3d : unit }
   
       interface Renderer3d with
  +        member renderer.PhysicallyBasedShader = Unchecked.defaultof<_>
           member renderer.Render _ _ _ _ = ()
           member renderer.Swap () = ()
           member renderer.CleanUp () = ()
  
positive.code:             let projectionArray = projection.ToArray ()
              OpenGL.Hl.Assert ()
  
              // categorize messages
              let prePasses = hashSetPlus<RenderPassDescriptor3d> HashIdentity.Structural []
              let postPasses = hashSetPlus<RenderPassDescriptor3d> HashIdentity.Structural []
              let surfaces = dictPlus<RenderMaterial, Matrix4x4 SegmentedList> HashIdentity.Structural []
              for message in renderer.RenderMessages do
                  match message with
                  | RenderSurfaceDescriptor (surface, model) ->
                      match surfaces.TryGetValue surface with
  
negative.code:             | WfglWindow window -> window.WfglSwapWindow ()
  
          member renderer.CleanUp () =
              let renderAssetPackages = renderer.RenderPackages |> Seq.map (fun entry -> entry.Value)
              let renderAssets = renderAssetPackages |> Seq.collect (Seq.map (fun entry -> entry.Value))
              for renderAsset in renderAssets do GlRenderer3d.freeRenderAsset renderAsset renderer
              renderer.RenderPackages.Clear ()