anchor.diff:               "void main()"
                "{"
                "  gl_Position = vec4( pos.x, pos.y, 0, 1 );"
  -             "  texCoord = vec2(pos.x, pos.y);"
  +             "  texCoord = vec2((pos.x + 1) / 2, (pos.y + 1) / 2);"
                "}"] |> String.join "\n"
           let samplerFragmentShaderStr =
               ["#version 410"
  
positive.code:         let indexDataPtr = GCHandle.Alloc (indexData, GCHandleType.Pinned)
          Gl.BufferData (Gl.BufferTarget.ArrayBuffer, indexDataSize, indexDataPtr.AddrOfPinnedObject(), Gl.BufferUsageHint.StaticDraw)
  
          while true do
  
              Gl.BindFramebuffer (Gl.FramebufferTarget.Framebuffer, 0u)
              Gl.ClearColor (0.0f, 0.0f, 0.0f, 0.0f)
              Gl.Clear (Gl.ClearBufferMask.ColorBufferBit ||| Gl.ClearBufferMask.DepthBufferBit ||| Gl.ClearBufferMask.StencilBufferBit)
              // 3d rendering...
  
              Gl.BindFramebuffer (Gl.FramebufferTarget.Framebuffer, textureFramebufferTexture)
              Gl.ClearColor (0.0f, 0.0f, 0.0f, 0.0f)
  
negative.code:             Gl.BindFramebuffer (Gl.FramebufferTarget.Framebuffer, 0u)
              Gl.UseProgram samplerShaderProgram
              Gl.EnableVertexAttribArray sVertexPos2DAttrib
              Gl.BindBuffer (Gl.BufferTarget.ArrayBuffer, fullScreenQuadVertices)
              Gl.VertexAttribPointer (sVertexPos2DAttrib, 2, Gl.VertexAttribPointerType.Float, false, 2 * sizeof<single>, nativeint 0)
              Gl.BindBuffer (Gl.BufferTarget.ElementArrayBuffer, fullScreenQuadIndices)
              Gl.Uniform1i (sTexUniform, 0) // set attrib to texture slot 0
              Gl.ActiveTexture 0 // make texture slot 0 active
              Gl.BindTexture (Gl.TextureTarget.Texture2D, textureFramebufferTexture) // bind texture to slot 0
  