From: Johannes F. <han...@gm...> - 2007-01-07 21:41:40
|
Hi, I need to share the "Graphical Context" for all the OpenGL/Glut-windows off my application. Exactly: I want to use the same name-space for display-lists in up to 9 windows, so that I don't have to create or modify them more then once. I have to port one of my first PHIGS-apps (it is multi-window and it is the biggest) to OpenGL. Some years ago I have already coded a well working PHIGS-emulation in OpenGL that runs on our HPJ6700-Grafics-Workstations (HP-OpenGL/Glut and even in 3D-stereo) and under Suse-Linux as well (Mesa+FreeGlut, not yet in stereo), that I have used successfully for the rest of our about 150(!) apps. Years ago I have read somewhere that it is easy to share the display-lists (which is the PHIGS behavior) in OpenGL too - somehow by creating and using the same GC. I need a coding example (in "C") please or at least a hint. Can anyone help me?!? Clear skies Hanno |
From: steve <sjb...@ai...> - 2007-01-07 22:05:44
|
Johannes Falk wrote: > Hi, > > I need to share the "Graphical Context" for all the OpenGL/Glut-windows > off my application. Exactly: I want to use the same name-space for > display-lists in up to 9 windows, so that I don't have to create or > modify them more then once. > > I have to port one of my first PHIGS-apps (it is multi-window and it is > the biggest) to OpenGL. Some years ago I have already coded a well > working PHIGS-emulation in OpenGL that runs on our > HPJ6700-Grafics-Workstations (HP-OpenGL/Glut and even in 3D-stereo) and > under Suse-Linux as well (Mesa+FreeGlut, not yet in stereo), that I have > used successfully for the rest of our about 150(!) apps. > > Years ago I have read somewhere that it is easy to share the > display-lists (which is the PHIGS behavior) in OpenGL too - somehow by > creating and using the same GC. > > I need a coding example (in "C") please or at least a hint. Can anyone > help me?!? I thought GLUT (and freeglut) shared display lists between windows by default. I don't think you have to do anything special. |
From: Johannes F. <han...@gm...> - 2007-01-07 22:21:48
|
Hi Steve, > I thought GLUT (and freeglut) shared display lists between windows by > default. I don't think you have to do anything special. Thanks, but sorry, I have up to 10 windows in my other OpenGL apps already implemented. They all use exactly but independently the same set of display lists. |
From: steve <sjb...@ai...> - 2007-01-08 02:38:04
|
Johannes Falk wrote: > Hi Steve, >> I thought GLUT (and freeglut) shared display lists between windows by >> default. I don't think you have to do anything special. > > Thanks, but sorry, I have up to 10 windows in my other OpenGL apps > already implemented. They all use exactly but independently the same set > of display lists. Wait a minute - I guess I don't understand what you are saying. If these are independent applications, they cannot share display lists. Period. If this is one application that opens 10 windows then they will share display lists by default. If that's not what you want then you have a problem. I don't think there is a way within GLUT to *not* share display lists between the windows of a single application. |
From: Hanno F. <han...@gm...> - 2007-01-09 08:51:03
|
Hi Steve, this is the answer I got from HP today. Is anyone able and willing to make the modifications to freeglut I need? I would prefer to implement the 2nd option. Hanno Glut is not able to share displays between windows because of a limitation in glut's implementation. It uses one glX context per window and does not set up display list sharing between contexts. The possible solutions are: 1) Stop using glut and write your own glX calls. 1a. ) Use one glX context and switch it between multiple windows (drawables) using glXMakeCurrent to switch the context to each drawable. or 1b. ) Using one context per window but setting up display list sharing between each context by adding the base context ID to the glXCreateContext "shareList" parameter. 2) Modify the glut source code to add display list sharing support. This could be done by having glut return the GLXcontext that is created for a window and then accept a context for additional glutCreateWindow calls (or add a glutCreateWindowWithThisContext call). Alternatively you could add a glutCreateWindowAndShareDisplayListsWithThisContext call. etc ... If you go with option 2, you'll want to build an archive library and then link this modified library into your applications. Borislav Ivanchev Hewlett Packard Global Delivery Center Bulgaria HP-UX Support Team -- Der GMX SmartSurfer hilft bis zu 70% Ihrer Onlinekosten zu sparen! Ideal für Modem und ISDN: http://www.gmx.net/de/go/smartsurfer |
From: steve <sjb...@ai...> - 2007-01-10 05:53:49
|
Hanno Falk wrote: > Hi Steve, > > this is the answer I got from HP today. Yeah - I guess you're right - I could have sworn I remembered that contexts were shared by default. Anyway, in freeglut_window.c, there are a bunch of calls to 'glXCreateContext'. The third parameter of each of those calls is described in the GLX manual as: shareList Specifies the context with which to share display lists. NULL indicates that no sharing is to take place. ...and in our code, that parameter is NULL - hence no sharing. So - what you need to do is to declare a global GLXcontext which is initially NULL. Every time you call glXCreateContext, pass that value as the third parameter - and update the global with the value new context handle. We don't want to do this in the released copy of freeglut though because we need compatibility with GLUT - but this is OpenSourced code - so you can easily make your own version. |
From: Sven P. <sve...@ae...> - 2007-01-10 13:02:40
|
Am Mittwoch, 10. Januar 2007 07:02 schrieb steve: > [...] > So - what you need to do is to declare a global GLXcontext which > is initially NULL. Every time you call glXCreateContext, pass that > value as the third parameter - and update the global with the value > new context handle. > > We don't want to do this in the released copy of freeglut though > because we need compatibility with GLUT - but this is OpenSourced > code - so you can easily make your own version. We already have a tiny extension in freeglut, namely the GLUT_RENDERING_CONTEXT state, which can currently have one of two values: GLUT_CREATE_NEW_CONTEXT (default, no sharing at all) or GLUT_USE_CURRENT_CONTEXT (the whole OpenGL state machine is shared). What is actually required to make the behaviour under GLX and WGL consistent is something in the middle (GLUT_SHARE_RESOURCES?), which can do what Steve describes above. Although we will probably keep the current behaviour as it is (although inconsistent across platforms), a user can have the choice without having to hack the sources. Would that be acceptable? Cheers, S. |