[Haskell-beginners] OpenGLRaw Tutorial

jean verdier verdier.jean at gmail.com
Mon Mar 11 12:15:45 CET 2013

Instead of using some complex functions, you should probably try to
simply use simpler constructs to see if everything is correctly setup:
    glBegin gl_TRIANGLES
    glVertex3f 0.75    0.75    0.0
    glVertex3f 0.75    (-0.75) 0.0
    glVertex3f (-0.75) (-0.75) 0.0
    glBegin gl_TRIANGLES
    glVertex4f 0.75    0.75    0.0 1
    glVertex4f 0.75    (-0.75) 0.0 1
    glVertex4f (-0.75) (-0.75) 0.0 1
Your program shows something using this.
I haven't looked at the tutorial you're following but you should stick
to the OpenGL references as i've found that most tutorials are crap
(there are still good ones like NeHe stuff i think).

Back to your problem: 
you should use GLfloat and not Float in your vertex definition.
Your buffer definition should be:
      withArray verticies $ \ary -> 
          -- (fromIntegral $ sizeOf ary) 
          (fromIntegral (length verticies * sizeOf (0::GLfloat)))

The C version may get away with (sizeof vertices) because it uses the
actual array (may be false) size but you have to compute the size of the
array that is the number of elements times the size of elements.

You're trying to draw from a VBO so i think you should not use
      --glEnableVertexAttribArray 0
You use the VBO:
You need to enable client state
      glEnableClientState gl_VERTEX_ARRAY
Bind the buffer that holds the data
      glBindBuffer gl_ARRAY_BUFFER buffer
Set the bound buffer to be the vertex coords
      glVertexPointer 4 gl_FLOAT 0 nullPtr
Call the draw   
      glDrawArrays gl_TRIANGLES 0 3
      glDisableClientState gl_VERTEX_ARRAY 

This may be explained properly in:

On Mon, 2013-03-11 at 01:45 -0500, Michael Baker wrote:
> I'm trying to follow this book on
> OpenGL: http://www.arcsynthesis.org/gltut/Basics/Tut01%20Following%
> 20the%20Data.html
> I'm trying to follow the examples using the OpenGLRaw package as the
> OpenGL package doesn't map very neatly to any of the examples. For
> instance, it is not clear to me now to create and use the vertex array
> used in the example that I linked to.
> However, I'm struggling a bit because I haven't used Haskell's foreign
> interface before. Here is an attempt which is expected to draw a
> triangle, but instead draws nothing: http://hpaste.org/83837
> Does anyone know of a tutorial for OpenGLRaw or the foreign interface
> that might help me understand how to marshall data around? It seems
> like many people turn to OpenGLRaw when they're learning OpenGL so
> that they can follow the tutorials. I imagine it would be useful to
> have a guide out there that covers how to actually use it.
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners

More information about the Beginners mailing list