[Haskell-cafe] OpenGL's VBO with Haskell

Jefferson Heard jefferson.r.heard at gmail.com
Mon Aug 25 14:35:28 EDT 2008


That code looks like it ought to work, and I assume if you're using
VBOs that you know how to make sure your frustum is setup so that
you're object's visible.  Are you running this in Windows or in Linux
or ? and what version of GHC are you using?

There is also a specific HOpenGL mailinglist, just called HOpenGL that
you can join by searching for it on the http://haskell.org site.

On Mon, Aug 25, 2008 at 1: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
>



-- 
I try to take things like a crow; war and chaos don't always ruin a
picnic, they just mean you have to be careful what you swallow.

-- Jessica Edwards


More information about the Haskell-Cafe mailing list