1 ! Copyright (C) 2009 Joe Groff.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors alien.data.map destructors grouping kernel math
4 math.vectors.simd opengl opengl.gl ranges sequences
6 FROM: alien.c-types => float ;
7 SPECIALIZED-ARRAY: float-4
10 TUPLE: grid-mesh dim buffer row-length ;
14 : vertex-array-row ( range z0 z1 -- vertices )
15 '[ _ _ [ 0.0 swap 1.0 float-4-boa ] bi-curry@ bi ]
16 data-map( object -- float-4[2] ) ; inline
18 : vertex-array ( dim -- vertices )
19 first2 [ [ 0.0 1.0 1.0 ] dip /f <range> ] bi@
20 2 <clumps> [ first2 vertex-array-row ] with map concat ;
22 : >vertex-buffer ( bytes -- buffer )
23 [ GL_ARRAY_BUFFER ] dip GL_STATIC_DRAW <gl-buffer> ; inline
25 : draw-vertex-buffer-row ( grid-mesh i -- )
26 swap [ GL_TRIANGLE_STRIP ] 2dip
27 row-length>> [ * ] keep
32 : draw-grid-mesh ( grid-mesh -- )
33 GL_ARRAY_BUFFER over buffer>> [
34 [ 4 GL_FLOAT 0 f glVertexPointer ] dip
35 dup dim>> second <iota> [ draw-vertex-buffer-row ] with each
38 : <grid-mesh> ( dim -- grid-mesh )
39 [ ] [ vertex-array >vertex-buffer ] [ first 1 + 2 * ] tri
43 [ [ delete-gl-buffer ] when* f ] change-buffer