anchor.diff:              let cpuOffset = cpuOffset + vertexSize
               let position2Unrotated = v2 (position.X + size.X) (position.Y + size.Y)
               let position2 = (position2Unrotated - center).Rotate rotation
  -            let mutable vertex2 = Marshal.PtrToStructure<SpriteBatchVertex> cpuOffset
  +            let mutable vertex2 = Unchecked.defaultof<SpriteBatchVertex>
               vertex2.SbvPosition <- position2
               vertex2.SbvCoord <- coords.TopRight
               vertex2.SbvColor <- color
  
positive.code:                 else Option.get envOpt // guaranteed to exist
  
              let vertexSize = nativeint sizeof<SpriteBatchVertex>
              let cpuOffset = env.CpuBuffer + vertexSize * nativeint 4
              let position0 = (position - center).Rotate rotation
              let mutable vertex0 = Marshal.PtrToStructure<SpriteBatchVertex> cpuOffset
              vertex0.SbvPosition <- position0
              vertex0.SbvCoord <- coords.BottomLeft
              vertex0.SbvColor <- color
              Marshal.StructureToPtr<SpriteBatchVertex> (vertex0, cpuOffset, false)
  
              let cpuOffset = cpuOffset + vertexSize
              let position1Unrotated = v2 (position.X + size.X) position.Y
              let position1 = (position1Unrotated - center).Rotate rotation
              let mutable vertex1 = Marshal.PtrToStructure<SpriteBatchVertex> cpuOffset
              vertex1.SbvPosition <- position1
              vertex1.SbvCoord <- coords.BottomRight
              vertex1.SbvColor <- color
  
negative.code:         let DeleteTexture (texture : uint) =
              Gl.DeleteTextures (1, [|texture|])
  
          let private BeginSpriteBatch maxSprites =
              let vaos = [|0u|]
              Gl.GenVertexArrays (1, vaos)
              let vao = vaos.[0]
              let gpuBuffers = [|0u|]
              Gl.GenBuffers (1, gpuBuffers)
              let gpuBuffer = gpuBuffers.[0]
              Gl.BindVertexArray vao
              Gl.BindBuffer (Gl.BufferTarget.ArrayBuffer, gpuBuffer)
              Gl.BufferData (Gl.BufferTarget.ArrayBuffer, nativeint (sizeof<SpriteBatchVertex> * 4 * maxSprites), nativeint 0, Gl.BufferUsageHint.DynamicDraw)
              Gl.EnableVertexAttribArray 0
              Gl.EnableVertexAttribArray 1
              Gl.EnableVertexAttribArray 2
              Gl.VertexAttribPointer (0, 2, Gl.VertexAttribPointerType.Float, false, sizeof<SpriteBatchVertex>, Marshal.OffsetOf (typeof<SpriteBatchVertex>, "SbvPosition"))
              Gl.VertexAttribPointer (1, 2, Gl.VertexAttribPointerType.Float, false, sizeof<SpriteBatchVertex>, Marshal.OffsetOf (typeof<SpriteBatchVertex>, "SbvCoord"))
              Gl.VertexAttribPointer (2, 4, Gl.VertexAttribPointerType.Float, false, sizeof<SpriteBatchVertex>, Marshal.OffsetOf (typeof<SpriteBatchVertex>, "SbvColor"))
              let cpuBuffer = Gl.MapBuffer (Gl.BufferTarget.ArrayBuffer, Gl.BufferAccess.WriteOnly)
              Gl.BindBuffer (Gl.BufferTarget.ArrayBuffer, 0u)
              Gl.BindVertexArray 0u
              (cpuBuffer, gpuBuffer, vao)
  
          let private EndSpriteBatch numSprites spriteTexUniform spriteProgram texture cpuBuffer gpuBuffer gpuVao =
              let error = Gl.GetError ()
              Gl.BindBuffer (Gl.BufferTarget.ArrayBuffer, gpuBuffer)
              let error = Gl.GetError ()
  
              let test = Marshal.PtrToStructure<SpriteBatchVertex> cpuBuffer
  
  
              Gl.BufferSubData (Gl.BufferTarget.ArrayBuffer, nativeint 0, nativeint (sizeof<SpriteBatchVertex> * 4 * numSprites), cpuBuffer)
              let error = Gl.GetError ()
              Gl.BindVertexArray gpuVao
              let error = Gl.GetError ()
              Gl.UseProgram spriteProgram
              let error = Gl.GetError ()
              Gl.Uniform1i (spriteTexUniform, 0) // set uniform to texture slot 0
              let error = Gl.GetError ()
              Gl.ActiveTexture 0 // make texture slot 0 active
              let error = Gl.GetError ()
              Gl.BindTexture (Gl.TextureTarget.Texture2D, texture)
              let error = Gl.GetError ()
  
              Gl.DrawArrays (Gl.BeginMode.Triangles, 0, 6 * numSprites)
              let error = Gl.GetError ()
              Gl.UnmapBuffer Gl.BufferTarget.ArrayBuffer |> ignore<bool>
              let error = Gl.GetError ()
              Gl.BindVertexArray 0u
              let error = Gl.GetError ()
              Gl.BindBuffer (Gl.BufferTarget.ArrayBuffer, 0u)
              let error = Gl.GetError ()
              Gl.UseProgram 0u
  
          let AugmentSpriteBatch center (position : Vector2) (size : Vector2) rotation color (coords : Box2) texture bfs bfd spriteTextureUniform spriteProgram (envOpt : SpriteBatchEnv option) =
  