Merge branch 'master' of git://repo.or.cz/factor/jcg
commit
c4a2228dfc
|
@ -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
|
||||||
|
|
|
@ -5,7 +5,7 @@ IN: opengl.demo-support
|
||||||
|
|
||||||
: FOV 2.0 sqrt 1+ ; inline
|
: FOV 2.0 sqrt 1+ ; inline
|
||||||
: MOUSE-MOTION-SCALE 0.5 ; inline
|
: MOUSE-MOTION-SCALE 0.5 ; inline
|
||||||
: KEY-ROTATE-STEP 1.0 ; inline
|
: KEY-ROTATE-STEP 10.0 ; inline
|
||||||
|
|
||||||
SYMBOL: last-drag-loc
|
SYMBOL: last-drag-loc
|
||||||
|
|
||||||
|
|
|
@ -113,7 +113,7 @@ main()
|
||||||
TUPLE: spheres-gadget < demo-gadget
|
TUPLE: spheres-gadget < demo-gadget
|
||||||
plane-program solid-sphere-program texture-sphere-program
|
plane-program solid-sphere-program texture-sphere-program
|
||||||
reflection-framebuffer reflection-depthbuffer
|
reflection-framebuffer reflection-depthbuffer
|
||||||
reflection-texture ;
|
reflection-texture initialized? ;
|
||||||
|
|
||||||
: <spheres-gadget> ( -- gadget )
|
: <spheres-gadget> ( -- gadget )
|
||||||
20.0 10.0 20.0 spheres-gadget new-demo-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-texture) >>reflection-texture
|
||||||
(make-reflection-depthbuffer) [ >>reflection-depthbuffer ] keep
|
(make-reflection-depthbuffer) [ >>reflection-depthbuffer ] keep
|
||||||
(make-reflection-framebuffer) >>reflection-framebuffer
|
(make-reflection-framebuffer) >>reflection-framebuffer
|
||||||
|
t >>initialized?
|
||||||
drop ;
|
drop ;
|
||||||
|
|
||||||
M: spheres-gadget ungraft* ( gadget -- )
|
M: spheres-gadget ungraft* ( gadget -- )
|
||||||
|
f >>initialized?
|
||||||
dup find-gl-context
|
dup find-gl-context
|
||||||
{
|
{
|
||||||
[ reflection-framebuffer>> [ delete-framebuffer ] when* ]
|
[ reflection-framebuffer>> [ delete-framebuffer ] when* ]
|
||||||
|
@ -238,9 +240,8 @@ M: spheres-gadget pref-dim* ( gadget -- dim )
|
||||||
] bi ;
|
] bi ;
|
||||||
|
|
||||||
: reflection-frustum ( gadget -- -x x -y y near far )
|
: reflection-frustum ( gadget -- -x x -y y near far )
|
||||||
[ near-plane ] [ far-plane ] bi [
|
[ near-plane ] [ far-plane ] bi
|
||||||
drop dup [ -+ ] bi@
|
[ drop dup [ -+ ] bi@ ] 2keep ;
|
||||||
] 2keep ;
|
|
||||||
|
|
||||||
: (reflection-face) ( gadget face -- )
|
: (reflection-face) ( gadget face -- )
|
||||||
swap reflection-texture>> >r >r
|
swap reflection-texture>> >r >r
|
||||||
|
@ -280,7 +281,7 @@ M: spheres-gadget pref-dim* ( gadget -- dim )
|
||||||
[ dim>> 0 0 rot first2 glViewport ]
|
[ dim>> 0 0 rot first2 glViewport ]
|
||||||
} cleave ] with-framebuffer ;
|
} cleave ] with-framebuffer ;
|
||||||
|
|
||||||
M: spheres-gadget draw-gadget* ( gadget -- )
|
: (draw-gadget) ( gadget -- )
|
||||||
GL_DEPTH_TEST glEnable
|
GL_DEPTH_TEST glEnable
|
||||||
GL_SCISSOR_TEST glDisable
|
GL_SCISSOR_TEST glDisable
|
||||||
0.15 0.15 1.0 1.0 glClearColor {
|
0.15 0.15 1.0 1.0 glClearColor {
|
||||||
|
@ -297,6 +298,9 @@ M: spheres-gadget draw-gadget* ( gadget -- )
|
||||||
]
|
]
|
||||||
} cleave ;
|
} cleave ;
|
||||||
|
|
||||||
|
M: spheres-gadget draw-gadget* ( gadget -- )
|
||||||
|
dup initialized?>> [ (draw-gadget) ] [ drop ] if ;
|
||||||
|
|
||||||
: spheres-window ( -- )
|
: spheres-window ( -- )
|
||||||
[ <spheres-gadget> "Spheres" open-window ] with-ui ;
|
[ <spheres-gadget> "Spheres" open-window ] with-ui ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue