update demos using GL_EXT_framebuffer_object and GL_ARB_texture_float to use suffixless opengl 3 symbol names

Joe Groff 2009-06-24 17:59:25 -05:00
parent 20fdd958e0
commit 3c6dc4c97f
7 changed files with 53 additions and 54 deletions

View File

@ -4,32 +4,32 @@ IN: opengl.framebuffers
HELP: gen-framebuffer HELP: gen-framebuffer
{ $values { "id" integer } } { $values { "id" integer } }
{ $description "Wrapper for " { $link glGenFramebuffersEXT } " to handle the common case of generating a single framebuffer ID." } ; { $description "Wrapper for " { $link glGenFramebuffers } " to handle the common case of generating a single framebuffer ID." } ;
HELP: gen-renderbuffer HELP: gen-renderbuffer
{ $values { "id" integer } } { $values { "id" integer } }
{ $description "Wrapper for " { $link glGenRenderbuffersEXT } " to handle the common case of generating a single render buffer ID." } ; { $description "Wrapper for " { $link glGenRenderbuffers } " to handle the common case of generating a single render buffer ID." } ;
HELP: delete-framebuffer HELP: delete-framebuffer
{ $values { "id" integer } } { $values { "id" integer } }
{ $description "Wrapper for " { $link glDeleteFramebuffersEXT } " to handle the common case of deleting a single framebuffer ID." } ; { $description "Wrapper for " { $link glDeleteFramebuffers } " to handle the common case of deleting a single framebuffer ID." } ;
HELP: delete-renderbuffer HELP: delete-renderbuffer
{ $values { "id" integer } } { $values { "id" integer } }
{ $description "Wrapper for " { $link glDeleteRenderbuffersEXT } " to handle the common case of deleting a single render buffer ID." } ; { $description "Wrapper for " { $link glDeleteRenderbuffers } " to handle the common case of deleting a single render buffer ID." } ;
{ gen-framebuffer delete-framebuffer } related-words { gen-framebuffer delete-framebuffer } related-words
{ gen-renderbuffer delete-renderbuffer } related-words { gen-renderbuffer delete-renderbuffer } related-words
HELP: framebuffer-incomplete? HELP: framebuffer-incomplete?
{ $values { "status/f" "The framebuffer error code, or " { $snippet "f" } " if the framebuffer is render-complete." } } { $values { "status/f" "The framebuffer error code, or " { $snippet "f" } " if the framebuffer is render-complete." } }
{ $description "Checks the framebuffer currently bound by " { $link glBindFramebufferEXT } " or " { $link with-framebuffer } " to see if it is incomplete, i.e., it is not ready to be rendered to." } ; { $description "Checks the framebuffer currently bound by " { $link glBindFramebuffer } " or " { $link with-framebuffer } " to see if it is incomplete, i.e., it is not ready to be rendered to." } ;
HELP: check-framebuffer HELP: check-framebuffer
{ $description "Checks the framebuffer currently bound by " { $link glBindFramebufferEXT } " or " { $link with-framebuffer } " with " { $link framebuffer-incomplete? } ", and throws a descriptive error if the framebuffer is incomplete." } ; { $description "Checks the framebuffer currently bound by " { $link glBindFramebuffer } " or " { $link with-framebuffer } " with " { $link framebuffer-incomplete? } ", and throws a descriptive error if the framebuffer is incomplete." } ;
HELP: with-framebuffer HELP: with-framebuffer
{ $values { "id" "The id of a framebuffer object." } { "quot" "a quotation" } } { $values { "id" "The id of a framebuffer object." } { "quot" "a quotation" } }
{ $description "Binds framebuffer " { $snippet "id" } " in the dynamic extent of " { $snippet "quot" } ", restoring the window framebuffer when finished." } ; { $description "Binds framebuffer " { $snippet "id" } " for drawing in the dynamic extent of " { $snippet "quot" } ", restoring the window framebuffer when finished." } ;
ABOUT: "gl-utilities" ABOUT: "gl-utilities"

