diff --git a/extra/spheres/spheres.factor b/extra/spheres/spheres.factor index 7a0c0d2e77..543c26ae14 100755 --- a/extra/spheres/spheres.factor +++ b/extra/spheres/spheres.factor @@ -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? ; : ( -- 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" open-window ] with-ui ;