[Haskell-cafe] OpenGL's VBO with Haskell
Twinside
twinside at gmail.com
Tue Aug 26 12:18:39 EDT 2008
First thanks you two for the reply.
Now for the solution, I'm a bit ashamed of myself, because I simply forgot
to put a
clientState VertexArray $= Enabled
The rest of the code is valid beside this 'little' miss
-----Message d'origine-----
De : mutantlemon at gmail.com [mailto:mutantlemon at gmail.com] De la part de Bit
Connor
Envoyé : lundi 25 août 2008 23:44
À : Twinside
Cc : haskell-cafe at haskell.org
Objet : Re: [Haskell-cafe] OpenGL's VBO with Haskell
Hi, I used VBO with haskell and I remember it being pretty
straightforward, pretty much the same as in C. This was a while ago
and I don't really remember how things work so I can't really comment
on your code. But I'll see if I can find my old haskell VBO code.
On Mon, Aug 25, 2008 at 8:43 PM, Twinside <twinside at gmail.com> wrote:
> Hi Haskell list,
>
> Today I'm turning to you for the use of VBO (Vertex Buffer Object) in
> Haskell. I seem
> to be able to create one without any problem using the following code :
>
> ------------------------------------------------------
> vboOfList :: Int -> [Float] -> IO BufferObject
> vboOfList size elems =
> let ptrsize = toEnum $ size * 4
> arrayType = ElementArrayBuffer
> in do
> [array] <- genObjectNames 1
> bindBuffer arrayType $= Just array
> arr <- newListArray (0, size - 1) elems
> withStorableArray arr (\ptr -> bufferData arrayType $= (ptrsize, ptr,
> StaticDraw))
> bindBuffer ArrayBuffer $= Nothing
> reportErrors
> return array
> ------------------------------------------------------
>
> However the problem arise when I try to draw primitives using this vbo :
>
> ------------------------------------------------------
> displayVbo buff size = do
> let stride = toEnum sizeOfVertexInfo
> vxDesc = VertexArrayDescriptor 3 Float stride $ offset 0
> colors = VertexArrayDescriptor 4 Float stride $ offset 12
> texCoo = VertexArrayDescriptor 2 Float stride $ offset (12 + 16)
> filt = VertexArrayDescriptor 4 Float stride $ offset (12 + 16 +
8)
> bindBuffer ArrayBuffer $= Just buff
>
> arrayPointer VertexArray $= vxDesc
> arrayPointer ColorArray $= colors
> arrayPointer TextureCoordArray $= texCoo
> arrayPointer SecondaryColorArray $= filt
>
> drawArrays Quads 0 size
> bindBuffer ArrayBuffer $= Nothing
> ------------------------------------------------------
>
> Nothing is displayed on screen.
>
> As you can see, my VBO contain interleaved data :
> - 3 float for the vertex
> - 4 for the color
> - 2 for the texture coordinate
> - 4 for the secondary color)
>
> The 'offset' function has type Int -> Ptr Float, and is used to forge a
> pointer from an Int, to mimic
> the C way of using VBO. As far as I've checked, the values in my list for
> VBO generation are valid and well
> displayed using other techniques.
>
> So is there a workaround other method for my solution, preferably by
keeping
> my data interleaved?
> Secondly, is there any sample for advanced features like VBOs in Haskell?
>
> Regards,
> Vincent
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
More information about the Haskell-Cafe
mailing list