View File

@ -5,30 +5,30 @@ alien.c-types ;
IN: opengl.framebuffers IN: opengl.framebuffers
: gen-framebuffer ( -- id ) : gen-framebuffer ( -- id )
[ glGenFramebuffersEXT ] (gen-gl-object) ; [ glGenFramebuffers ] (gen-gl-object) ;
: gen-renderbuffer ( -- id ) : gen-renderbuffer ( -- id )
[ glGenRenderbuffersEXT ] (gen-gl-object) ; [ glGenRenderbuffers ] (gen-gl-object) ;
: delete-framebuffer ( id -- ) : delete-framebuffer ( id -- )
[ glDeleteFramebuffersEXT ] (delete-gl-object) ; [ glDeleteFramebuffers ] (delete-gl-object) ;
: delete-renderbuffer ( id -- ) : delete-renderbuffer ( id -- )
[ glDeleteRenderbuffersEXT ] (delete-gl-object) ; [ glDeleteRenderbuffers ] (delete-gl-object) ;
: framebuffer-incomplete? ( -- status/f ) : framebuffer-incomplete? ( -- status/f )
GL_FRAMEBUFFER_EXT glCheckFramebufferStatusEXT GL_DRAW_FRAMEBUFFER glCheckFramebufferStatus
dup GL_FRAMEBUFFER_COMPLETE_EXT = f rot ? ; dup GL_FRAMEBUFFER_COMPLETE = f rot ? ;
: framebuffer-error ( status -- * ) : framebuffer-error ( status -- * )
{ {
{ GL_FRAMEBUFFER_COMPLETE_EXT [ "framebuffer complete" ] } { GL_FRAMEBUFFER_COMPLETE [ "framebuffer complete" ] }
{ GL_FRAMEBUFFER_UNSUPPORTED_EXT [ "framebuffer configuration unsupported" ] } { GL_FRAMEBUFFER_UNSUPPORTED [ "framebuffer configuration unsupported" ] }
{ GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT [ "framebuffer incomplete (incomplete attachment)" ] } { GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT [ "framebuffer incomplete (incomplete attachment)" ] }
{ GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT [ "framebuffer incomplete (missing attachment)" ] } { GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT [ "framebuffer incomplete (missing attachment)" ] }
{ GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT [ "framebuffer incomplete (dimension mismatch)" ] } { GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT [ "framebuffer incomplete (dimension mismatch)" ] }
{ GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT [ "framebuffer incomplete (format mismatch)" ] } { GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT [ "framebuffer incomplete (format mismatch)" ] }
{ GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT [ "framebuffer incomplete (draw buffer(s) have no attachment)" ] } { GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER [ "framebuffer incomplete (draw buffer(s) have no attachment)" ] }
{ GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT [ "framebuffer incomplete (read buffer has no attachment)" ] } { GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER [ "framebuffer incomplete (read buffer has no attachment)" ] }
{ GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT [ "framebuffer incomplete (multisample counts don't match)" ] } { GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE [ "framebuffer incomplete (multisample counts don't match)" ] }
[ drop gl-error "unknown framebuffer error" ] [ drop gl-error "unknown framebuffer error" ]
} case throw ; } case throw ;
@ -36,19 +36,19 @@ IN: opengl.framebuffers
framebuffer-incomplete? [ framebuffer-error ] when* ; framebuffer-incomplete? [ framebuffer-error ] when* ;
: with-framebuffer ( id quot -- ) : with-framebuffer ( id quot -- )
[ GL_FRAMEBUFFER_EXT swap glBindFramebufferEXT ] dip [ GL_DRAW_FRAMEBUFFER swap glBindFramebuffer ] dip
[ GL_FRAMEBUFFER_EXT 0 glBindFramebufferEXT ] [ ] cleanup ; inline [ GL_DRAW_FRAMEBUFFER 0 glBindFramebuffer ] [ ] cleanup ; inline
: with-draw-read-framebuffers ( draw-id read-id quot -- ) : with-draw-read-framebuffers ( draw-id read-id quot -- )
[ [
[ GL_DRAW_FRAMEBUFFER_EXT swap glBindFramebufferEXT ] [ GL_DRAW_FRAMEBUFFER swap glBindFramebuffer ]
[ GL_READ_FRAMEBUFFER_EXT swap glBindFramebufferEXT ] bi* [ GL_READ_FRAMEBUFFER swap glBindFramebuffer ] bi*
] dip ] dip
[ [
GL_DRAW_FRAMEBUFFER_EXT 0 glBindFramebufferEXT GL_DRAW_FRAMEBUFFER 0 glBindFramebuffer
GL_READ_FRAMEBUFFER_EXT 0 glBindFramebufferEXT GL_READ_FRAMEBUFFER 0 glBindFramebuffer
] [ ] cleanup ; inline ] [ ] cleanup ; inline
: framebuffer-attachment ( attachment -- id ) : framebuffer-attachment ( attachment -- id )
GL_FRAMEBUFFER_EXT swap GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT GL_FRAMEBUFFER swap GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME
0 <uint> [ glGetFramebufferAttachmentParameterivEXT ] keep *uint ; 0 <uint> [ glGetFramebufferAttachmentParameteriv ] keep *uint ;

