From eb4a6cbe7d514950d82f747361f7805b0f0933f6 Mon Sep 17 00:00:00 2001 From: Joe Groff 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 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? ; : ( -- 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 ; From 14940bd7aa946cb6790c7b88fab71be495524a15 Mon Sep 17 00:00:00 2001 From: Joe Groff 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