<br><br><div class="gmail_quote">2008/10/28 T Willingham <span dir="ltr">&lt;<a href="mailto:t.r.willingham@gmail.com">t.r.willingham@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>As my first Haskell exposure, I&#39;ve been working through Real World<br>Haskell.<br><br>I am considering converting some of my C++ graphics libraries to<br>Haskell.&nbsp; I&#39;ve done a fair amount of googling on the subject, however<br>

I haven&#39;t quite been able to find clear answers to some of following<br>issues.<br><br>(1) Using an OpenGL vertex array (a contiguous chunk of memory which<br>is handed to the graphics card) is important.&nbsp; I see the source code<br>

of Frag does this, so it looks like we&#39;re good.&nbsp; Check.<br><br>(2) In-place modification of the vertex array is important.&nbsp; Every<br>vertex changes on each frame update.&nbsp; And we always want more<br>vertices.<br><br>(3) Growing and shrinking the vertex array efficiently is important.<br>

Here the behavior of C++ std::vector happens to be ideal.&nbsp; When<br>growing, extend the array in-place if possible (using reserved space<br>if any), otherwise allocate a new chunk (&quot;amortized constant time&quot;).<br>

When shrinking, do nothing but record the smaller size; the unused<br>memory chunk is reserved for possible future growth.<br><br>(4) Doing little to no allocations each frame update is important.&nbsp; In<br>the current C++ version, zero allocations occur during a normal frame<br>

update.&nbsp; When the vertex array changes, that is the only allocation<br>which happens.<br><br>To give a context for all of this, I am applying a non-linear<br>transformation to an object on every frame.&nbsp; (Note: non-linear, so a<br>

matrix transform will not suffice.)<br></blockquote></div><br>Any reason why you can not do this in the vertex shader? You really should avoid trying to touch the vertices with the CPU if at all possible.<br clear="all">
<br>-- <br>Sebastian Sylvan<br>+44(0)7857-300802<br>UIN: 44640862<br>