! Copyright (C) 2009 Joe Groff. ! See https://factorcode.org/license.txt for BSD license. USING: accessors alien.data.map destructors grouping kernel math math.vectors.simd opengl opengl.gl ranges sequences specialized-arrays ; FROM: alien.c-types => float ; SPECIALIZED-ARRAY: float-4 IN: grid-meshes TUPLE: grid-mesh dim buffer row-length ; ] bi@ 2 [ first2 vertex-array-row ] with map concat ; : >vertex-buffer ( bytes -- buffer ) [ GL_ARRAY_BUFFER ] dip GL_STATIC_DRAW ; inline : 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>> [ [ 4 GL_FLOAT 0 f glVertexPointer ] dip dup dim>> second [ 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 ;