On 9/8/07, Tudor Achim t.achim@gmail.com wrote:
Hi, I'm following nehe's tutorials at nehe.gamedev.net, and I'm having a lot of trouble with loading and binding textures.
Which one(s) are you looking at?
I opened a stream to the bmp file with (setf test (open "/home/tudor/email.bmp" :element-type '(cl-user::unsigned-byte 8))) Then, I made an 1d array of 5000 elements (just so it was 'big enough') and stored the rgb values in it with (read-sequence test-array test)
You'll probably need something more complicated than that (to deal with the BMP file format, etc), but it should at least give you something that would show up if you uploaded it correctly... (though are you sure that is actually 'big enough' for your file? that would only be around 40x40 pixels if I'm counting right.)
However, when I do (gl:bind-texture gl:tex-image-2d test-array), it says that cl-opengl:tex-image-2d is unbound.
There are a few things wrong here: First, you probably want :tex-image-2d instead of gl:tex-image-2d, cl-opengl converts most OpenGL enums ( things like GL_FOO_BAR in C source) to keywords in lisp (so :foo-bar for GL_FOO_BAR). Next, bind-texture should be taking a GL texture name (an int) as the second parameter, not the actual texture data.
You need to allocate a texture name with gl:gen-textures and store that somewhere (and remember to deallocate it later).
Then you need to set up the texture, first make it the current texture with bind-texture, then you will probably want some tex-parameter calls to set filtering, and finally upload the image data with tex-image-2d.
The tex-image-2d call is where you would pass the test-array parameter you loaded above.
If you are only using 1 texture, then you should be able to go from there, otherwise repeat that for each texture, and call bind-texture during rendering to activate the particular you need for a batch of geometry.
-- Bart