View File

@ -45,7 +45,7 @@ HELP: bind-texture-unit
{ $description "Binds texture " { $snippet "id" } " to texture target " { $snippet "target" } " of texture unit " { $snippet "unit" } ". Equivalent to " { $snippet "unit glActiveTexture target id glBindTexture" } "." } ; { $description "Binds texture " { $snippet "id" } " to texture target " { $snippet "target" } " of texture unit " { $snippet "unit" } ". Equivalent to " { $snippet "unit glActiveTexture target id glBindTexture" } "." } ;
HELP: set-draw-buffers HELP: set-draw-buffers
{ $values { "buffers" "A sequence of buffer words (e.g. " { $snippet "GL_BACK" } ", " { $snippet "GL_COLOR_ATTACHMENT0_EXT" } ")"} } { $values { "buffers" "A sequence of buffer words (e.g. " { $snippet "GL_BACK" } ", " { $snippet "GL_COLOR_ATTACHMENT0" } ")"} }
{ $description "Wrapper for " { $link glDrawBuffers } ". Sets up the buffers named in the sequence for simultaneous drawing." } ; { $description "Wrapper for " { $link glDrawBuffers } ". Sets up the buffers named in the sequence for simultaneous drawing." } ;
HELP: do-attribs HELP: do-attribs

View File

@ -65,7 +65,7 @@ PREDICATE: fragment-shader < gl-shader (fragment-shader?) ;
glCreateProgram glCreateProgram
[ [
[ swap [ glAttachShader ] with each ] [ swap [ glAttachShader ] with each ]
[ swap [ first2 swap glBindFragDataLocationEXT ] with each ] bi-curry bi* [ swap [ first2 swap glBindFragDataLocation ] with each ] bi-curry bi*
] ]
[ glLinkProgram ] [ glLinkProgram ]
[ ] tri [ ] tri

View File

