code: func (f *Frame) Blit(dst *Frame, sx0, sy0, sx1, sy1, dx0, dy0, dx1, dy1 int) {
  	f.rf.obj = f.fb.obj
  	if dst != nil {
  		f.df.obj = dst.fb.obj
  	} else {
  		f.df.obj = 0
  	}
  	f.rf.bind()
  	f.df.bind()
  
  	filter := gl.NEAREST
  	if f.tex.smooth {
  		filter = gl.LINEAR
  	}
  
  	gl.BlitFramebuffer(
  		int32(sx0), int32(sy0), int32(sx1), int32(sy1),
  		int32(dx0), int32(dy0), int32(dx1), int32(dy1),
  		gl.COLOR_BUFFER_BIT, uint32(filter),
  	)
  
  	f.rf.restore()
  	f.df.restore()
  }
docs: // Blit copies rectangle (sx0, sy0, sx1, sy1) in this Frame onto rectangle (dx0, dy0, dx1, dy1) in
  // dst Frame.
  //
  // If the dst Frame is nil, the destination will be the framebuffer 0, which is the screen.
  //
  // If the sizes of the rectangles don't match, the source will be stretched to fit the destination
  // rectangle. The stretch will be either smooth or pixely according to the source Frame's
  // smoothness.