1 ! (c)2009 Joe Groff bsd license
2 USING: accessors arrays destructors kernel math opengl
3 opengl.gl sequences sequences.product specialized-arrays ;
4 SPECIALIZED-ARRAY: float
7 TUPLE: grid-mesh dim buffer row-length ;
11 : vertex-array-vertex ( dim x z -- vertex )
13 [ swap second /f ] bi-curry* bi
14 [ 0 ] dip float-array{ } 3sequence ;
16 : vertex-array-row ( dim z -- vertices )
19 2array [ first2 swap vertex-array-vertex ] with product-map
22 : vertex-array ( dim -- vertices )
24 [ vertex-array-row ] with map concat ;
26 : >vertex-buffer ( bytes -- buffer )
27 [ GL_ARRAY_BUFFER ] dip GL_STATIC_DRAW <gl-buffer> ;
29 : draw-vertex-buffer-row ( grid-mesh i -- )
30 swap [ GL_TRIANGLE_STRIP ] 2dip
31 row-length>> [ * ] keep
36 : draw-grid-mesh ( grid-mesh -- )
37 GL_ARRAY_BUFFER over buffer>> [
38 [ 3 GL_FLOAT 0 f glVertexPointer ] dip
39 dup dim>> second iota [ draw-vertex-buffer-row ] with each
42 : <grid-mesh> ( dim -- grid-mesh )
43 [ ] [ vertex-array >vertex-buffer ] [ first 1 + 2 * ] tri
47 [ [ delete-gl-buffer ] when* f ] change-buffer