Is this the wrong forum to ask about help with X problems and fltk? If I go to X mailing list will they just tell me to come back here? Where can I get help or at least a pointer to some help?
I hate to be a bother. I'm just asking where to go next. > > I desperately need access to some of fltk's native handles so that I may > > fashion proper cooperation between fltk and various other libraries that I > > am using. > > > > I am attempting to initialize the handles I need myself in the manner that > > is described in the documentation here: > > > > http://www.fltk.org/doc-1.3/index.html > > > > ----------- Quote ---------- > > > > "Changing the Display, Screen, or X Visual > > FLTK uses only a single display, screen, X visual, and X colormap. This > > greatly simplifies its internal structure and makes it much smaller and > > faster. You can change which it uses by setting global variables before the > > first Fl_Window::show() is called. You may also want to call Fl::visual(), > > which is a portable interface to get a full color and/or double buffered > > visual." > > > > ----------------------------- > > > > In the constructor of my display window I attempt to initialize the > > display, screen, visual and colormap. I normally do this before any > > windows are shown and only once. However, the code below doesn't do this > > and only provides a means to reproduce the following error which is causing > > much wailing and gnashing of teeth: > > > > ----------- Error ---------- > > > > X Error of failed request: BadAtom (invalid Atom parameter) > > Major opcode of failed request: 18 (X_ChangeProperty) > > Atom id in failed request: 0x0 > > Serial number of failed request: 21 > > Current serial number in output stream: 32 > > Press [Enter] to close the terminal ... > > > > ----------------------------- > > > > ----------- Code ---------- > > > > #include <fltk/run.h> > > #include <fltk/GlWindow.h> > > #include <iostream> > > #include <string> > > > > #include <GL/glx.h> > > #define XWindow ::Window > > # include <fltk/x.h> > > // > > #define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 > > #define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 > > typedef GLXContext (*glXCreateContextAttribsARBProc)(Display*, GLXFBConfig, > > GLXContext, Bool, const int*); > > > > void Terminate(const std::string &message) > > { > > throw message; > > }; > > > > struct OglDisplayWindow : public fltk::GlWindow > > { > > OglDisplayWindow( > > int X, > > int Y, > > int W, > > int H, > > const char *L); > > > > virtual ~OglDisplayWindow(); > > > > virtual void draw(); > > > > virtual int handle(int); > > > > typedef GLXContext OGLCONTEXT; > > private: > > static Display *_disp_ptr; > > static XVisualInfo *_vis_ptr; > > static GLXFBConfig *_fbconfig_ptr; > > static int _fbconfigID; > > static int _screenID; > > static Colormap _colorMap; > > }; > > > > Display* OglDisplayWindow::_disp_ptr = 0; > > XVisualInfo* OglDisplayWindow::_vis_ptr = 0; > > GLXFBConfig* OglDisplayWindow::_fbconfig_ptr = 0; > > int OglDisplayWindow::_fbconfigID = 0; > > int OglDisplayWindow::_screenID = 0; > > Colormap OglDisplayWindow::_colorMap = Colormap(); > > > > OglDisplayWindow::OglDisplayWindow( > > int X, > > int Y, > > int W, > > int H, > > const char *L) : > > fltk::GlWindow(X,Y,W,H,L) > > { > > struct Utility > > { > > static void InitOsNativeResources() > > { > > //Interacting with the X library > > > > ////////////////////////////////////////////////////////////////////////// > > _disp_ptr = XOpenDisplay(0); > > > > if (!_disp_ptr) > > { > > Terminate("OglDisplayWindow::draw - Failed > > to open X display.\n"); > > }//end if > > > > _screenID = DefaultScreen(_disp_ptr); > > > > // Get a matching FB config > > static int visual_attribs[] = { > > GLX_X_RENDERABLE,True, > > GLX_DRAWABLE_TYPE,GLX_WINDOW_BIT, > > GLX_RENDER_TYPE,GLX_RGBA_BIT, > > GLX_X_VISUAL_TYPE,GLX_TRUE_COLOR, > > GLX_RED_SIZE,8, > > GLX_GREEN_SIZE,8, > > GLX_BLUE_SIZE,8, > > GLX_ALPHA_SIZE,8, > > GLX_DEPTH_SIZE,24, > > GLX_STENCIL_SIZE,8, > > GLX_DOUBLEBUFFER,True, > > //GLX_SAMPLE_BUFFERS , 1, > > //GLX_SAMPLES , 4, > > None > > }; > > > > //Getting matching framebuffer configs > > int fbcount; > > _fbconfig_ptr = glXChooseFBConfig( > > _disp_ptr, > > _screenID, > > visual_attribs, > > &fbcount); > > > > if (!_fbconfig_ptr) > > { > > Terminate("OglDisplayWindow::draw - Failed > > to retrieve a framebuffer config.\n"); > > }//end if > > > > //"Found matching FB configs > > > > // Pick the FB config/visual with the most samples > > per pixel > > > > //Getting XVisualInfo > > int best_fbc = -1; > > int worst_fbc = -1; > > int best_num_samp = -1; > > int worst_num_samp = 999; > > > > int samp_buf; > > int samples; > > for (int i(0);i < fbcount;++i) > > { > > _vis_ptr = glXGetVisualFromFBConfig( > > _disp_ptr, > > _fbconfig_ptr[i]); > > > > if (_vis_ptr) > > { > > samp_buf = 0; > > samples = 0; > > glXGetFBConfigAttrib( > > _disp_ptr, > > _fbconfig_ptr[i], > > GLX_SAMPLE_BUFFERS, > > &samp_buf); > > > > glXGetFBConfigAttrib( > > _disp_ptr, > > _fbconfig_ptr[i], > > GLX_SAMPLES, > > &samples); > > > > if ((best_fbc < 0 || samp_buf) && > > samples > best_num_samp) > > { > > best_fbc = i; > > best_num_samp = samples; > > }//end if > > if (worst_fbc < 0 || !samp_buf || > > samples < worst_num_samp) > > { > > worst_fbc = i; > > worst_num_samp = samples; > > }//end if > > }//end if > > > > XFree(_vis_ptr); > > }//end for > > > > //Use the best matching visual > > _fbconfigID = best_fbc; > > > > _vis_ptr = glXGetVisualFromFBConfig( > > _disp_ptr, > > _fbconfig_ptr[_fbconfigID]); > > > > //Creating colormap > > _colorMap = XCreateColormap( > > _disp_ptr, > > RootWindow(_disp_ptr,_vis_ptr->screen), > > _vis_ptr->visual, > > AllocNone); > > > > //Interacting with FLTK library > > > > ////////////////////////////////////////////////////////////////////////// > > fltk::xdisplay = _disp_ptr; > > fltk::xscreen = _screenID; > > fltk::xvisual = _vis_ptr; > > fltk::xcolormap = _colorMap; > > > > std::cout<<"Os handles initialized."<<std::endl; > > }//end function > > }; > > > > Utility::InitOsNativeResources(); > > }//end function > > > > OglDisplayWindow::~OglDisplayWindow() > > { > > XFree(_fbconfig_ptr); //I am assuming fltk will free the other > > resources after I pass them to the library...wrong? > > }//end function > > > > void OglDisplayWindow::draw() > > { > > if (!this->valid()) > > { > > this->make_current(); > > }//end if > > }//end function > > > > int OglDisplayWindow::handle(int msg) > > { > > return fltk::GlWindow::handle(msg); > > }//end function > > > > int main(void) > > { > > try > > { > > OglDisplayWindow displayWin( > > 100, > > 100, > > 100, > > 100, > > "Debug Code"); > > > > displayWin.show(); > > while (displayWin.visible()) > > { > > fltk::check(); > > displayWin.flush(); > > }//end while > > } > > catch (const std::string &message) > > { > > std::cerr << message << std::endl; > > }//end try > > }//end function > _______________________________________________ fltk mailing list [email protected] http://lists.easysw.com/mailman/listinfo/fltk

