fix bunny/outlined framebuffer refresh bug and put some lipstick on it

db4
Joe Groff 2008-12-08 12:24:36 -08:00
parent c3ca5a8191
commit eb4a6cbe7d
1 changed files with 25 additions and 18 deletions

View File

@ -1,7 +1,8 @@
USING: arrays bunny.model bunny.cel-shaded continuations USING: arrays bunny.model bunny.cel-shaded continuations
destructors kernel math multiline opengl opengl.shaders destructors kernel math multiline opengl opengl.shaders
opengl.framebuffers opengl.gl opengl.demo-support opengl.framebuffers opengl.gl opengl.demo-support fry
opengl.capabilities sequences ui.gadgets combinators accessors ; opengl.capabilities sequences ui.gadgets combinators accessors
macros ;
IN: bunny.outlined IN: bunny.outlined
STRING: outlined-pass1-fragment-shader-main-source STRING: outlined-pass1-fragment-shader-main-source
@ -176,24 +177,30 @@ TUPLE: bunny-outlined
} cleave } cleave
] [ drop ] if ; ] [ drop ] if ;
MACRO: (framebuffer-texture>>draw) ( iformat xformat setter -- )
'[ _ _ (framebuffer-texture) [ @ drop ] keep ] ;
: (make-framebuffer-textures) ( draw dim -- draw color normal depth )
{
[ drop ]
[ GL_RGBA16F_ARB GL_RGBA [ >>color-texture ] (framebuffer-texture>>draw) ]
[ GL_RGBA16F_ARB GL_RGBA [ >>normal-texture ] (framebuffer-texture>>draw) ]
[
GL_DEPTH_COMPONENT32 GL_DEPTH_COMPONENT
[ >>depth-texture ] (framebuffer-texture>>draw)
]
} 2cleave ;
: remake-framebuffer ( draw -- )
[ dispose-framebuffer ]
[ dup gadget>> dim>>
[ (make-framebuffer-textures) (make-framebuffer) >>framebuffer ]
[ >>framebuffer-dim drop ] bi
] bi ;
: remake-framebuffer-if-needed ( draw -- ) : remake-framebuffer-if-needed ( draw -- )
dup [ gadget>> dim>> ] [ framebuffer-dim>> ] bi = dup [ gadget>> dim>> ] [ framebuffer-dim>> ] bi =
[ drop ] [ [ drop ] [ remake-framebuffer ] if ;
[ dispose-framebuffer ] [ dup ] [ gadget>> dim>> ] tri {
[
GL_RGBA16F_ARB GL_RGBA (framebuffer-texture)
[ >>color-texture drop ] keep
] [
GL_RGBA16F_ARB GL_RGBA (framebuffer-texture)
[ >>normal-texture drop ] keep
] [
GL_DEPTH_COMPONENT32 GL_DEPTH_COMPONENT (framebuffer-texture)
[ >>depth-texture drop ] keep
]
} 2cleave
[ (make-framebuffer) >>framebuffer ] [ >>framebuffer-dim ] bi
drop
] if ;
: clear-framebuffer ( -- ) : clear-framebuffer ( -- )
GL_COLOR_ATTACHMENT0_EXT glDrawBuffer GL_COLOR_ATTACHMENT0_EXT glDrawBuffer