From: John T. <nu...@me...> - 2008-03-16 17:13:03
|
Hello everyone. First of all thank you for a great free implementation of the GLUT API. I've used freeglut heavily the past couple of years. I'd like to ask something about the X11 version of freeglut. I checked the freeglut source code (admittedly not the latest svn version) and both mailing list archives and the sourceforge forum and couldn't find anything relevant. I want to be able to get the X11 connection socket so that I can select to that and other file descriptors in my main loop. Is there such a function to give me that in freeglut? If not I could write that and send you a patch if you're not aversed to the idea. Right now I've have a crude hack to do what I need without modifying freeglut, which works fine, but is obviously making me nervous :) /* hack, see freeglut_internal.h and freeglut_init.c */ extern Display *fgDisplay; int x11_sock = ConnectionNumber(fgDisplay); (which depends on the fact that the Display* is first on your SFG_Display struct, and that fgDisplay is not static). -- John Tsiombikas (Nuclear / Mindlapse) http://nuclear.sdf-eu.org/ |
From: Jocelyn F. <joc...@la...> - 2008-03-17 16:31:55
|
Hello, John Tsiombikas wrote: > I want to be able to get the X11 connection socket so that I can select > to that and other file descriptors in my main loop. Is there such a > function to give me that in freeglut? I don't think so. Note that there is already a “Connection” field in the “fgDisplay” structure, which is set in “freeglut_init.c”. However, I can't find any single place where this field is actually used... Anyway, is it possible to get a similar file descriptor from other systems or does it only make sense for X11? In short, can this feature be included in a multi-platform library? -- Jocelyn Fréchot |
From: John T. <nu...@me...> - 2008-03-17 21:15:33
|
On Mon, Mar 17, 2008 at 04:21:14PM +0100, Jocelyn Fr??chot wrote: > John Tsiombikas wrote: > > > I want to be able to get the X11 connection socket so that I can select > > to that and other file descriptors in my main loop. Is there such a > > function to give me that in freeglut? > > I don't think so. Note that there is already a ???Connection??? field in > the ???fgDisplay??? structure, which is set in ???freeglut_init.c???. However, > I can't find any single place where this field is actually used... > > Anyway, is it possible to get a similar file descriptor from other > systems or does it only make sense for X11? In short, can this feature > be included in a multi-platform library? Not as such, the X window system is the only one where there is an explicit "connection" between applications and a windowing server AFAIK. However, it would make sense to provide a cross-platform function that returns window-system specific information. Something like: void *glutWinSysInfo(); And that would return a pointer to a window-system-specific struct containing any information that makes sense on each window system. For instance on X11 it could contain the Display*, the GLX context, and the window identifier. On win32 it could contain the window HANDLE, or whatever (I can't remember what's needed on win32). Anyway you get the point. -- John Tsiombikas (Nuclear / Mindlapse) http://nuclear.sdf-eu.org/ |
From: Steve B. <st...@sj...> - 2008-03-17 22:00:49
|
The trouble with providing system-specific stuff like that in a portable library is that people will use it - and end up with non-portable applications - which is PRECISELY the thing we're trying to stop them from doing by providing the library in the first place! We should be asking ourselves why they need this piece of information - and dealing with whatever issue underlies that need. John Tsiombikas wrote: > On Mon, Mar 17, 2008 at 04:21:14PM +0100, Jocelyn Fr??chot wrote: > >> John Tsiombikas wrote: >> >> >>> I want to be able to get the X11 connection socket so that I can select >>> to that and other file descriptors in my main loop. Is there such a >>> function to give me that in freeglut? >>> >> I don't think so. Note that there is already a ???Connection??? field in >> the ???fgDisplay??? structure, which is set in ???freeglut_init.c???. However, >> I can't find any single place where this field is actually used... >> >> Anyway, is it possible to get a similar file descriptor from other >> systems or does it only make sense for X11? In short, can this feature >> be included in a multi-platform library? >> > > Not as such, the X window system is the only one where there is an > explicit "connection" between applications and a windowing server AFAIK. > However, it would make sense to provide a cross-platform function that > returns window-system specific information. Something like: > void *glutWinSysInfo(); > > And that would return a pointer to a window-system-specific struct > containing any information that makes sense on each window system. For > instance on X11 it could contain the Display*, the GLX context, and the > window identifier. On win32 it could contain the window HANDLE, or > whatever (I can't remember what's needed on win32). Anyway you get the > point. > > |
From: John T. <nu...@me...> - 2008-03-17 23:05:06
|
On Mon, Mar 17, 2008 at 05:02:48PM -0500, Steve Baker wrote: > The trouble with providing system-specific stuff like that in a portable > library is that people will use it - and end up with non-portable > applications - which is PRECISELY the thing we're trying to stop them > from doing by providing the library in the first place! Interesting. I don't see how a library can achieve that goal. If someone is set on using platform-specific facilities, glut can't stop him. He can still use fork(), posix threads, or anything else that'll still make the program UNIX-only. Personally I use glut for two reasons. One is platform independence, but I also use it for the ease of setting up an OpenGL context and the easy to use event callbacks. So most of the times, even if my program is UNIX-specific, I still try to use glut to avoid attaching a few hundred lines of X11/GLX code to it. Freeglut provides glutMainLoopEvent(), which is great to be able to take control of the event loop. But what good is taking that control if you're only going to get events from glut anyway? Polling is evil for obvious reasons, so the only reasonable way to get events from multiple sources is select(). However select requires the file descriptors of all the event sources, in order to block waiting for any one of them. If you don't provide the underlying X11 file descriptor, it's difficult to justify the usefullness of glutMainLoopEvent in the first place. At least in anything other than busy-looping crank-as-many-fps-as-possible games. > We should be asking ourselves why they need this piece of information - > and dealing with whatever issue underlies that need. See above. Also another use of platform-specific data, would be window IDs/handles, in order to embed/reparent glut windows in user interfaces. -- John Tsiombikas (Nuclear / Mindlapse) http://nuclear.sdf-eu.org/ |