Modernize the bunny demo code

db4
Joe Groff 2008-04-21 21:14:38 -07:00
parent e68f0848c2
commit 07b91613e4
5 changed files with 61 additions and 56 deletions

View File

@ -13,7 +13,7 @@ TUPLE: bunny-gadget model geom draw-seq draw-n ;
0.0 0.0 0.375 <demo-gadget> 0.0 0.0 0.375 <demo-gadget>
maybe-download read-model { maybe-download read-model {
set-delegate set-delegate
set-bunny-gadget-model (>>model)
} bunny-gadget construct ; } bunny-gadget construct ;
: bunny-gadget-draw ( gadget -- draw ) : bunny-gadget-draw ( gadget -- draw )

View File

@ -1,5 +1,5 @@
USING: arrays bunny.model continuations kernel multiline opengl opengl.shaders 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 IN: bunny.cel-shaded
STRING: vertex-shader-source STRING: vertex-shader-source
@ -68,11 +68,12 @@ TUPLE: bunny-cel-shaded program ;
: <bunny-cel-shaded> ( gadget -- draw ) : <bunny-cel-shaded> ( gadget -- draw )
drop drop
cel-shading-supported? [ cel-shading-supported? [
bunny-cel-shaded new
vertex-shader-source <vertex-shader> check-gl-shader vertex-shader-source <vertex-shader> check-gl-shader
cel-shaded-fragment-shader-lib-source <fragment-shader> check-gl-shader cel-shaded-fragment-shader-lib-source <fragment-shader> check-gl-shader
cel-shaded-fragment-shader-main-source <fragment-shader> check-gl-shader cel-shaded-fragment-shader-main-source <fragment-shader> check-gl-shader
3array <gl-program> check-gl-program 3array <gl-program> check-gl-program
{ set-bunny-cel-shaded-program } bunny-cel-shaded construct >>program
] [ f ] if ; ] [ f ] if ;
: (draw-cel-shaded-bunny) ( geom program -- ) : (draw-cel-shaded-bunny) ( geom program -- )
@ -85,8 +86,8 @@ TUPLE: bunny-cel-shaded program ;
} [ bunny-geom ] with-gl-program ; } [ bunny-geom ] with-gl-program ;
M: bunny-cel-shaded draw-bunny M: bunny-cel-shaded draw-bunny
bunny-cel-shaded-program (draw-cel-shaded-bunny) ; program>> (draw-cel-shaded-bunny) ;
M: bunny-cel-shaded dispose M: bunny-cel-shaded dispose
bunny-cel-shaded-program delete-gl-program ; program>> delete-gl-program ;

View File

@ -6,7 +6,7 @@ TUPLE: bunny-fixed-pipeline ;
: <bunny-fixed-pipeline> ( gadget -- draw ) : <bunny-fixed-pipeline> ( gadget -- draw )
drop drop
{ } bunny-fixed-pipeline construct ; bunny-fixed-pipeline new ;
M: bunny-fixed-pipeline draw-bunny M: bunny-fixed-pipeline draw-bunny
drop drop

View File

