
Brian Hulley wrote:
Hi - You could try something like:
import Foreign.Ptr import Foreign.C.String
bmp <- withCAString "C:\1.bmp" $ bitmap (Size (100,100)) (Vertex2 0 0) (Vertex2 0 0)
and if that doesn't work try withCString or withCWString. I'm assuming that the Ptr a in the docs is supposed to be a pointer to a null terminated C string hence withCAString should hopefully work. I'd also compile with -fffi (if you're using ghc)
(I haven't tried it myself so someone else might have a better answer)
Sorry I shouldn't have replied when I hadn't even tried it myself ;-) I don't think it is nearly so easy to display a bitmap from an image on file. If you look at the online version of the OpenGL redbook here http://www.rush3d.com/reference/opengl-redbook-1.1/chapter08.html the example C code for glBitmap is: GLubyte rasters[24] = { 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xff, 0xc0, 0xff, 0xc0}; void display(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); glRasterPos2i (20.5, 20.5); glBitmap(10, 12, 0.0, 0.0, 12.0, 0.0, rasters); glBitmap(10, 12, 0.0, 0.0, 12.0, 0.0, rasters); glBitmap(10, 12, 0.0, 0.0, 12.0, 0.0, rasters); glFlush(); } and the explanation which follows suggests that the Ptr a in the HOpenGL bitmap function is a pointer to the raw bytes containing the bitmap image, not a pointer to the filename, and that the bitmap function actually displays a bitmap immediately at the current raster position rather than creating a texture for later use. You can create an array of raw bytes in memory by using eg newArray from Foreign.Marshal.Array, then pass the pointer to your display callback to use in the call to bitmap. The best place to get more info (eg about how to load bmp files) would be the HOpenGL mailing list. A link to it is on the HOpenGL page at http://haskell.org/HOpenGL/ Apologies for any confusion caused by my earlier rather ignorant post! ;-) Good luck - Brian.