]> gitweb.factorcode.org Git - factor.git/blob - extra/bunny/bunny.factor
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / extra / bunny / bunny.factor
1 USING: accessors arrays bunny.cel-shaded bunny.fixed-pipeline
2 bunny.model bunny.outlined destructors kernel math opengl.demo-support
3 opengl.gl sequences ui ui.gadgets ui.gestures ui.render words ;
4 IN: bunny
5
6 TUPLE: bunny-gadget < demo-gadget model-triangles geom draw-seq draw-n ;
7
8 : <bunny-gadget> ( -- bunny-gadget )
9     0.0 0.0 0.375 bunny-gadget new-demo-gadget
10     maybe-download read-model >>model-triangles ;
11
12 : bunny-gadget-draw ( gadget -- draw )
13     [ draw-n>> ] [ draw-seq>> ] bi nth ;
14
15 : bunny-gadget-next-draw ( gadget -- )
16     dup [ draw-seq>> ] [ draw-n>> ] bi
17     1+ swap length mod
18     >>draw-n relayout-1 ;
19
20 M: bunny-gadget graft* ( gadget -- )
21     GL_DEPTH_TEST glEnable
22     dup model-triangles>> <bunny-geom> >>geom
23     dup
24     [ <bunny-fixed-pipeline> ]
25     [ <bunny-cel-shaded> ]
26     [ <bunny-outlined> ] tri 3array
27     sift >>draw-seq
28     0 >>draw-n
29     drop ;
30
31 M: bunny-gadget ungraft* ( gadget -- )
32     [ geom>> [ dispose ] when* ]
33     [ draw-seq>> [ [ dispose ] when* ] each ] bi ;
34
35 M: bunny-gadget draw-gadget* ( gadget -- )
36     dup draw-seq>> empty? [ drop ] [
37         0.15 0.15 0.15 1.0 glClearColor
38         GL_DEPTH_BUFFER_BIT GL_COLOR_BUFFER_BIT bitor glClear
39         dup demo-gadget-set-matrices
40         GL_MODELVIEW glMatrixMode
41         0.02 -0.105 0.0 glTranslatef
42         [ geom>> ] [ bunny-gadget-draw ] bi draw-bunny
43     ] if ;
44
45 M: bunny-gadget pref-dim* ( gadget -- dim )
46     drop { 640 480 } ;
47     
48 bunny-gadget H{
49     { T{ key-down f f "TAB" } [ bunny-gadget-next-draw ] }
50 } set-gestures
51
52 : bunny-window ( -- )
53     [ <bunny-gadget> "Bunny" open-window ] with-ui ;
54
55 MAIN: bunny-window