diff --git a/extra/bunny/bunny.factor b/extra/bunny/bunny.factor index 6efa739677..5c2404ec84 100755 --- a/extra/bunny/bunny.factor +++ b/extra/bunny/bunny.factor @@ -13,7 +13,7 @@ TUPLE: bunny-gadget model geom draw-seq draw-n ; 0.0 0.0 0.375 maybe-download read-model { set-delegate - set-bunny-gadget-model + (>>model) } bunny-gadget construct ; : bunny-gadget-draw ( gadget -- draw ) diff --git a/extra/bunny/cel-shaded/cel-shaded.factor b/extra/bunny/cel-shaded/cel-shaded.factor index d4f0b7612d..08bea0515b 100644 --- a/extra/bunny/cel-shaded/cel-shaded.factor +++ b/extra/bunny/cel-shaded/cel-shaded.factor @@ -1,5 +1,5 @@ USING: arrays bunny.model continuations kernel multiline opengl opengl.shaders - opengl.capabilities opengl.gl sequences sequences.lib ; + opengl.capabilities opengl.gl sequences sequences.lib accessors ; IN: bunny.cel-shaded STRING: vertex-shader-source @@ -68,11 +68,12 @@ TUPLE: bunny-cel-shaded program ; : ( gadget -- draw ) drop cel-shading-supported? [ + bunny-cel-shaded new vertex-shader-source check-gl-shader cel-shaded-fragment-shader-lib-source check-gl-shader cel-shaded-fragment-shader-main-source check-gl-shader 3array check-gl-program - { set-bunny-cel-shaded-program } bunny-cel-shaded construct + >>program ] [ f ] if ; : (draw-cel-shaded-bunny) ( geom program -- ) @@ -85,8 +86,8 @@ TUPLE: bunny-cel-shaded program ; } [ bunny-geom ] with-gl-program ; M: bunny-cel-shaded draw-bunny - bunny-cel-shaded-program (draw-cel-shaded-bunny) ; + program>> (draw-cel-shaded-bunny) ; M: bunny-cel-shaded dispose - bunny-cel-shaded-program delete-gl-program ; + program>> delete-gl-program ; diff --git a/extra/bunny/fixed-pipeline/fixed-pipeline.factor b/extra/bunny/fixed-pipeline/fixed-pipeline.factor index f3fb68e515..bf0fc45f0f 100644 --- a/extra/bunny/fixed-pipeline/fixed-pipeline.factor +++ b/extra/bunny/fixed-pipeline/fixed-pipeline.factor @@ -6,7 +6,7 @@ TUPLE: bunny-fixed-pipeline ; : ( gadget -- draw ) drop - { } bunny-fixed-pipeline construct ; + bunny-fixed-pipeline new ; M: bunny-fixed-pipeline draw-bunny drop diff --git a/extra/bunny/model/model.factor b/extra/bunny/model/model.factor index 897a30c417..9598b8b03b 100755 --- a/extra/bunny/model/model.factor +++ b/extra/bunny/model/model.factor @@ -2,7 +2,7 @@ USING: alien alien.c-types arrays sequences math math.vectors math.matrices math.parser io io.files kernel opengl opengl.gl opengl.glu io.encodings.ascii opengl.capabilities shuffle http.client vectors splitting tools.time system combinators -float-arrays continuations namespaces sequences.lib ; +float-arrays continuations namespaces sequences.lib accessors ; IN: bunny.model : numbers ( str -- seq ) @@ -85,24 +85,24 @@ M: bunny-dlist bunny-geom bunny-dlist-list glCallList ; M: bunny-buffers bunny-geom - dup { - bunny-buffers-array - bunny-buffers-element-array - } get-slots [ + dup { array>> element-array>> } get-slots [ { GL_VERTEX_ARRAY GL_NORMAL_ARRAY } [ GL_DOUBLE 0 0 buffer-offset glNormalPointer - dup bunny-buffers-nv "double" heap-size * buffer-offset - 3 GL_DOUBLE 0 roll glVertexPointer - bunny-buffers-ni - GL_TRIANGLES swap GL_UNSIGNED_INT 0 buffer-offset glDrawElements + [ + nv>> "double" heap-size * buffer-offset + 3 GL_DOUBLE 0 roll glVertexPointer + ] [ + ni>> + GL_TRIANGLES swap GL_UNSIGNED_INT 0 buffer-offset glDrawElements + ] bi ] all-enabled-client-state ] with-array-element-buffers ; M: bunny-dlist dispose - bunny-dlist-list delete-dlist ; + list>> delete-dlist ; M: bunny-buffers dispose - { bunny-buffers-array bunny-buffers-element-array } get-slots + { array>> element-array>> } get-slots delete-gl-buffer delete-gl-buffer ; : ( model -- geom ) diff --git a/extra/bunny/outlined/outlined.factor b/extra/bunny/outlined/outlined.factor index 9c4e8b22a2..fef57d95d2 100755 --- a/extra/bunny/outlined/outlined.factor +++ b/extra/bunny/outlined/outlined.factor @@ -1,6 +1,7 @@ USING: arrays bunny.model bunny.cel-shaded continuations kernel math multiline opengl opengl.shaders opengl.framebuffers -opengl.gl opengl.capabilities sequences ui.gadgets combinators ; +opengl.gl opengl.capabilities sequences ui.gadgets combinators +accessors ; IN: bunny.outlined STRING: outlined-pass1-fragment-shader-main-source @@ -139,9 +140,9 @@ TUPLE: bunny-outlined : ( gadget -- draw ) outlining-supported? [ pass1-program pass2-program { - set-bunny-outlined-gadget - set-bunny-outlined-pass1-program - set-bunny-outlined-pass2-program + (>>gadget) + (>>pass1-program) + (>>pass2-program) } bunny-outlined construct ] [ drop f ] if ; @@ -169,34 +170,33 @@ TUPLE: bunny-outlined ] with-framebuffer ; : dispose-framebuffer ( draw -- ) - dup bunny-outlined-framebuffer-dim [ + dup framebuffer-dim>> [ { - [ bunny-outlined-framebuffer [ delete-framebuffer ] when* ] - [ bunny-outlined-color-texture [ delete-texture ] when* ] - [ bunny-outlined-normal-texture [ delete-texture ] when* ] - [ bunny-outlined-depth-texture [ delete-texture ] when* ] - [ f swap set-bunny-outlined-framebuffer-dim ] + [ framebuffer>> [ delete-framebuffer ] when* ] + [ color-texture>> [ delete-texture ] when* ] + [ normal-texture>> [ delete-texture ] when* ] + [ depth-texture>> [ delete-texture ] when* ] + [ f >>framebuffer-dim drop ] } cleave ] [ drop ] if ; : remake-framebuffer-if-needed ( draw -- ) - dup bunny-outlined-gadget rect-dim - over bunny-outlined-framebuffer-dim + dup [ gadget>> dim>> ] [ framebuffer-dim>> ] bi over = [ 2drop ] [ - swap dup dispose-framebuffer >r - dup GL_RGBA16F_ARB GL_RGBA (framebuffer-texture) - swap dup GL_RGBA16F_ARB GL_RGBA (framebuffer-texture) - swap dup GL_DEPTH_COMPONENT32 GL_DEPTH_COMPONENT (framebuffer-texture) - swap >r - [ (make-framebuffer) ] 3keep - r> r> { - set-bunny-outlined-framebuffer - set-bunny-outlined-color-texture - set-bunny-outlined-normal-texture - set-bunny-outlined-depth-texture - set-bunny-outlined-framebuffer-dim - } set-slots + [ dup dispose-framebuffer dup ] dip { + [ + 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 drop ] if ; : clear-framebuffer ( -- ) @@ -208,23 +208,27 @@ TUPLE: bunny-outlined GL_COLOR_BUFFER_BIT glClear ; : (pass1) ( geom draw -- ) - dup bunny-outlined-framebuffer [ + dup framebuffer>> [ clear-framebuffer { GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT } set-draw-buffers - bunny-outlined-pass1-program (draw-cel-shaded-bunny) + pass1-program>> (draw-cel-shaded-bunny) ] with-framebuffer ; : (pass2) ( draw -- ) - init-matrices - dup bunny-outlined-color-texture GL_TEXTURE_2D GL_TEXTURE0 bind-texture-unit - dup bunny-outlined-normal-texture GL_TEXTURE_2D GL_TEXTURE1 bind-texture-unit - dup bunny-outlined-depth-texture GL_TEXTURE_2D GL_TEXTURE2 bind-texture-unit - bunny-outlined-pass2-program { - { "colormap" [ 0 glUniform1i ] } - { "normalmap" [ 1 glUniform1i ] } - { "depthmap" [ 2 glUniform1i ] } - { "line_color" [ 0.1 0.0 0.1 1.0 glUniform4f ] } - } [ { -1.0 -1.0 } { 1.0 1.0 } rect-vertices ] with-gl-program ; + init-matrices { + [ color-texture>> GL_TEXTURE_2D GL_TEXTURE0 bind-texture-unit ] + [ normal-texture>> GL_TEXTURE_2D GL_TEXTURE1 bind-texture-unit ] + [ depth-texture>> GL_TEXTURE_2D GL_TEXTURE2 bind-texture-unit ] + [ + pass2-program>> { + { "colormap" [ 0 glUniform1i ] } + { "normalmap" [ 1 glUniform1i ] } + { "depthmap" [ 2 glUniform1i ] } + { "line_color" [ 0.1 0.0 0.1 1.0 glUniform4f ] } + } [ { -1.0 -1.0 } { 1.0 1.0 } rect-vertices ] + with-gl-program + ] + } cleave ; M: bunny-outlined draw-bunny [ remake-framebuffer-if-needed ] @@ -232,6 +236,6 @@ M: bunny-outlined draw-bunny [ (pass2) ] tri ; M: bunny-outlined dispose - [ bunny-outlined-pass1-program [ delete-gl-program ] when* ] - [ bunny-outlined-pass2-program [ delete-gl-program ] when* ] + [ pass1-program>> [ delete-gl-program ] when* ] + [ pass2-program>> [ delete-gl-program ] when* ] [ dispose-framebuffer ] tri ;