1 ! (c)2009 Joe Groff bsd license
2 USING: accessors arrays destructors kernel math opengl
3 opengl.gl sequences sequences.product specialized-arrays.float ;
6 TUPLE: grid-mesh dim buffer row-length ;
10 : vertex-array-vertex ( dim x z -- vertex )
12 [ swap second /f ] bi-curry* bi
13 [ 0 ] dip float-array{ } 3sequence ;
15 : vertex-array-row ( dim z -- vertices )
18 2array [ first2 swap vertex-array-vertex ] with product-map
21 : vertex-array ( dim -- vertices )
23 [ vertex-array-row ] with map concat ;
25 : >vertex-buffer ( bytes -- buffer )
26 [ GL_ARRAY_BUFFER ] dip GL_STATIC_DRAW <gl-buffer> ;
28 : draw-vertex-buffer-row ( grid-mesh i -- )
29 swap [ GL_TRIANGLE_STRIP ] 2dip
30 row-length>> [ * ] keep
35 : draw-grid-mesh ( grid-mesh -- )
36 GL_ARRAY_BUFFER over buffer>> [
37 [ 3 GL_FLOAT 0 f glVertexPointer ] dip
38 dup dim>> second iota [ draw-vertex-buffer-row ] with each
41 : <grid-mesh> ( dim -- grid-mesh )
42 [ ] [ vertex-array >vertex-buffer ] [ first 1 + 2 * ] tri
46 [ [ delete-gl-buffer ] when* f ] change-buffer