From: <Pla...@ao...> - 2003-05-12 17:34:52
|
Does anyone have any experience of using OSMesa and OpenGL together? I'm not sure how to go about it: in order to make the header files use the mgl* namespace i have to #define USE_MGL_NAMESPACE which trips a whole load of #defines in the header files like: #define glVertex2f mglVertex2f etc etc. Trouble is if I wanted to call the gl* functions for OpenGL, they will automatically be #defined to mgl*. Anyone know how to get round this? Anders |
From: Brian P. <br...@tu...> - 2003-05-14 00:04:29
|
Pla...@ao... wrote: > Does anyone have any experience of using OSMesa and OpenGL together? > > I'm not sure how to go about it: in order to make the header files use > the mgl* namespace i have to > > #define USE_MGL_NAMESPACE > > which trips a whole load of #defines in the header files like: > > #define glVertex2f mglVertex2f > > etc etc. > > Trouble is if I wanted to call the gl* functions for OpenGL, they will > automatically be #defined to mgl*. > > Anyone know how to get round this? The easiest thing to do is put your "real" OpenGL code in one file, and the OSMesa "mangled" code in another file. In the later file, #define USE_MGL_NAMESPACE before including the OpenGL header files. Getting more elaboreate, you can implement your own API dispatch table: struct gl_functions_i_use { void (*Begin)(GLenum mode); void (*End)(void); void (*Vertex3f)(GLfloat x, GLfloat y, GLfloat z); ... }; Then, have two files (described above) that initialize one dispatch table to point to the regular GL functions and another dispatch table that points to the mangled GL functions. A current dispatch table pointer can be used to choose between them at runtime: struct gl_functions_i_use *currentGL; if (useMesa) currentGL = &mangledTable; else currentGL = ®ularTable; Then, make all your GL calls through the current dispatch table: void Display(void) { currentGL->Clear(GL_COLOR_BUFFER_BIT); currentGL->Begin(GL_TRIANGLES); currentGL->Vertex3f( ... ) ... currentGL->End(); ... } I've done the later in a project and it worked well. -Brian |