Merge branch 'master' of git://repo.or.cz/factor/jcg

db4
Doug Coleman 2008-12-08 15:04:14 -06:00
commit c4a2228dfc
3 changed files with 35 additions and 24 deletions

View File

@ -1,7 +1,8 @@
USING: arrays bunny.model bunny.cel-shaded continuations
destructors kernel math multiline opengl opengl.shaders
opengl.framebuffers opengl.gl opengl.demo-support
opengl.capabilities sequences ui.gadgets combinators accessors ;
opengl.framebuffers opengl.gl opengl.demo-support fry
opengl.capabilities sequences ui.gadgets combinators accessors
macros ;
IN: bunny.outlined
STRING: outlined-pass1-fragment-shader-main-source
@ -176,24 +177,30 @@ TUPLE: bunny-outlined
} cleave
] [ 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 -- )
dup [ gadget>> dim>> ] [ framebuffer-dim>> ] bi =
[ drop ] [
[ 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 ;
[ drop ] [ remake-framebuffer ] if ;
: clear-framebuffer ( -- )
GL_COLOR_ATTACHMENT0_EXT glDrawBuffer

View File

@ -5,7 +5,7 @@ IN: opengl.demo-support
: FOV 2.0 sqrt 1+ ; inline
: MOUSE-MOTION-SCALE 0.5 ; inline
: KEY-ROTATE-STEP 1.0 ; inline
: KEY-ROTATE-STEP 10.0 ; inline
SYMBOL: last-drag-loc

View File

@ -113,7 +113,7 @@ main()
TUPLE: spheres-gadget < demo-gadget
plane-program solid-sphere-program texture-sphere-program
reflection-framebuffer reflection-depthbuffer
reflection-texture ;
reflection-texture initialized? ;
: <spheres-gadget> ( -- gadget )
20.0 10.0 20.0 spheres-gadget new-demo-gadget ;
@ -182,9 +182,11 @@ M: spheres-gadget graft* ( gadget -- )
(make-reflection-texture) >>reflection-texture
(make-reflection-depthbuffer) [ >>reflection-depthbuffer ] keep
(make-reflection-framebuffer) >>reflection-framebuffer
t >>initialized?
drop ;
M: spheres-gadget ungraft* ( gadget -- )
f >>initialized?
dup find-gl-context
{
[ reflection-framebuffer>> [ delete-framebuffer ] when* ]
@ -238,9 +240,8 @@ M: spheres-gadget pref-dim* ( gadget -- dim )
] bi ;
: reflection-frustum ( gadget -- -x x -y y near far )
[ near-plane ] [ far-plane ] bi [
drop dup [ -+ ] bi@
] 2keep ;
[ near-plane ] [ far-plane ] bi
[ drop dup [ -+ ] bi@ ] 2keep ;
: (reflection-face) ( gadget face -- )
swap reflection-texture>> >r >r
@ -280,7 +281,7 @@ M: spheres-gadget pref-dim* ( gadget -- dim )
[ dim>> 0 0 rot first2 glViewport ]
} cleave ] with-framebuffer ;
M: spheres-gadget draw-gadget* ( gadget -- )
: (draw-gadget) ( gadget -- )
GL_DEPTH_TEST glEnable
GL_SCISSOR_TEST glDisable
0.15 0.15 1.0 1.0 glClearColor {
@ -297,6 +298,9 @@ M: spheres-gadget draw-gadget* ( gadget -- )
]
} cleave ;
M: spheres-gadget draw-gadget* ( gadget -- )
dup initialized?>> [ (draw-gadget) ] [ drop ] if ;
: spheres-window ( -- )
[ <spheres-gadget> "Spheres" open-window ] with-ui ;