From: John T. <nu...@me...> - 2012-06-11 21:53:41
|
On Mon, Jun 11, 2012 at 05:23:07PM -0400, Jean-Claude Gervais wrote: > > Could you please explain what the correct way of using threads with > FreeGLUT is? > > IS there a proper way to do it? No, and it's not only freeglut but OpenGL itself. You can't create an OpenGL context in one thread and issue calls to it from another. At least most drivers have issues with that sort of thing on many platforms. > The reason I cannot put them together is that one thread is busy > blocking on network events using select while the other thread repaints > itself in response to GL keyboard and mouse input. > > The alternative would be to poll, which seems less than optimal to me. You're doing this wrong. Don't use threads for this sort of thing. Just pass the X server file descriptor to select and handle everything from a single select loop. Display *dpy = glXGetCurrentDisplay(); int xsocket = ConnectionNumber(dpy); pass that socket to select, in the read set, and then select will wake up when there's one or more events in the X queue, which will be the time to call glutMainLoopEvent to handle them: if(FD_ISSET(xsocket, &rdset)) { glutMainLoopEvent(); } That should do it, no threads needed at all. As a final piece of advice if I may: when your program becomes complex enough to need to handle this sort of thing, consider dropping glut at all and using GLX/Xlib directly. -- John Tsiombikas http://nuclear.mutantstargoat.com/ |