]> gitweb.factorcode.org Git - factor.git/blob - basis/opengl/framebuffers/framebuffers.factor
Updating code to use with-out-parameters
[factor.git] / basis / opengl / framebuffers / framebuffers.factor
1 ! Copyright (C) 2008 Joe Groff.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: opengl opengl.gl combinators continuations kernel
4 alien.c-types alien.data ;
5 IN: opengl.framebuffers
6
7 : gen-framebuffer ( -- id )
8     [ glGenFramebuffers ] (gen-gl-object) ;
9 : gen-renderbuffer ( -- id )
10     [ glGenRenderbuffers ] (gen-gl-object) ;
11
12 : delete-framebuffer ( id -- )
13     [ glDeleteFramebuffers ] (delete-gl-object) ;
14 : delete-renderbuffer ( id -- )
15     [ glDeleteRenderbuffers ] (delete-gl-object) ;
16
17 : framebuffer-incomplete? ( -- status/f )
18     GL_DRAW_FRAMEBUFFER glCheckFramebufferStatus
19     dup GL_FRAMEBUFFER_COMPLETE = f rot ? ;
20
21 : framebuffer-error ( status -- * )
22     { 
23         { GL_FRAMEBUFFER_COMPLETE [ "framebuffer complete" ] }
24         { GL_FRAMEBUFFER_UNSUPPORTED [ "framebuffer configuration unsupported" ] }
25         { GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT [ "framebuffer incomplete (incomplete attachment)" ] }
26         { GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT [ "framebuffer incomplete (missing attachment)" ] }
27         { GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT [ "framebuffer incomplete (dimension mismatch)" ] }
28         { GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT [ "framebuffer incomplete (format mismatch)" ] }
29         { GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER [ "framebuffer incomplete (draw buffer(s) have no attachment)" ] }
30         { GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER [ "framebuffer incomplete (read buffer has no attachment)" ] }
31         { GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE [ "framebuffer incomplete (multisample counts don't match)" ] }
32         [ drop gl-error "unknown framebuffer error" ]
33     } case throw ;
34
35 : check-framebuffer ( -- )
36     framebuffer-incomplete? [ framebuffer-error ] when* ;
37
38 : with-framebuffer ( id quot -- )
39     [ GL_DRAW_FRAMEBUFFER swap glBindFramebuffer ] dip
40     [ GL_DRAW_FRAMEBUFFER 0 glBindFramebuffer ] [ ] cleanup ; inline
41
42 : with-draw-read-framebuffers ( draw-id read-id quot -- )
43     [
44         [ GL_DRAW_FRAMEBUFFER swap glBindFramebuffer ]
45         [ GL_READ_FRAMEBUFFER swap glBindFramebuffer ] bi*
46     ] dip
47     [ 
48         GL_DRAW_FRAMEBUFFER 0 glBindFramebuffer
49         GL_READ_FRAMEBUFFER 0 glBindFramebuffer
50     ] [ ] cleanup ; inline
51
52 : framebuffer-attachment ( attachment -- id )
53     GL_FRAMEBUFFER swap GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME
54     { uint } [ glGetFramebufferAttachmentParameteriv ] [ ] with-out-parameters ;