copy-framebuffer ( to-fb-rect: framebuffer-rect from-fb-rect: framebuffer-rect depth? stencil? filter: texture-filter -- ) (original) (raw)

Vocabulary
gpu.framebuffers

Inputs

to-fb-rect a framebuffer-rect
from-fb-rect a framebuffer-rect
depth? a boolean
stencil? a boolean
filter a texture-filter

Outputs
None

Word description
Copies the rectangular region from-fb-rect to to-fb-rect. If depth? is true, depth values are also copied, and if stencil? is true, so are stencil values. If the rectangle sizes do not match, the region is scaled using nearest-neighbor or linear filtering based on filter.

Notes
This word requires OpenGL 3.0 or one of the GL_ARB_framebuffer_object or GL_EXT_framebuffer_blit extensions.

Definition

USING: accessors gpu.framebuffers.private gpu.textures.private
kernel math math.rectangles opengl.gl sequences typed ;

IN: gpu.framebuffers

TYPED:: copy-framebuffer
( to-fb-rect: framebuffer-rect from-fb-rect: framebuffer-rect depth? stencil? filter: texture-filter -- )
GL_DRAW_FRAMEBUFFER to-fb-rect framebuffer>>
framebuffer-handle glBindFramebuffer to-fb-rect
[ framebuffer>> ] [ attachment>> ] bi gl-attachment
glDrawBuffer
GL_READ_FRAMEBUFFER from-fb-rect framebuffer>>
framebuffer-handle glBindFramebuffer from-fb-rect
[ framebuffer>> ] [ attachment>> ] bi gl-attachment
glReadBuffer to-fb-rect attachment>>
[ GL_COLOR_BUFFER_BIT ] [ 0 ] if depth?
[ GL_DEPTH_BUFFER_BIT bitor ] when stencil?
[ GL_STENCIL_BUFFER_BIT bitor ] when
:> mask from-fb-rect rect>> rect-extent [ first2 ] bi@
to-fb-rect rect>> rect-extent [ first2 ] bi@
mask filter gl-mag-filter glBlitFramebuffer ;