@ -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 math.matrices math.parser io io.files kernel opengl opengl.gl
opengl.glu io.encodings.ascii opengl.capabilities shuffle opengl.glu io.encodings.ascii opengl.capabilities shuffle
http.client vectors splitting tools.time system combinators http.client vectors splitting tools.time system combinators
float-arrays continuations namespaces sequences.lib ; float-arrays continuations namespaces sequences.lib accessors ;
IN: bunny.model IN: bunny.model
: numbers ( str -- seq ) : numbers ( str -- seq )
@ -85,24 +85,24 @@ M: bunny-dlist bunny-geom
bunny-dlist-list glCallList ; bunny-dlist-list glCallList ;
M: bunny-buffers bunny-geom M: bunny-buffers bunny-geom
dup { dup { array>> element-array>> } get-slots [
bunny-buffers-array
bunny-buffers-element-array
} get-slots [
{ GL_VERTEX_ARRAY GL_NORMAL_ARRAY } [ { GL_VERTEX_ARRAY GL_NORMAL_ARRAY } [
GL_DOUBLE 0 0 buffer-offset glNormalPointer GL_DOUBLE 0 0 buffer-offset glNormalPointer
dup bunny-buffers-nv "double" heap-size * buffer-offset [
nv>> "double" heap-size * buffer-offset
3 GL_DOUBLE 0 roll glVertexPointer 3 GL_DOUBLE 0 roll glVertexPointer
bunny-buffers-ni ] [
ni>>
GL_TRIANGLES swap GL_UNSIGNED_INT 0 buffer-offset glDrawElements GL_TRIANGLES swap GL_UNSIGNED_INT 0 buffer-offset glDrawElements
] bi
] all-enabled-client-state ] all-enabled-client-state
] with-array-element-buffers ; ] with-array-element-buffers ;
M: bunny-dlist dispose M: bunny-dlist dispose
bunny-dlist-list delete-dlist ; list>> delete-dlist ;
M: bunny-buffers dispose M: bunny-buffers dispose
{ bunny-buffers-array bunny-buffers-element-array } get-slots { array>> element-array>> } get-slots
delete-gl-buffer delete-gl-buffer ; delete-gl-buffer delete-gl-buffer ;
: <bunny-geom> ( model -- geom ) : <bunny-geom> ( model -- geom )

View File

