[HOpenGL] HOpenGL and --enable-threaded-rts
Wolfgang Thaller
wolfgang.thaller@gmx.net
Sun, 16 Jun 2002 21:57:11 +0200
In short, it doesn't work :-( .
OpenGL (at least on MacOS) keeps track of the "current context" on a
per-thread basis. The GLUT library sets the current context and calls
back to the program. With GHC 5.03 compiled with --enable-threaded-rts,
the callback gets executed in a different thread. There is no OpenGL
context set up for that thread, so the first OpenGL call crashes.
This might also be a problem for other state-based interfaces that use
thread-local state.
Has anyone already thought about how to solve this problem?
I'm thinking about adding hooks to the RTS (in grabCapability,
releaseCapability and scheduleThread_) which would be used for setting
up the correct thread-local state whenever Haskell execution "switches"
to a different OS thread. Those hook routines would have to be written
in C and would be platform-specific most of the time. It's not a nice
solution, but it's the only one I can think of at this time.
Unless someone comes up with a better idea _quickly_, I'll try it out
and then report how ugly it really is... :-)
Cheers,
Wolfgang