@ -26,14 +26,14 @@ ${ GL_RGBA8 GL_BGRA GL_UNSIGNED_BYTE }
${ GL_RGBA8 GL_BGRA GL_UNSIGNED_INT_8_8_8_8_REV } ${ GL_RGBA8 GL_BGRA GL_UNSIGNED_INT_8_8_8_8_REV }
[ ARGB ubyte-components (image-format) ] unit-test [ ARGB ubyte-components (image-format) ] unit-test
${ GL_RGBA32F_ARB GL_RGBA GL_FLOAT } ${ GL_RGBA32F GL_RGBA GL_FLOAT }
[ RGBA float-components (image-format) ] unit-test [ RGBA float-components (image-format) ] unit-test
${ GL_RGBA32UI_EXT GL_BGRA_INTEGER_EXT GL_UNSIGNED_INT } ${ GL_RGBA32UI GL_BGRA_INTEGER GL_UNSIGNED_INT }
[ BGRA uint-integer-components (image-format) ] unit-test [ BGRA uint-integer-components (image-format) ] unit-test
${ GL_RGB9_E5_EXT GL_RGB GL_UNSIGNED_INT_5_9_9_9_REV_EXT } ${ GL_RGB9_E5 GL_RGB GL_UNSIGNED_INT_5_9_9_9_REV }
[ BGR u-9-9-9-e5-components (image-format) ] unit-test [ BGR u-9-9-9-e5-components (image-format) ] unit-test
${ GL_R11F_G11F_B10F_EXT GL_RGB GL_UNSIGNED_INT_10F_11F_11F_REV_EXT } ${ GL_R11F_G11F_B10F GL_RGB GL_UNSIGNED_INT_10F_11F_11F_REV }
[ BGR float-11-11-10-components (image-format) ] unit-test [ BGR float-11-11-10-components (image-format) ] unit-test

View File