@ -1,6 +1,7 @@
USING: arrays bunny.model bunny.cel-shaded continuations kernel USING: arrays bunny.model bunny.cel-shaded continuations kernel
math multiline opengl opengl.shaders opengl.framebuffers 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 IN: bunny.outlined
STRING: outlined-pass1-fragment-shader-main-source STRING: outlined-pass1-fragment-shader-main-source
@ -139,9 +140,9 @@ TUPLE: bunny-outlined
: <bunny-outlined> ( gadget -- draw ) : <bunny-outlined> ( gadget -- draw )
outlining-supported? [ outlining-supported? [
pass1-program pass2-program { pass1-program pass2-program {
set-bunny-outlined-gadget (>>gadget)
set-bunny-outlined-pass1-program (>>pass1-program)
set-bunny-outlined-pass2-program (>>pass2-program)
} bunny-outlined construct } bunny-outlined construct
] [ drop f ] if ; ] [ drop f ] if ;
@ -169,34 +170,33 @@ TUPLE: bunny-outlined
] with-framebuffer ; ] with-framebuffer ;
: dispose-framebuffer ( draw -- ) : dispose-framebuffer ( draw -- )
dup bunny-outlined-framebuffer-dim [ dup framebuffer-dim>> [
{ {
[ bunny-outlined-framebuffer [ delete-framebuffer ] when* ] [ framebuffer>> [ delete-framebuffer ] when* ]
[ bunny-outlined-color-texture [ delete-texture ] when* ] [ color-texture>> [ delete-texture ] when* ]
[ bunny-outlined-normal-texture [ delete-texture ] when* ] [ normal-texture>> [ delete-texture ] when* ]
[ bunny-outlined-depth-texture [ delete-texture ] when* ] [ depth-texture>> [ delete-texture ] when* ]
[ f swap set-bunny-outlined-framebuffer-dim ] [ f >>framebuffer-dim drop ]
} cleave } cleave
] [ drop ] if ; ] [ drop ] if ;
: remake-framebuffer-if-needed ( draw -- ) : remake-framebuffer-if-needed ( draw -- )
dup bunny-outlined-gadget rect-dim dup [ gadget>> dim>> ] [ framebuffer-dim>> ] bi
over bunny-outlined-framebuffer-dim
over = over =
[ 2drop ] [ [ 2drop ] [
swap dup dispose-framebuffer >r [ dup dispose-framebuffer dup ] dip {
dup GL_RGBA16F_ARB GL_RGBA (framebuffer-texture) [
swap dup GL_RGBA16F_ARB GL_RGBA (framebuffer-texture) GL_RGBA16F_ARB GL_RGBA (framebuffer-texture)
swap dup GL_DEPTH_COMPONENT32 GL_DEPTH_COMPONENT (framebuffer-texture) [ >>color-texture drop ] keep
swap >r ] [
[ (make-framebuffer) ] 3keep GL_RGBA16F_ARB GL_RGBA (framebuffer-texture)
r> r> { [ >>normal-texture drop ] keep
set-bunny-outlined-framebuffer ] [
set-bunny-outlined-color-texture GL_DEPTH_COMPONENT32 GL_DEPTH_COMPONENT (framebuffer-texture)
set-bunny-outlined-normal-texture [ >>depth-texture drop ] keep
set-bunny-outlined-depth-texture ]
set-bunny-outlined-framebuffer-dim } 2cleave
} set-slots (make-framebuffer) >>framebuffer drop
] if ; ] if ;
: clear-framebuffer ( -- ) : clear-framebuffer ( -- )
@ -208,23 +208,27 @@ TUPLE: bunny-outlined
GL_COLOR_BUFFER_BIT glClear ; GL_COLOR_BUFFER_BIT glClear ;
: (pass1) ( geom draw -- ) : (pass1) ( geom draw -- )
dup bunny-outlined-framebuffer [ dup framebuffer>> [
clear-framebuffer clear-framebuffer
{ GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT } set-draw-buffers { 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 ; ] with-framebuffer ;
: (pass2) ( draw -- ) : (pass2) ( draw -- )
init-matrices init-matrices {
dup bunny-outlined-color-texture GL_TEXTURE_2D GL_TEXTURE0 bind-texture-unit [ color-texture>> GL_TEXTURE_2D GL_TEXTURE0 bind-texture-unit ]
dup bunny-outlined-normal-texture GL_TEXTURE_2D GL_TEXTURE1 bind-texture-unit [ normal-texture>> GL_TEXTURE_2D GL_TEXTURE1 bind-texture-unit ]
dup bunny-outlined-depth-texture GL_TEXTURE_2D GL_TEXTURE2 bind-texture-unit [ depth-texture>> GL_TEXTURE_2D GL_TEXTURE2 bind-texture-unit ]
bunny-outlined-pass2-program { [
pass2-program>> {
{ "colormap" [ 0 glUniform1i ] } { "colormap" [ 0 glUniform1i ] }
{ "normalmap" [ 1 glUniform1i ] } { "normalmap" [ 1 glUniform1i ] }
{ "depthmap" [ 2 glUniform1i ] } { "depthmap" [ 2 glUniform1i ] }
{ "line_color" [ 0.1 0.0 0.1 1.0 glUniform4f ] } { "line_color" [ 0.1 0.0 0.1 1.0 glUniform4f ] }
} [ { -1.0 -1.0 } { 1.0 1.0 } rect-vertices ] with-gl-program ; } [ { -1.0 -1.0 } { 1.0 1.0 } rect-vertices ]
with-gl-program
]
} cleave ;
M: bunny-outlined draw-bunny M: bunny-outlined draw-bunny
[ remake-framebuffer-if-needed ] [ remake-framebuffer-if-needed ]
@ -232,6 +236,6 @@ M: bunny-outlined draw-bunny
[ (pass2) ] tri ; [ (pass2) ] tri ;
M: bunny-outlined dispose M: bunny-outlined dispose
[ bunny-outlined-pass1-program [ delete-gl-program ] when* ] [ pass1-program>> [ delete-gl-program ] when* ]
[ bunny-outlined-pass2-program [ delete-gl-program ] when* ] [ pass2-program>> [ delete-gl-program ] when* ]
[ dispose-framebuffer ] tri ; [ dispose-framebuffer ] tri ;