From 2ae8edeb9d800992617a7a059cc3d300d7440cb4 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Fri, 16 Oct 2009 15:57:38 -0500 Subject: [PATCH] improve grid-mesh generation performance --- extra/grid-meshes/grid-meshes.factor | 34 +++++++++++++--------------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/extra/grid-meshes/grid-meshes.factor b/extra/grid-meshes/grid-meshes.factor index 4eaa702468..9a9fd91a64 100644 --- a/extra/grid-meshes/grid-meshes.factor +++ b/extra/grid-meshes/grid-meshes.factor @@ -1,31 +1,26 @@ ! (c)2009 Joe Groff bsd license -USING: accessors arrays destructors kernel math opengl -opengl.gl sequences sequences.product specialized-arrays ; +USING: accessors alien.data.map arrays destructors fry grouping +kernel math math.ranges math.vectors.simd opengl opengl.gl sequences +sequences.product specialized-arrays ; FROM: alien.c-types => float ; -SPECIALIZED-ARRAY: float +SIMD: 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 ; + [ GL_ARRAY_BUFFER ] dip GL_STATIC_DRAW ; inline : draw-vertex-buffer-row ( grid-mesh i -- ) swap [ GL_TRIANGLE_STRIP ] 2dip @@ -36,13 +31,16 @@ PRIVATE> : draw-grid-mesh ( grid-mesh -- ) GL_ARRAY_BUFFER over buffer>> [ - [ 3 GL_FLOAT 0 f glVertexPointer ] dip + [ 4 GL_FLOAT 0 f glVertexPointer ] dip dup dim>> second iota [ draw-vertex-buffer-row ] with each ] with-gl-buffer ; +USE: tools.time : ( dim -- grid-mesh ) + [ [ ] [ vertex-array >vertex-buffer ] [ first 1 + 2 * ] tri - grid-mesh boa ; + grid-mesh boa + ] time ; M: grid-mesh dispose [ [ delete-gl-buffer ] when* f ] change-buffer