@ -120,14 +120,13 @@ TUPLE: bunny-outlined
framebuffer framebuffer-dim ; framebuffer framebuffer-dim ;
: outlining-supported? ( -- ? ) : outlining-supported? ( -- ? )
"2.0" { "3.0" {
"GL_ARB_shader_objects" "GL_ARB_shader_objects"
"GL_ARB_draw_buffers" "GL_ARB_draw_buffers"
"GL_ARB_multitexture" "GL_ARB_multitexture"
} has-gl-version-or-extensions? {
"GL_EXT_framebuffer_object" "GL_EXT_framebuffer_object"
"GL_ARB_texture_float" "GL_ARB_texture_float"
} has-gl-extensions? and ; } has-gl-version-or-extensions? ;
: pass1-program ( -- program ) : pass1-program ( -- program )
vertex-shader-source <vertex-shader> check-gl-shader vertex-shader-source <vertex-shader> check-gl-shader
@ -154,14 +153,14 @@ TUPLE: bunny-outlined
GL_TEXTURE_2D 0 iformat dim first2 0 xformat GL_UNSIGNED_BYTE f glTexImage2D ; GL_TEXTURE_2D 0 iformat dim first2 0 xformat GL_UNSIGNED_BYTE f glTexImage2D ;
:: (attach-framebuffer-texture) ( texture attachment -- ) :: (attach-framebuffer-texture) ( texture attachment -- )
GL_FRAMEBUFFER_EXT attachment GL_TEXTURE_2D texture 0 glFramebufferTexture2DEXT GL_DRAW_FRAMEBUFFER attachment GL_TEXTURE_2D texture 0 glFramebufferTexture2D
gl-error ; gl-error ;
: (make-framebuffer) ( color-texture normal-texture depth-texture -- framebuffer ) : (make-framebuffer) ( color-texture normal-texture depth-texture -- framebuffer )
3array gen-framebuffer dup [ 3array gen-framebuffer dup [
swap GL_COLOR_ATTACHMENT0_EXT swap GL_COLOR_ATTACHMENT0
GL_COLOR_ATTACHMENT1_EXT GL_COLOR_ATTACHMENT1
GL_DEPTH_ATTACHMENT_EXT 3array [ (attach-framebuffer-texture) ] 2each GL_DEPTH_ATTACHMENT 3array [ (attach-framebuffer-texture) ] 2each
check-framebuffer check-framebuffer
] with-framebuffer ; ] with-framebuffer ;
@ -182,8 +181,8 @@ MACRO: (framebuffer-texture>>draw) ( iformat xformat setter -- )
: (make-framebuffer-textures) ( draw dim -- draw color normal depth ) : (make-framebuffer-textures) ( draw dim -- draw color normal depth )
{ {
[ drop ] [ drop ]
[ GL_RGBA16F_ARB GL_RGBA [ >>color-texture ] (framebuffer-texture>>draw) ] [ GL_RGBA16F GL_RGBA [ >>color-texture ] (framebuffer-texture>>draw) ]
[ GL_RGBA16F_ARB GL_RGBA [ >>normal-texture ] (framebuffer-texture>>draw) ] [ GL_RGBA16F GL_RGBA [ >>normal-texture ] (framebuffer-texture>>draw) ]
[ [
GL_DEPTH_COMPONENT32 GL_DEPTH_COMPONENT GL_DEPTH_COMPONENT32 GL_DEPTH_COMPONENT
[ >>depth-texture ] (framebuffer-texture>>draw) [ >>depth-texture ] (framebuffer-texture>>draw)
@ -202,17 +201,17 @@ MACRO: (framebuffer-texture>>draw) ( iformat xformat setter -- )
[ drop ] [ remake-framebuffer ] if ; [ drop ] [ remake-framebuffer ] if ;
: clear-framebuffer ( -- ) : clear-framebuffer ( -- )
GL_COLOR_ATTACHMENT0_EXT glDrawBuffer GL_COLOR_ATTACHMENT0 glDrawBuffer
0.15 0.15 0.15 1.0 glClearColor 0.15 0.15 0.15 1.0 glClearColor
GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT bitor glClear GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT bitor glClear
GL_COLOR_ATTACHMENT1_EXT glDrawBuffer GL_COLOR_ATTACHMENT1 glDrawBuffer
0.0 0.0 0.0 0.0 glClearColor 0.0 0.0 0.0 0.0 glClearColor
GL_COLOR_BUFFER_BIT glClear ; GL_COLOR_BUFFER_BIT glClear ;
: (pass1) ( geom draw -- ) : (pass1) ( geom draw -- )
dup framebuffer>> [ dup framebuffer>> [
clear-framebuffer clear-framebuffer
{ GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT } set-draw-buffers { GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT1 } set-draw-buffers
pass1-program>> (draw-cel-shaded-bunny) pass1-program>> (draw-cel-shaded-bunny)
] with-framebuffer ; ] with-framebuffer ;

View File

@ -148,14 +148,14 @@ M: spheres-world distance-step
: (make-reflection-depthbuffer) ( -- depthbuffer ) : (make-reflection-depthbuffer) ( -- depthbuffer )
gen-renderbuffer [ gen-renderbuffer [
GL_RENDERBUFFER_EXT swap glBindRenderbufferEXT GL_RENDERBUFFER swap glBindRenderbuffer
GL_RENDERBUFFER_EXT GL_DEPTH_COMPONENT32 (reflection-dim) glRenderbufferStorageEXT GL_RENDERBUFFER GL_DEPTH_COMPONENT32 (reflection-dim) glRenderbufferStorage
] keep ; ] keep ;
: (make-reflection-framebuffer) ( depthbuffer -- framebuffer ) : (make-reflection-framebuffer) ( depthbuffer -- framebuffer )
gen-framebuffer dup [ gen-framebuffer dup [
swap [ GL_FRAMEBUFFER_EXT GL_DEPTH_ATTACHMENT_EXT GL_RENDERBUFFER_EXT ] dip swap [ GL_DRAW_FRAMEBUFFER GL_DEPTH_ATTACHMENT GL_RENDERBUFFER ] dip
glFramebufferRenderbufferEXT glFramebufferRenderbuffer
] with-framebuffer ; ] with-framebuffer ;
: (plane-program) ( -- program ) : (plane-program) ( -- program )
@ -244,9 +244,9 @@ M: spheres-world pref-dim*
: (reflection-face) ( gadget face -- ) : (reflection-face) ( gadget face -- )
swap reflection-texture>> [ swap reflection-texture>> [
GL_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER
GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT0
] 2dip 0 glFramebufferTexture2DEXT ] 2dip 0 glFramebufferTexture2D
check-framebuffer ; check-framebuffer ;
: (draw-reflection-texture) ( gadget -- ) : (draw-reflection-texture) ( gadget -- )