anchor.diff:              let projectionArray = projection.ToArray ()
               OpenGL.Hl.Assert ()
   
  +            // just use constant lights for now
  +            let lightPositions = [|-50.0f; 0.0f; 50.0f; 0.0f; 50.0f; 0.0f; 50.0f; 0.0f; 50.0f; -50.0f; 50.0f; 50.0f|]
  +            let lightColors = [|100.0f; 0.0f; 100.0f; 0.0f; 100.0f; 0.0f; 100.0f; 100.0f; 0.0f; 100.0f; 0.0f; 100.0f|]
  +
               // 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
  +            for message in renderMessages do
                   match message with
                   | RenderSurfaceDescriptor (surface, model) ->
                       match surfaces.TryGetValue surface with
  
positive.code:                     OpenGL.Hl.DrawSurfaces
                          (&eyePosition, renderer.RenderModelsFields, models.Length, viewArray, projectionArray,
                           material.AlbedoTexture, material.MetalnessTexture, material.RoughnessTexture, material.NormalTexture, material.AmbientOcclusionTexture,
                           [||], [||],
                           renderer.RenderModelRow0Buffer, renderer.RenderModelRow1Buffer, renderer.RenderModelRow2Buffer, renderer.RenderModelRow3Buffer,
                           renderer.RenderPhysicallyBasedShader, material.Geometry)
  
  
negative.code:         { MockRenderer3d : unit }
  
      interface Renderer3d with
          member renderer.PhysicallyBasedShader = Unchecked.defaultof<_>
          member renderer.Render _ _ _ _ = ()
          member renderer.Swap () = ()
          member renderer.CleanUp () = ()
  