improve grid-mesh generation performance
parent
a0c6af5603
commit
2ae8edeb9d
|
@ -1,31 +1,26 @@
|
||||||
! (c)2009 Joe Groff bsd license
|
! (c)2009 Joe Groff bsd license
|
||||||
USING: accessors arrays destructors kernel math opengl
|
USING: accessors alien.data.map arrays destructors fry grouping
|
||||||
opengl.gl sequences sequences.product specialized-arrays ;
|
kernel math math.ranges math.vectors.simd opengl opengl.gl sequences
|
||||||
|
sequences.product specialized-arrays ;
|
||||||
FROM: alien.c-types => float ;
|
FROM: alien.c-types => float ;
|
||||||
SPECIALIZED-ARRAY: float
|
SIMD: float
|
||||||
|
SPECIALIZED-ARRAY: float-4
|
||||||
IN: grid-meshes
|
IN: grid-meshes
|
||||||
|
|
||||||
TUPLE: grid-mesh dim buffer row-length ;
|
TUPLE: grid-mesh dim buffer row-length ;
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
: vertex-array-vertex ( dim x z -- vertex )
|
: vertex-array-row ( range z0 z1 -- vertices )
|
||||||
[ swap first /f ]
|
'[ _ _ [ 0.0 swap 1.0 float-4-boa ] bi-curry@ bi ]
|
||||||
[ swap second /f ] bi-curry* bi
|
data-map( void -- float-4[2] ) ; inline
|
||||||
[ 0 ] dip float-array{ } 3sequence ;
|
|
||||||
|
|
||||||
: vertex-array-row ( dim z -- vertices )
|
|
||||||
dup 1 + 2array
|
|
||||||
over first 1 + iota
|
|
||||||
2array [ first2 swap vertex-array-vertex ] with product-map
|
|
||||||
concat ;
|
|
||||||
|
|
||||||
: vertex-array ( dim -- vertices )
|
: vertex-array ( dim -- vertices )
|
||||||
dup second iota
|
first2 [ [ 0.0 1.0 1.0 ] dip /f <range> ] bi@
|
||||||
[ vertex-array-row ] with map concat ;
|
2 <sliced-clumps> [ first2 vertex-array-row ] with map concat ;
|
||||||
|
|
||||||
: >vertex-buffer ( bytes -- buffer )
|
: >vertex-buffer ( bytes -- buffer )
|
||||||
[ GL_ARRAY_BUFFER ] dip GL_STATIC_DRAW <gl-buffer> ;
|
[ GL_ARRAY_BUFFER ] dip GL_STATIC_DRAW <gl-buffer> ; inline
|
||||||
|
|
||||||
: draw-vertex-buffer-row ( grid-mesh i -- )
|
: draw-vertex-buffer-row ( grid-mesh i -- )
|
||||||
swap [ GL_TRIANGLE_STRIP ] 2dip
|
swap [ GL_TRIANGLE_STRIP ] 2dip
|
||||||
|
@ -36,13 +31,16 @@ PRIVATE>
|
||||||
|
|
||||||
: draw-grid-mesh ( grid-mesh -- )
|
: draw-grid-mesh ( grid-mesh -- )
|
||||||
GL_ARRAY_BUFFER over buffer>> [
|
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
|
dup dim>> second iota [ draw-vertex-buffer-row ] with each
|
||||||
] with-gl-buffer ;
|
] with-gl-buffer ;
|
||||||
|
|
||||||
|
USE: tools.time
|
||||||
: <grid-mesh> ( dim -- grid-mesh )
|
: <grid-mesh> ( dim -- grid-mesh )
|
||||||
|
[
|
||||||
[ ] [ vertex-array >vertex-buffer ] [ first 1 + 2 * ] tri
|
[ ] [ vertex-array >vertex-buffer ] [ first 1 + 2 * ] tri
|
||||||
grid-mesh boa ;
|
grid-mesh boa
|
||||||
|
] time ;
|
||||||
|
|
||||||
M: grid-mesh dispose
|
M: grid-mesh dispose
|
||||||
[ [ delete-gl-buffer ] when* f ] change-buffer
|
[ [ delete-gl-buffer ] when* f ] change-buffer
|
||||||
|
|
Loading…
Reference in New Issue