[Haskell-beginners] OpenGLRaw Tutorial
Isaac Dupree
ml at isaac.cedarswampstudios.org
Mon Mar 11 18:37:23 CET 2013
On 03/11/2013 11:41 AM, Michael Baker wrote:
> The concern that lead me to try OpenGLRaw
> instead is that drawing every vertex/color/etc with a separate function
> call seems incredibly inefficient. I imagine I'm going to have to learn
> to use buffers at some point.
You are correct. Partly for that reason, glBegin()/glEnd()/glVertex*()
don't even exist in OpenGL ES and are deprecated since OpenGL 3.0. It's
a shame that so many OpenGL tutorials still teach them.
Note to others: your program depends on glfw-b (or anyway, Hackage
'glfw-b' works and Hackage 'glfw' doesn't).
glEnableVertexAttribArray/glVertexAttribPointer are for passing data to
shader programs, I believe. Everyone should use shader programs (GLSL).
GL without shader programs uses the "fixed-function pipeline" which is
deprecated. But I haven't used shaders yet, so I've attached how to do
it with VBOs and the fixed-function pipeline. I used
glInterleavedArrays and glDrawArrays. (That's probably not the only way
to do it; OpenGL has lots of legacy and semi-redundant functions.)
As jean verdier noted, your byte count argument to glBufferData was
wrong; "fromIntegral $ length verticies * sizeOf (head verticies)" fixes it.
Four coordinates per vertex is (as far as I know) not very useful for
two-dimensional or three-dimensional shapes.
Doing glGenBuffers every frame without glDeleteBuffers leaks buffers.
Either save them or delete them. I didn't fix this. Control.Exception's
bracket or bracket_ can be useful for this sort of thing.
I also attached a version that can attach a color to each vertex.
Haskell FFI peeps, is there a better way to do this than writing a
Storable instance for each GL buffer data layout?
-Isaac (who has been learning modern OpenGL for http://www.lasercake.net/ )
-------------- next part --------------
A non-text attachment was scrubbed...
Name: testglyay.hs
Type: text/x-haskell
Size: 947 bytes
Desc: not available
URL: <http://www.haskell.org/pipermail/beginners/attachments/20130311/f64ce309/attachment-0002.hs>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: testglyay2.hs
Type: text/x-haskell
Size: 1549 bytes
Desc: not available
URL: <http://www.haskell.org/pipermail/beginners/attachments/20130311/f64ce309/attachment-0003.hs>
More information about the Beginners
mailing list