code: func NewFrame(width, height int, smooth bool) *Frame {
  	f := &Frame{
  		fb: binder{
  			restoreLoc: gl.FRAMEBUFFER_BINDING,
  			bindFunc: func(obj uint32) {
  				gl.BindFramebuffer(gl.FRAMEBUFFER, obj)
  			},
  		},
  		rf: binder{
  			restoreLoc: gl.READ_FRAMEBUFFER_BINDING,
  			bindFunc: func(obj uint32) {
  				gl.BindFramebuffer(gl.READ_FRAMEBUFFER, obj)
  			},
  		},
  		df: binder{
  			restoreLoc: gl.DRAW_FRAMEBUFFER_BINDING,
  			bindFunc: func(obj uint32) {
  				gl.BindFramebuffer(gl.DRAW_FRAMEBUFFER, obj)
  			},
  		},
  		tex: NewTexture(width, height, smooth, make([]uint8, width*height*4)),
  	}
  
  	gl.GenFramebuffers(1, &f.fb.obj)
  
  	f.fb.bind()
  	gl.FramebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, f.tex.tex.obj, 0)
  	f.fb.restore()
  
  	runtime.SetFinalizer(f, (*Frame).delete)
  
  	return f
  }
docs: // NewFrame creates a new fully transparent Frame with given dimensions in pixels.