anchor.diff:      /// Describes some physically-based geometry that's loaded into VRAM.
       type [<StructuralEquality; NoComparison>] PhysicallyBasedGeometry =
           { Bounds : Box3
  +          PrimitiveType : OpenGL.PrimitiveType
  +          ElementCount : int
             Vertices : Vector3 array
             VertexBuffer : uint
             ModelBuffer : uint
             IndexBuffer : uint
  -          PrimitiveType : OpenGL.PrimitiveType
  -          ElementCount : int
             PhysicallyBasedVao : uint }
   
       type [<CustomEquality; NoComparison; Struct>] PhysicallyBasedSurface =
  
positive.code:         | Some error -> Left error
          | None -> Right materials
  
      let TryCreatePhysicallyBasedStaticModel (createMaterials, filePath, assimp : Assimp.AssimpContext) =
          try let scene = assimp.ImportFile (filePath, Assimp.PostProcessSteps.CalculateTangentSpace ||| Assimp.PostProcessSteps.JoinIdenticalVertices ||| Assimp.PostProcessSteps.Triangulate ||| Assimp.PostProcessSteps.GenerateSmoothNormals ||| Assimp.PostProcessSteps.SplitLargeMeshes ||| Assimp.PostProcessSteps.LimitBoneWeights ||| Assimp.PostProcessSteps.RemoveRedundantMaterials ||| Assimp.PostProcessSteps.SortByPrimitiveType ||| Assimp.PostProcessSteps.FindDegenerates ||| Assimp.PostProcessSteps.FindInvalidData ||| Assimp.PostProcessSteps.GenerateUVCoords ||| Assimp.PostProcessSteps.FlipWindingOrder)
              let dirPath = Path.GetDirectoryName filePath
              let materialsOpt =
                  if createMaterials
                  then TryCreatePhysicallyBasedMaterials (dirPath, scene)
                  else Right (dictPlus HashIdentity.Structural [])
              match materialsOpt with
  
negative.code:         OpenGL.Gl.DeleteTextures texture
  
      /// Attempt to create physically-based geometry from an assimp mesh.
      let TryCreatePhysicallyBasedGeometry (renderable, mesh : Assimp.Mesh) =
  
          // ensure required data is available
          if  mesh.HasVertices &&
  