! (c)2009 Joe Groff bsd license USING: accessors arrays destructors kernel math opengl opengl.gl sequences sequences.product specialized-arrays ; FROM: alien.c-types => float ; SPECIALIZED-ARRAY: float IN: grid-meshes TUPLE: grid-mesh dim buffer row-length ; vertex-buffer ( bytes -- buffer ) [ GL_ARRAY_BUFFER ] dip GL_STATIC_DRAW ; : draw-vertex-buffer-row ( grid-mesh i -- ) swap [ GL_TRIANGLE_STRIP ] 2dip row-length>> [ * ] keep glDrawArrays ; PRIVATE> : draw-grid-mesh ( grid-mesh -- ) GL_ARRAY_BUFFER over buffer>> [ [ 3 GL_FLOAT 0 f glVertexPointer ] dip dup dim>> second iota [ draw-vertex-buffer-row ] with each ] with-gl-buffer ; : ( dim -- grid-mesh ) [ ] [ vertex-array >vertex-buffer ] [ first 1 + 2 * ] tri grid-mesh boa ; M: grid-mesh dispose [ [ delete-gl-buffer ] when* f ] change-buffer drop ;