From eb4a6cbe7d514950d82f747361f7805b0f0933f6 Mon Sep 17 00:00:00 2001
From: Joe Groff <arcata@gmail.com>
Date: Mon, 8 Dec 2008 12:24:36 -0800
Subject: [PATCH 1/3] fix bunny/outlined framebuffer refresh bug and put some
 lipstick on it

---
 extra/bunny/outlined/outlined.factor | 43 ++++++++++++++++------------
 1 file changed, 25 insertions(+), 18 deletions(-)

diff --git a/extra/bunny/outlined/outlined.factor b/extra/bunny/outlined/outlined.factor
index 6117a0fdea..3cf3f94d73 100755
--- a/extra/bunny/outlined/outlined.factor
+++ b/extra/bunny/outlined/outlined.factor
@@ -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

From 9b887c7e4c9b9081feab4dfd85d461a623281065 Mon Sep 17 00:00:00 2001
From: Joe Groff <arcata@gmail.com>
Date: Mon, 8 Dec 2008 12:51:52 -0800
Subject: [PATCH 2/3] hey spheres, don't go run off the cliff if you didn't
 initialize

---
 extra/spheres/spheres.factor | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

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? ;
 
 : <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 ;
 

From 14940bd7aa946cb6790c7b88fab71be495524a15 Mon Sep 17 00:00:00 2001
From: Joe Groff <arcata@gmail.com>
Date: Mon, 8 Dec 2008 12:55:22 -0800
Subject: [PATCH 3/3] give OpenGL demo keys a little boost

---
 extra/opengl/demo-support/demo-support.factor | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/extra/opengl/demo-support/demo-support.factor b/extra/opengl/demo-support/demo-support.factor
index cd781508a7..92778194e3 100755
--- a/extra/opengl/demo-support/demo-support.factor
+++ b/extra/opengl/demo-support/demo-support.factor
@@ -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