From: <tj...@us...> - 2008-11-06 08:11:13
|
Revision: 11190 http://alleg.svn.sourceforge.net/alleg/?rev=11190&view=rev Author: tjaden Date: 2008-11-06 08:11:02 +0000 (Thu, 06 Nov 2008) Log Message: ----------- Make X port set the ALLEGRO_KEYBOARD_STATE `display' field correctly. Modified Paths: -------------- allegro/branches/4.9/src/x/xglx.h allegro/branches/4.9/src/x/xkeyboard.c allegro/branches/4.9/src/x/xsystem.c Modified: allegro/branches/4.9/src/x/xglx.h =================================================================== --- allegro/branches/4.9/src/x/xglx.h 2008-11-06 08:10:38 UTC (rev 11189) +++ allegro/branches/4.9/src/x/xglx.h 2008-11-06 08:11:02 UTC (rev 11190) @@ -101,6 +101,8 @@ /* keyboard */ void _al_xwin_keyboard_handler(XKeyEvent *event, bool dga2_hack, ALLEGRO_DISPLAY *display); +void _al_xwin_keyboard_switch_handler(ALLEGRO_DISPLAY *display, + const XFocusChangeEvent *event); /* mouse */ void _al_xwin_mouse_button_press_handler(int button, ALLEGRO_DISPLAY *display); Modified: allegro/branches/4.9/src/x/xkeyboard.c =================================================================== --- allegro/branches/4.9/src/x/xkeyboard.c 2008-11-06 08:10:38 UTC (rev 11189) +++ allegro/branches/4.9/src/x/xkeyboard.c 2008-11-06 08:11:02 UTC (rev 11190) @@ -48,6 +48,20 @@ #define PREFIX_W "al-xkey WARNING: " #define PREFIX_E "al-xkey ERROR: " + +typedef struct ALLEGRO_KEYBOARD_XWIN +{ + ALLEGRO_KEYBOARD parent; + ALLEGRO_KEYBOARD_STATE state; +} ALLEGRO_KEYBOARD_XWIN; + + + +/* the one and only keyboard object */ +static ALLEGRO_KEYBOARD_XWIN the_keyboard; + + + #ifdef ALLEGRO_XWINDOWS_WITH_XIM static XIM xim = NULL; static XIC xic = NULL; @@ -458,6 +472,28 @@ +/* _al_xwin_keyboard_switch_handler: + * Handle a focus switch event. + */ +void _al_xwin_keyboard_switch_handler(ALLEGRO_DISPLAY *display, + const XFocusChangeEvent *event) +{ + _al_event_source_lock(&the_keyboard.parent.es); + + switch (event->type) { + case FocusIn: + the_keyboard.state.display = display; + break; + case FocusOut: + the_keyboard.state.display = NULL; + break; + } + + _al_event_source_unlock(&the_keyboard.parent.es); +} + + + /* find_allegro_key * Search the translation table for the Allegro key corresponding to the * given KeySym. @@ -796,19 +832,6 @@ */ -typedef struct ALLEGRO_KEYBOARD_XWIN -{ - ALLEGRO_KEYBOARD parent; - ALLEGRO_KEYBOARD_STATE state; -} ALLEGRO_KEYBOARD_XWIN; - - - -/* the one and only keyboard object */ -static ALLEGRO_KEYBOARD_XWIN the_keyboard; - - - /* forward declarations */ static bool xkeybd_init_keyboard(void); static void xkeybd_exit_keyboard(void); @@ -1003,3 +1026,5 @@ } _al_event_source_unlock(&the_keyboard.parent.es); } + +/* vim: set sts=3 sw=3 et: */ Modified: allegro/branches/4.9/src/x/xsystem.c =================================================================== --- allegro/branches/4.9/src/x/xsystem.c 2008-11-06 08:10:38 UTC (rev 11189) +++ allegro/branches/4.9/src/x/xsystem.c 2008-11-06 08:11:02 UTC (rev 11190) @@ -47,9 +47,11 @@ break; case FocusIn: _al_xwin_display_switch_handler(&d->display, &event.xfocus); + _al_xwin_keyboard_switch_handler(&d->display, &event.xfocus); break; case FocusOut: _al_xwin_display_switch_handler(&d->display, &event.xfocus); + _al_xwin_keyboard_switch_handler(&d->display, &event.xfocus); break; case ButtonPress: _al_xwin_mouse_button_press_handler(event.xbutton.button, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tj...@us...> - 2008-11-06 10:27:43
|
Revision: 11192 http://alleg.svn.sourceforge.net/alleg/?rev=11192&view=rev Author: tjaden Date: 2008-11-06 10:27:38 +0000 (Thu, 06 Nov 2008) Log Message: ----------- Add an initial implementation of al_inhibit_screensaver() for the X port. We cal XResetScreenSaver() every 10 seconds if inhibiting is enabled. This appears to work for the native screensaver system, but probably won't do anything for other systems. Modified Paths: -------------- allegro/branches/4.9/src/x/xglx.h allegro/branches/4.9/src/x/xsystem.c Modified: allegro/branches/4.9/src/x/xglx.h =================================================================== --- allegro/branches/4.9/src/x/xglx.h 2008-11-06 10:27:16 UTC (rev 11191) +++ allegro/branches/4.9/src/x/xglx.h 2008-11-06 10:27:38 UTC (rev 11192) @@ -54,6 +54,7 @@ _AL_COND mapped; /* Condition variable to wait for mapping a window. */ _AL_COND resized; /* Condition variable to wait for resizing a window. */ bool pointer_grabbed; /* Is an XGrabPointer in effect? */ + bool inhibit_screensaver; /* Should we inhibit the screensaver? */ }; /* This is our version of ALLEGRO_DISPLAY with driver specific extra data. */ Modified: allegro/branches/4.9/src/x/xsystem.c =================================================================== --- allegro/branches/4.9/src/x/xsystem.c 2008-11-06 10:27:16 UTC (rev 11191) +++ allegro/branches/4.9/src/x/xsystem.c 2008-11-06 10:27:38 UTC (rev 11192) @@ -89,6 +89,7 @@ { ALLEGRO_SYSTEM_XGLX *s = arg; XEvent event; + double last_reset_screensaver_time = 0.0; while (!_al_thread_should_stop(self)) { /* Note: @@ -115,10 +116,25 @@ */ _al_mutex_lock(&s->lock); + while (XEventsQueued(s->x11display, QueuedAfterFlush)) { XNextEvent(s->x11display, &event); process_x11_event(s, event); } + + /* The Xlib manual is particularly useless about the XResetScreenSaver() + * function. Nevertheless, this does seem to work to inhibit the native + * screensaver facility. Probably it won't do anything for other + * systems, though. + */ + if (s->inhibit_screensaver) { + double now = al_current_time(); + if (now - last_reset_screensaver_time > 10.0) { + XResetScreenSaver(s->x11display); + last_reset_screensaver_time = now; + } + } + _al_mutex_unlock(&s->lock); /* If no X11 events are there, unlock so other threads can run. We use @@ -171,6 +187,7 @@ _al_mutex_init_recursive(&s->lock); _al_cond_init(&s->mapped); _al_cond_init(&s->resized); + s->inhibit_screensaver = false; _al_vector_init(&s->system.displays, sizeof (ALLEGRO_SYSTEM_XGLX *)); @@ -290,6 +307,14 @@ return true; } +static bool xglx_inhibit_screensaver(bool inhibit) +{ + ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); + + system->inhibit_screensaver = inhibit; + return true; +} + /* Internal function to get a reference to this driver. */ ALLEGRO_SYSTEM_INTERFACE *_al_system_xglx_driver(void) { @@ -310,6 +335,7 @@ xglx_vt->get_monitor_info = xglx_get_monitor_info; xglx_vt->get_cursor_position = xglx_get_cursor_position; xglx_vt->get_path = _unix_get_path; + xglx_vt->inhibit_screensaver = xglx_inhibit_screensaver; return xglx_vt; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tj...@us...> - 2008-12-28 02:22:12
|
Revision: 11363 http://alleg.svn.sourceforge.net/alleg/?rev=11363&view=rev Author: tjaden Date: 2008-12-28 02:00:29 +0000 (Sun, 28 Dec 2008) Log Message: ----------- Modify X11 port handling of ALLEGRO_MOUSE_STATE display field. The display field is not changed if the mouse leaves/enters a window while a button is held down. Once the buttons are released, the display field will be updated. Modified Paths: -------------- allegro/branches/4.9/src/x/xglx.h allegro/branches/4.9/src/x/xmousenu.c allegro/branches/4.9/src/x/xsystem.c Modified: allegro/branches/4.9/src/x/xglx.h =================================================================== --- allegro/branches/4.9/src/x/xglx.h 2008-12-28 01:40:27 UTC (rev 11362) +++ allegro/branches/4.9/src/x/xglx.h 2008-12-28 02:00:29 UTC (rev 11363) @@ -120,7 +120,7 @@ void _al_xwin_mouse_button_release_handler(int button, ALLEGRO_DISPLAY *d); void _al_xwin_mouse_motion_notify_handler(int x, int y, ALLEGRO_DISPLAY *d); void _al_xwin_mouse_switch_handler(ALLEGRO_DISPLAY *display, - const XFocusChangeEvent *event); + const XCrossingEvent *event); /* cursor */ void _al_xglx_add_cursor_functions(ALLEGRO_DISPLAY_INTERFACE *vt); Modified: allegro/branches/4.9/src/x/xmousenu.c =================================================================== --- allegro/branches/4.9/src/x/xmousenu.c 2008-12-28 01:40:27 UTC (rev 11362) +++ allegro/branches/4.9/src/x/xmousenu.c 2008-12-28 02:00:29 UTC (rev 11363) @@ -458,8 +458,14 @@ * Handle a focus switch event. */ void _al_xwin_mouse_switch_handler(ALLEGRO_DISPLAY *display, - const XFocusChangeEvent *event) + const XCrossingEvent *event) { + /* Ignore events where any of the buttons are held down. */ + if (event->state & (Button1Mask | Button2Mask | Button3Mask | + Button4Mask | Button5Mask)) { + return; + } + _al_event_source_lock(&the_mouse.parent.es); switch (event->type) { @@ -482,3 +488,4 @@ * indent-tabs-mode: nil * End: */ +/* vim: set sts=3 sw=3 et: */ Modified: allegro/branches/4.9/src/x/xsystem.c =================================================================== --- allegro/branches/4.9/src/x/xsystem.c 2008-12-28 01:40:27 UTC (rev 11362) +++ allegro/branches/4.9/src/x/xsystem.c 2008-12-28 02:00:29 UTC (rev 11363) @@ -46,9 +46,9 @@ &d->display); break; case LeaveNotify: - _al_xwin_mouse_switch_handler(&d->display, &event.xfocus); + _al_xwin_mouse_switch_handler(&d->display, &event.xcrossing); case EnterNotify: - _al_xwin_mouse_switch_handler(&d->display, &event.xfocus); + _al_xwin_mouse_switch_handler(&d->display, &event.xcrossing); case FocusIn: _al_xwin_display_switch_handler(&d->display, &event.xfocus); _al_xwin_keyboard_switch_handler(&d->display, &event.xfocus); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mm...@us...> - 2009-02-28 19:37:00
|
Revision: 11748 http://alleg.svn.sourceforge.net/alleg/?rev=11748&view=rev Author: mmimica Date: 2009-02-28 19:36:42 +0000 (Sat, 28 Feb 2009) Log Message: ----------- * Tidy up the code that sets the display color format. Probably doesn't change anything but it's more clear. * Fixed some withespace. Modified Paths: -------------- allegro/branches/4.9/src/x/xdisplay.c allegro/branches/4.9/src/x/xglx_config.c Modified: allegro/branches/4.9/src/x/xdisplay.c =================================================================== --- allegro/branches/4.9/src/x/xdisplay.c 2009-02-28 18:16:36 UTC (rev 11747) +++ allegro/branches/4.9/src/x/xdisplay.c 2009-02-28 19:36:42 UTC (rev 11748) @@ -198,10 +198,7 @@ display->w = w; display->h = h; display->vt = xdpy_vt; - //FIXME - //display->format = al_get_new_display_format(); - display->format = ALLEGRO_PIXEL_FORMAT_ABGR_8888; - + display->format = al_get_new_display_format(); display->refresh_rate = al_get_new_display_refresh_rate(); display->flags = al_get_new_display_flags(); @@ -222,7 +219,7 @@ } _al_xglx_config_select_visual(d); - + if (!d->xvinfo) { TRACE("FIXME: Need better visual selection.\n"); TRACE("xdisplay: No matching visual found.\n"); @@ -233,7 +230,12 @@ } TRACE("xdisplay: Selected visual %lx.\n", d->xvinfo->visualid); - + + /* Override the format field with the actual format selected. */ + int format = _al_deduce_color_format(&display->extra_settings); + ASSERT(_al_pixel_format_fits(format, display->format)); + display->format = format; + /* Add ourself to the list of displays. */ ALLEGRO_DISPLAY_XGLX **add; add = _al_vector_alloc_back(&system->system.displays); @@ -268,7 +270,7 @@ d->window = XCreateWindow(system->x11display, RootWindow( system->x11display, d->xvinfo->screen), 0, 0, w, h, 0, d->xvinfo->depth, InputOutput, d->xvinfo->visual, mask, &swa); - + if (display->flags & ALLEGRO_NOFRAME) xdpy_toggle_frame(display, false); @@ -466,7 +468,7 @@ ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)d; XWindowAttributes xwa; unsigned int w, h; - + _al_mutex_lock(&system->lock); /* glXQueryDrawable is GLX 1.3+. */ @@ -483,7 +485,7 @@ d->h = h; setup_gl(d); - + _al_mutex_unlock(&system->lock); return true; Modified: allegro/branches/4.9/src/x/xglx_config.c =================================================================== --- allegro/branches/4.9/src/x/xglx_config.c 2009-02-28 18:16:36 UTC (rev 11747) +++ allegro/branches/4.9/src/x/xglx_config.c 2009-02-28 19:36:42 UTC (rev 11748) @@ -406,7 +406,6 @@ display_pixel_format(eds[0]); #endif glx->xvinfo = eds[0]->info; - glx->display.format = _al_deduce_color_format(eds[0]); memcpy(&glx->display.extra_settings, eds[0], sizeof(ALLEGRO_EXTRA_DISPLAY_SETTINGS)); for (i = 0; i < eds_count; i++) { @@ -419,34 +418,34 @@ void _al_xglx_config_create_context(ALLEGRO_DISPLAY_XGLX *glx) { - ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); - ALLEGRO_DISPLAY *disp = (void*)glx; - GLXContext existing_ctx = NULL; + ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); + ALLEGRO_DISPLAY *disp = (void*)glx; + GLXContext existing_ctx = NULL; - /* Find an existing context with which to share display lists. */ - if (_al_vector_size(&system->system.displays) > 1) { - ALLEGRO_DISPLAY_XGLX **existing_dpy; - existing_dpy = _al_vector_ref_front(&system->system.displays); - if (*existing_dpy != glx) - existing_ctx = (*existing_dpy)->context; - } + /* Find an existing context with which to share display lists. */ + if (_al_vector_size(&system->system.displays) > 1) { + ALLEGRO_DISPLAY_XGLX **existing_dpy; + existing_dpy = _al_vector_ref_front(&system->system.displays); + if (*existing_dpy != glx) + existing_ctx = (*existing_dpy)->context; + } - if (glx->fbc) { - /* Create a GLX context from FBC. */ - glx->context = glXCreateNewContext(system->gfxdisplay, glx->fbc[0], - GLX_RGBA_TYPE, existing_ctx, True); - /* Create a GLX subwindow inside our window. */ - glx->glxwindow = glXCreateWindow(system->gfxdisplay, glx->fbc[0], - glx->window, 0); - } - else { - /* Create a GLX context from visual info. */ - glx->context = glXCreateContext(system->gfxdisplay, glx->xvinfo, - existing_ctx, True); - glx->glxwindow = glx->window; - } + if (glx->fbc) { + /* Create a GLX context from FBC. */ + glx->context = glXCreateNewContext(system->gfxdisplay, glx->fbc[0], + GLX_RGBA_TYPE, existing_ctx, True); + /* Create a GLX subwindow inside our window. */ + glx->glxwindow = glXCreateWindow(system->gfxdisplay, glx->fbc[0], + glx->window, 0); + } + else { + /* Create a GLX context from visual info. */ + glx->context = glXCreateContext(system->gfxdisplay, glx->xvinfo, + existing_ctx, True); + glx->glxwindow = glx->window; + } - disp->ogl_extras->is_shared = true; + disp->ogl_extras->is_shared = true; TRACE("xglx_config: Got GLX context.\n"); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mm...@us...> - 2009-02-28 21:47:51
|
Revision: 11750 http://alleg.svn.sourceforge.net/alleg/?rev=11750&view=rev Author: mmimica Date: 2009-02-28 21:47:45 +0000 (Sat, 28 Feb 2009) Log Message: ----------- * The GLX context creation wasn't fully using the FBConfig path. * Added OpenGL 3 support to GLX. Untested. Modified Paths: -------------- allegro/branches/4.9/src/x/xdisplay.c allegro/branches/4.9/src/x/xglx.h allegro/branches/4.9/src/x/xglx_config.c Modified: allegro/branches/4.9/src/x/xdisplay.c =================================================================== --- allegro/branches/4.9/src/x/xdisplay.c 2009-02-28 19:51:02 UTC (rev 11749) +++ allegro/branches/4.9/src/x/xdisplay.c 2009-02-28 21:47:45 UTC (rev 11750) @@ -307,7 +307,14 @@ */ _al_cond_wait(&system->mapped, &system->lock); - _al_xglx_config_create_context(d); + if (!_al_xglx_config_create_context(d)) { + TRACE("xdisplay: Failed to create a context.\n"); + _AL_FREE(d); + _AL_FREE(ogl); + _al_mutex_unlock(&system->lock); + /* FIXME: make it a clean exit */ + return NULL; + } if (display->flags & ALLEGRO_FULLSCREEN) { _al_xglx_fullscreen_to_display(system, d); @@ -327,8 +334,26 @@ _al_ogl_manage_extensions(display); _al_ogl_set_extensions(ogl->extension_api); - setup_gl(display); + if (display->ogl_extras->ogl_info.version < 1.2) { + ALLEGRO_EXTRA_DISPLAY_SETTINGS *eds = _al_get_new_display_settings(); + if (eds->required & (1<<ALLEGRO_COMPATIBLE_DISPLAY)) { + TRACE("Allegro requires at least OpenGL version 1.2 to work."); + _AL_FREE(d); + _AL_FREE(ogl); + _al_mutex_unlock(&system->lock); + /* FIXME: make it a clean exit */ + return NULL; + } + display->extra_settings.settings[ALLEGRO_COMPATIBLE_DISPLAY] = 0; + } + else if (display->ogl_extras->ogl_info.version > 2.1) { + /* We don't have OpenGL3 a driver. */ + display->extra_settings.settings[ALLEGRO_COMPATIBLE_DISPLAY] = 0; + } + if (display->extra_settings.settings[ALLEGRO_COMPATIBLE_DISPLAY]) + setup_gl(display); + d->invisible_cursor = None; /* Will be created on demand. */ d->current_cursor = None; /* Initially, we use the root cursor. */ d->cursor_hidden = false; @@ -399,10 +424,16 @@ glx->context = NULL; } - if (glx->xvinfo) { + if (glx->fbc) { + free(glx->fbc); + glx->fbc = NULL; XFree(glx->xvinfo); glx->xvinfo = NULL; } + else if (glx->xvinfo) { + free(glx->xvinfo); + glx->xvinfo = NULL; + } _al_vector_free(&d->bitmaps); _al_event_source_free(&d->es); Modified: allegro/branches/4.9/src/x/xglx.h =================================================================== --- allegro/branches/4.9/src/x/xglx.h 2009-02-28 19:51:02 UTC (rev 11749) +++ allegro/branches/4.9/src/x/xglx.h 2009-02-28 21:47:45 UTC (rev 11750) @@ -144,4 +144,4 @@ /* glx_config */ void _al_xglx_config_select_visual(ALLEGRO_DISPLAY_XGLX *glx); -void _al_xglx_config_create_context(ALLEGRO_DISPLAY_XGLX *glx); +bool _al_xglx_config_create_context(ALLEGRO_DISPLAY_XGLX *glx); Modified: allegro/branches/4.9/src/x/xglx_config.c =================================================================== --- allegro/branches/4.9/src/x/xglx_config.c 2009-02-28 19:51:02 UTC (rev 11749) +++ allegro/branches/4.9/src/x/xglx_config.c 2009-02-28 21:47:45 UTC (rev 11750) @@ -232,9 +232,10 @@ free(eds_list[j]); eds_list[j] = NULL; continue; - } + } eds_list[j]->index = i; - eds_list[j]->info = glXGetVisualFromFBConfig(system->gfxdisplay, fbconfig[i]); + eds_list[j]->info = malloc(sizeof(GLXFBConfig)); + memcpy(eds_list[j]->info, &fbconfig[i], sizeof(GLXFBConfig)); j++; } @@ -348,7 +349,7 @@ eds_list = malloc(num_visuals * sizeof(*eds_list)); memset(eds_list, 0, num_visuals * sizeof(*eds_list)); - TRACE(PREFIX_I "get_visuals_new: %i formats.\n", num_visuals); + TRACE(PREFIX_I "get_visuals_old: %i formats.\n", num_visuals); for (j = i = 0; i < num_visuals; i++) { TRACE("-- \n"); @@ -372,11 +373,11 @@ j++; } - TRACE(PREFIX_I "get_visuals_new(): %i visuals are good enough.\n", j); + TRACE(PREFIX_I "get_visuals_old(): %i visuals are good enough.\n", j); *count = j; + XFree(xv); if (j == 0) { free(eds_list); - XFree(xv); return NULL; } return eds_list; @@ -386,13 +387,19 @@ void _al_xglx_config_select_visual(ALLEGRO_DISPLAY_XGLX *glx) { ALLEGRO_EXTRA_DISPLAY_SETTINGS **eds = NULL; + ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); int eds_count = 0; int i; + bool using_fbc; if (glx->glx_version >= 130) eds = get_visuals_new(&eds_count, glx); - if (!eds) + if (!eds) { eds = get_visuals_old(&eds_count); + using_fbc = false; + } + else + using_fbc = true; if (!eds) { TRACE(PREFIX_E "_al_xglx_config_select_visual(): Failed to get any visual info.\n"); @@ -405,19 +412,49 @@ #ifdef DEBUGMODE display_pixel_format(eds[0]); #endif - glx->xvinfo = eds[0]->info; + if (using_fbc) { + glx->fbc = eds[0]->info; + glx->xvinfo = glXGetVisualFromFBConfig(system->gfxdisplay, *glx->fbc); + } + else + glx->xvinfo = eds[0]->info; memcpy(&glx->display.extra_settings, eds[0], sizeof(ALLEGRO_EXTRA_DISPLAY_SETTINGS)); for (i = 0; i < eds_count; i++) { - if (glx->xvinfo != eds[i]->info) - XFree(eds[i]->info); + if (i != 0) + free(eds[i]->info); free(eds[i]); } free(eds); } -void _al_xglx_config_create_context(ALLEGRO_DISPLAY_XGLX *glx) +static GLXContext create_context_new(int ver, Display *dpy, GLXFBConfig fb, + GLXContext ctx, int fc, int major, int minor) { + typedef GLXContext (*GCCA_PROC) (Display*, GLXFBConfig, GLXContext, Bool, const int*); + GCCA_PROC _xglx_glXCreateContextAttribsARB; + if (ver >= 140) { + /* GLX 1.4 should have this */ + _xglx_glXCreateContextAttribsARB = glXCreateContextAttribsARB; + } + else { + /* Load the extension manually. */ + _xglx_glXCreateContextAttribsARB = + (GCCA_PROC)glXGetProcAddress((const GLubyte*)"glXCreateContextAttribsARB"); + if (!_xglx_glXCreateContextAttribsARB) { + TRACE("GLX_ARB_create_context not supported and needed for OpenGL 3\n"); + return NULL; + } + } + int attrib[] = {GLX_CONTEXT_MAJOR_VERSION_ARB, major, + GLX_CONTEXT_MINOR_VERSION_ARB, minor, + GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB, fc, + 0}; + return _xglx_glXCreateContextAttribsARB(dpy, fb, ctx, True, attrib); +} + +bool _al_xglx_config_create_context(ALLEGRO_DISPLAY_XGLX *glx) +{ ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); ALLEGRO_DISPLAY *disp = (void*)glx; GLXContext existing_ctx = NULL; @@ -432,10 +469,18 @@ if (glx->fbc) { /* Create a GLX context from FBC. */ - glx->context = glXCreateNewContext(system->gfxdisplay, glx->fbc[0], - GLX_RGBA_TYPE, existing_ctx, True); + if (disp->flags & ALLEGRO_OPENGL_3_0) { + int fc = disp->flags & ALLEGRO_OPENGL_FORWARD_COMPATIBLE; + glx->context = create_context_new(glx->glx_version, system->gfxdisplay, + *glx->fbc, existing_ctx, fc, 3, 0); + } + else { + glx->context = glXCreateNewContext(system->gfxdisplay, *glx->fbc, + GLX_RGBA_TYPE, existing_ctx, True); + } + /* Create a GLX subwindow inside our window. */ - glx->glxwindow = glXCreateWindow(system->gfxdisplay, glx->fbc[0], + glx->glxwindow = glXCreateWindow(system->gfxdisplay, *glx->fbc, glx->window, 0); } else { @@ -445,7 +490,12 @@ glx->glxwindow = glx->window; } + if (!glx->context || !glx->glxwindow) { + return false; + } + disp->ogl_extras->is_shared = true; TRACE("xglx_config: Got GLX context.\n"); + return true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mm...@us...> - 2009-03-01 21:41:18
|
Revision: 11760 http://alleg.svn.sourceforge.net/alleg/?rev=11760&view=rev Author: mmimica Date: 2009-03-01 21:41:08 +0000 (Sun, 01 Mar 2009) Log Message: ----------- Even though the glXCreateContextAttribsARB specs at http://www.opengl.org/registry/specs/ARB/glx_create_context.txt at few places claim that you cannot create a OpenGL 3.0 context without specifically requesting it, apparently it happens with Nvidia drivers on Linux. Modified Paths: -------------- allegro/branches/4.9/src/x/xdisplay.c allegro/branches/4.9/src/x/xglx_config.c Modified: allegro/branches/4.9/src/x/xdisplay.c =================================================================== --- allegro/branches/4.9/src/x/xdisplay.c 2009-03-01 17:55:13 UTC (rev 11759) +++ allegro/branches/4.9/src/x/xdisplay.c 2009-03-01 21:41:08 UTC (rev 11760) @@ -348,10 +348,15 @@ } display->extra_settings.settings[ALLEGRO_COMPATIBLE_DISPLAY] = 0; } +#if 0 + Apparently, you can get a OpenGL 3.0 context without specifically creating + it with glXCreateContextAttribsARB, and not every OpenGL 3.0 is evil, but we + can't tell the difference at this stage. else if (display->ogl_extras->ogl_info.version > 2.1) { /* We don't have OpenGL3 a driver. */ display->extra_settings.settings[ALLEGRO_COMPATIBLE_DISPLAY] = 0; } +#endif if (display->extra_settings.settings[ALLEGRO_COMPATIBLE_DISPLAY]) setup_gl(display); Modified: allegro/branches/4.9/src/x/xglx_config.c =================================================================== --- allegro/branches/4.9/src/x/xglx_config.c 2009-03-01 17:55:13 UTC (rev 11759) +++ allegro/branches/4.9/src/x/xglx_config.c 2009-03-01 21:41:08 UTC (rev 11760) @@ -489,6 +489,7 @@ int fc = disp->flags & ALLEGRO_OPENGL_FORWARD_COMPATIBLE; glx->context = create_context_new(glx->glx_version, system->gfxdisplay, *glx->fbc, existing_ctx, fc, 3, 0); + disp->extra_settings.settings[ALLEGRO_COMPATIBLE_DISPLAY] = !fc; } else { glx->context = glXCreateNewContext(system->gfxdisplay, *glx->fbc, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tj...@us...> - 2009-03-09 07:26:58
|
Revision: 11788 http://alleg.svn.sourceforge.net/alleg/?rev=11788&view=rev Author: tjaden Date: 2009-03-09 07:26:55 +0000 (Mon, 09 Mar 2009) Log Message: ----------- Fix setting mouse cursor in X port after al_lock_bitmap() change. Write ALLEGRO_PIXEL_FORMAT_ANY in a spot instead of 0. Modified Paths: -------------- allegro/branches/4.9/src/x/xcursor.c allegro/branches/4.9/src/x/xdisplay.c Modified: allegro/branches/4.9/src/x/xcursor.c =================================================================== --- allegro/branches/4.9/src/x/xcursor.c 2009-03-09 02:14:48 UTC (rev 11787) +++ allegro/branches/4.9/src/x/xcursor.c 2009-03-09 07:26:55 UTC (rev 11788) @@ -21,7 +21,7 @@ int bmp_w; int bmp_h; - ALLEGRO_LOCKED_REGION lr; + ALLEGRO_LOCKED_REGION *lr; ALLEGRO_MOUSE_CURSOR_XGLX *xcursor; XcursorImage *image; int c, ix, iy; @@ -30,7 +30,9 @@ bmp_w = al_get_bitmap_width(bmp); bmp_h = al_get_bitmap_height(bmp); - if (!al_lock_bitmap(bmp, &lr, ALLEGRO_LOCK_READONLY)) { + + lr = al_lock_bitmap(bmp, ALLEGRO_PIXEL_FORMAT_ANY, ALLEGRO_LOCK_READONLY); + if (!lr) { return NULL; } Modified: allegro/branches/4.9/src/x/xdisplay.c =================================================================== --- allegro/branches/4.9/src/x/xdisplay.c 2009-03-09 02:14:48 UTC (rev 11787) +++ allegro/branches/4.9/src/x/xdisplay.c 2009-03-09 07:26:55 UTC (rev 11788) @@ -74,7 +74,7 @@ // FIXME: Do this properly. ALLEGRO_LOCKED_REGION *lr; - lr = al_lock_bitmap(bitmap, 0, ALLEGRO_LOCK_READONLY); + lr = al_lock_bitmap(bitmap, ALLEGRO_PIXEL_FORMAT_ANY, ALLEGRO_LOCK_READONLY); if (lr) { const char *src; char *dst; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tj...@us...> - 2009-03-22 01:59:39
|
Revision: 11919 http://alleg.svn.sourceforge.net/alleg/?rev=11919&view=rev Author: tjaden Date: 2009-03-22 01:59:35 +0000 (Sun, 22 Mar 2009) Log Message: ----------- Work around a double-free bug in GLX when a program opens multiple windows. >From what I can tell the two windows share visual structures, and when the first window closes the structure is freed immediately. For now, just don't free. Modified Paths: -------------- allegro/branches/4.9/src/x/xdisplay.c allegro/branches/4.9/src/x/xglx_config.c Modified: allegro/branches/4.9/src/x/xdisplay.c =================================================================== --- allegro/branches/4.9/src/x/xdisplay.c 2009-03-22 01:58:52 UTC (rev 11918) +++ allegro/branches/4.9/src/x/xdisplay.c 2009-03-22 01:59:35 UTC (rev 11919) @@ -455,6 +455,9 @@ glx->context = NULL; } + /* XXX quick pre-release hack */ + /* In multi-window programs these result in a double-free bugs. */ +#if 0 if (glx->fbc) { free(glx->fbc); glx->fbc = NULL; @@ -465,6 +468,7 @@ free(glx->xvinfo); glx->xvinfo = NULL; } +#endif _al_vector_free(&d->bitmaps); _al_event_source_free(&d->es); Modified: allegro/branches/4.9/src/x/xglx_config.c =================================================================== --- allegro/branches/4.9/src/x/xglx_config.c 2009-03-22 01:58:52 UTC (rev 11918) +++ allegro/branches/4.9/src/x/xglx_config.c 2009-03-22 01:59:35 UTC (rev 11919) @@ -212,6 +212,7 @@ } _AL_FREE(system->visuals); system->visuals = NULL; + system->visuals_count = 0; } } @@ -230,6 +231,7 @@ system->visuals = _AL_MALLOC(num_fbconfigs * sizeof(*system->visuals)); system->visuals_count = num_fbconfigs; + memset(system->visuals, 0, num_fbconfigs * sizeof(*system->visuals)); TRACE(PREFIX_I "get_visuals_new: %i formats.\n", num_fbconfigs); @@ -351,6 +353,9 @@ if (!xv || !num_visuals) return; + /* XXX not sure if this is needed; quick hack pre-release */ + free_previous_visuals(); + system->visuals = _AL_MALLOC(num_visuals * sizeof(*system->visuals)); system->visuals_count = num_visuals; memset(system->visuals, 0, num_visuals * sizeof(*system->visuals)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <el...@us...> - 2009-03-23 11:09:37
|
Revision: 11932 http://alleg.svn.sourceforge.net/alleg/?rev=11932&view=rev Author: elias Date: 2009-03-23 11:09:26 +0000 (Mon, 23 Mar 2009) Log Message: ----------- Made multiple displays not overwrite the system drivers stored info about available X11 visuals. Modified Paths: -------------- allegro/branches/4.9/src/x/xdisplay.c allegro/branches/4.9/src/x/xglx.h allegro/branches/4.9/src/x/xglx_config.c Modified: allegro/branches/4.9/src/x/xdisplay.c =================================================================== --- allegro/branches/4.9/src/x/xdisplay.c 2009-03-23 08:21:40 UTC (rev 11931) +++ allegro/branches/4.9/src/x/xdisplay.c 2009-03-23 11:09:26 UTC (rev 11932) @@ -413,6 +413,7 @@ ALLEGRO_BITMAP *b = *bptr; _al_convert_to_memory_bitmap(b); } + _al_xglx_free_visuals_info(); } else { /* Pass all bitmaps to any other living display. (We assume all displays Modified: allegro/branches/4.9/src/x/xglx.h =================================================================== --- allegro/branches/4.9/src/x/xglx.h 2009-03-23 08:21:40 UTC (rev 11931) +++ allegro/branches/4.9/src/x/xglx.h 2009-03-23 11:09:26 UTC (rev 11932) @@ -70,6 +70,7 @@ #endif /* Keep all decoded X11 visuals around for users to query. */ + bool using_fbc; int visuals_count; ALLEGRO_EXTRA_DISPLAY_SETTINGS **visuals; }; @@ -150,3 +151,4 @@ /* glx_config */ void _al_xglx_config_select_visual(ALLEGRO_DISPLAY_XGLX *glx); bool _al_xglx_config_create_context(ALLEGRO_DISPLAY_XGLX *glx); +void _al_xglx_free_visuals_info(void); Modified: allegro/branches/4.9/src/x/xglx_config.c =================================================================== --- allegro/branches/4.9/src/x/xglx_config.c 2009-03-23 08:21:40 UTC (rev 11931) +++ allegro/branches/4.9/src/x/xglx_config.c 2009-03-23 11:09:26 UTC (rev 11932) @@ -199,7 +199,7 @@ return eds; } -static void free_previous_visuals(void) +void _al_xglx_free_visuals_info(void) { ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); if (system->visuals) { @@ -353,9 +353,6 @@ if (!xv || !num_visuals) return; - /* XXX not sure if this is needed; quick hack pre-release */ - free_previous_visuals(); - system->visuals = _AL_MALLOC(num_visuals * sizeof(*system->visuals)); system->visuals_count = num_visuals; memset(system->visuals, 0, num_visuals * sizeof(*system->visuals)); @@ -387,14 +384,37 @@ } +static void select_best_visual(ALLEGRO_DISPLAY_XGLX *glx) +{ + ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); + + ALLEGRO_EXTRA_DISPLAY_SETTINGS *eds[system->visuals_count]; + memcpy(eds, system->visuals, sizeof(*eds) * system->visuals_count); + qsort(eds, system->visuals_count, sizeof(*eds), _al_display_settings_sorter); + + TRACE(PREFIX_I "_al_xglx_config_select_visual(): Chose visual no. %i\n", eds[0]->index); +#ifdef DEBUGMODE + display_pixel_format(eds[0]); +#endif + if (system->using_fbc) { + glx->fbc = eds[0]->info; + glx->xvinfo = glXGetVisualFromFBConfig(system->gfxdisplay, *glx->fbc); + } + else + glx->xvinfo = eds[0]->info; + memcpy(&glx->display.extra_settings, eds[0], sizeof(ALLEGRO_EXTRA_DISPLAY_SETTINGS)); +} + + + void _al_xglx_config_select_visual(ALLEGRO_DISPLAY_XGLX *glx) { ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); - bool using_fbc; bool force_old = false; + + if (system->visuals) + select_best_visual(glx); - free_previous_visuals(); - if (system->system.config) { const char *selection_mode; selection_mode = al_get_config_value(system->system.config, "graphics", @@ -414,31 +434,17 @@ get_visuals_new(glx); if (!system->visuals) { get_visuals_old(); - using_fbc = false; + system->using_fbc = false; } else - using_fbc = true; + system->using_fbc = true; if (!system->visuals) { TRACE(PREFIX_E "_al_xglx_config_select_visual(): Failed to get any visual info.\n"); return; } - ALLEGRO_EXTRA_DISPLAY_SETTINGS *eds[system->visuals_count]; - memcpy(eds, system->visuals, sizeof(*eds) * system->visuals_count); - qsort(eds, system->visuals_count, sizeof(*eds), _al_display_settings_sorter); - - TRACE(PREFIX_I "_al_xglx_config_select_visual(): Chose visual no. %i\n", eds[0]->index); -#ifdef DEBUGMODE - display_pixel_format(eds[0]); -#endif - if (using_fbc) { - glx->fbc = eds[0]->info; - glx->xvinfo = glXGetVisualFromFBConfig(system->gfxdisplay, *glx->fbc); - } - else - glx->xvinfo = eds[0]->info; - memcpy(&glx->display.extra_settings, eds[0], sizeof(ALLEGRO_EXTRA_DISPLAY_SETTINGS)); + select_best_visual(glx); } static GLXContext create_context_new(int ver, Display *dpy, GLXFBConfig fb, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tj...@us...> - 2009-03-23 11:48:25
|
Revision: 11936 http://alleg.svn.sourceforge.net/alleg/?rev=11936&view=rev Author: tjaden Date: 2009-03-23 11:48:15 +0000 (Mon, 23 Mar 2009) Log Message: ----------- The code for waiting for an X window to be mapped was incorrect if multiple displays were created at once. Give each window its own condition variable. Modified Paths: -------------- allegro/branches/4.9/src/x/xdisplay.c allegro/branches/4.9/src/x/xglx.h allegro/branches/4.9/src/x/xsystem.c Modified: allegro/branches/4.9/src/x/xdisplay.c =================================================================== --- allegro/branches/4.9/src/x/xdisplay.c 2009-03-23 11:44:54 UTC (rev 11935) +++ allegro/branches/4.9/src/x/xdisplay.c 2009-03-23 11:48:15 UTC (rev 11936) @@ -208,6 +208,9 @@ // TODO: What is this? d->xscreen = DefaultScreen(system->x11display); + d->is_mapped = false; + _al_cond_init(&d->mapped); + // Try to set full screen mode if requested, fail if we can't if (display->flags & ALLEGRO_FULLSCREEN) { if (!_al_xglx_fullscreen_set_mode(system, w, h, 0, 0)) { @@ -300,7 +303,9 @@ * events thread. So as long as no other map events occur, the condition * should only be signalled when our window gets mapped. */ - _al_cond_wait(&system->mapped, &system->lock); + while (!d->is_mapped) { + _al_cond_wait(&d->mapped, &system->lock); + } if (!_al_xglx_config_create_context(d)) { TRACE("xdisplay: Failed to create a context.\n"); @@ -471,6 +476,8 @@ } #endif + _al_cond_destroy(&glx->mapped); + _al_vector_free(&d->bitmaps); _al_event_source_free(&d->es); Modified: allegro/branches/4.9/src/x/xglx.h =================================================================== --- allegro/branches/4.9/src/x/xglx.h 2009-03-23 11:44:54 UTC (rev 11935) +++ allegro/branches/4.9/src/x/xglx.h 2009-03-23 11:48:15 UTC (rev 11936) @@ -58,7 +58,6 @@ _AL_THREAD thread; /* background thread. */ _AL_MUTEX lock; /* thread lock for whenever we access internals. */ // FIXME: One condition variable really would be enough. - _AL_COND mapped; /* Condition variable to wait for mapping a window. */ _AL_COND resized; /* Condition variable to wait for resizing a window. */ bool pointer_grabbed; /* Is an XGrabPointer in effect? */ bool inhibit_screensaver; /* Should we inhibit the screensaver? */ @@ -91,6 +90,9 @@ GLXFBConfig *fbc; /* Used when creating the OpenGL context. */ int glx_version; /* 130 means 1 major and 3 minor, aka 1.3 */ + _AL_COND mapped; /* Condition variable to wait for mapping a window. */ + bool is_mapped; /* Set to true when mapped. */ + /* Cursor for this window. */ Cursor invisible_cursor; Cursor current_cursor; Modified: allegro/branches/4.9/src/x/xsystem.c =================================================================== --- allegro/branches/4.9/src/x/xsystem.c 2009-03-23 11:44:54 UTC (rev 11935) +++ allegro/branches/4.9/src/x/xsystem.c 2009-03-23 11:48:15 UTC (rev 11936) @@ -76,7 +76,8 @@ _al_cond_signal(&s->resized); break; case MapNotify: - _al_cond_signal(&s->mapped); + d->is_mapped = true; + _al_cond_signal(&d->mapped); break; case Expose: if (d->display.flags & ALLEGRO_GENERATE_EXPOSE_EVENTS) { @@ -249,7 +250,6 @@ s->AllegroAtom = XInternAtom(x11display, "AllegroAtom", False); _al_mutex_init_recursive(&s->lock); - _al_cond_init(&s->mapped); _al_cond_init(&s->resized); s->inhibit_screensaver = false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <str...@us...> - 2010-04-04 02:37:10
|
Revision: 13187 http://alleg.svn.sourceforge.net/alleg/?rev=13187&view=rev Author: strangemoose Date: 2010-04-04 02:37:04 +0000 (Sun, 04 Apr 2010) Log Message: ----------- A few small fixes to the X11 Fullscreen code o first make sure XCreateWindow isn't given insane x and y coords, though it may not matter o second move the "set_above" call to after the window is mapped, it seems to fix the panel showing above allegro's window o third stop grabbing the mouse, see if it fixes not being able to get focus back after alt-tabing back to an allegro window Modified Paths: -------------- allegro/branches/4.9/src/x/xdisplay.c allegro/branches/4.9/src/x/xfullscreen.c Modified: allegro/branches/4.9/src/x/xdisplay.c =================================================================== --- allegro/branches/4.9/src/x/xdisplay.c 2010-04-03 12:06:00 UTC (rev 13186) +++ allegro/branches/4.9/src/x/xdisplay.c 2010-04-04 02:37:04 UTC (rev 13187) @@ -329,7 +329,7 @@ } d->window = XCreateWindow(system->x11display, RootWindow( - system->x11display, d->xvinfo->screen), x_off, y_off, w, h, 0, d->xvinfo->depth, + system->x11display, d->xvinfo->screen), x_off != INT_MAX ? x_off : 0, y_off != INT_MAX ? y_off : 0, w, h, 0, d->xvinfo->depth, InputOutput, d->xvinfo->visual, mask, &swa); // Tell WMs to respect our chosen position, @@ -347,7 +347,7 @@ // Try to set full screen mode if requested, fail if we can't if (display->flags & ALLEGRO_FULLSCREEN) { xdpy_toggle_frame(display, false); - _al_xglx_set_above(display); + //_al_xglx_set_above(display); if (!_al_xglx_fullscreen_set_mode(system, d, w, h, 0, display->refresh_rate)) { ALLEGRO_DEBUG("xdpy: failed to set fullscreen mode.\n"); XDestroyWindow(system->x11display, d->window); @@ -385,6 +385,10 @@ _al_cond_wait(&d->mapped, &system->lock); } + if (display->flags & ALLEGRO_FULLSCREEN) { + _al_xglx_set_above(display); + } + /* We can do this at any time, but if we already have a mapped * window when switching to fullscreen it will use the same * monitor (with the MetaCity version I'm using here right now). Modified: allegro/branches/4.9/src/x/xfullscreen.c =================================================================== --- allegro/branches/4.9/src/x/xfullscreen.c 2010-04-03 12:06:00 UTC (rev 13186) +++ allegro/branches/4.9/src/x/xfullscreen.c 2010-04-04 02:37:04 UTC (rev 13187) @@ -847,11 +847,11 @@ ALLEGRO_DISPLAY_XGLX *d) { /* First, make sure the mouse stays inside the window. */ - XGrabPointer(s->gfxdisplay, d->window, False, - PointerMotionMask | ButtonPressMask | ButtonReleaseMask, - GrabModeAsync, GrabModeAsync, d->window, None, CurrentTime); + //XGrabPointer(s->gfxdisplay, d->window, False, + // PointerMotionMask | ButtonPressMask | ButtonReleaseMask, + // GrabModeAsync, GrabModeAsync, d->window, None, CurrentTime); //FIXME: handle possible errors here - s->pointer_grabbed = true; + //s->pointer_grabbed = true; } void _al_xglx_store_video_mode(ALLEGRO_SYSTEM_XGLX *s) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tj...@us...> - 2010-07-10 07:10:19
|
Revision: 13452 http://alleg.svn.sourceforge.net/alleg/?rev=13452&view=rev Author: tjaden Date: 2010-07-10 07:10:13 +0000 (Sat, 10 Jul 2010) Log Message: ----------- Make xdpy_create_display abort early when the new_display_adapter is greater than the screen count. This avoids calling glXGetFBConfigs with an invalid screen number. The fglrx implementation crashes otherwise. Modified Paths: -------------- allegro/branches/4.9/src/x/xdisplay.c allegro/branches/4.9/src/x/xglx_config.c Modified: allegro/branches/4.9/src/x/xdisplay.c =================================================================== --- allegro/branches/4.9/src/x/xdisplay.c 2010-07-10 07:09:19 UTC (rev 13451) +++ allegro/branches/4.9/src/x/xdisplay.c 2010-07-10 07:10:13 UTC (rev 13452) @@ -222,6 +222,18 @@ /* Create a new X11 display, which maps directly to a GLX window. */ static ALLEGRO_DISPLAY *xdpy_create_display(int w, int h) { + ALLEGRO_SYSTEM_XGLX *system = (void *)al_get_system_driver(); + int adapter = al_get_new_display_adapter(); + + _al_mutex_lock(&system->lock); + + if (adapter >= ScreenCount(system->x11display)) { + /* Fail early, as glXGetFBConfigs may crash otherwise. */ + ALLEGRO_DEBUG("Requested display adapter more than ScreenCount.\n"); + _al_mutex_unlock(&system->lock); + return NULL; + } + ALLEGRO_DISPLAY_XGLX *d = al_malloc(sizeof *d); ALLEGRO_DISPLAY *display = (void*)d; ALLEGRO_OGL_EXTRAS *ogl = al_malloc(sizeof *ogl); @@ -229,10 +241,6 @@ memset(ogl, 0, sizeof *ogl); display->ogl_extras = ogl; - ALLEGRO_SYSTEM_XGLX *system = (void *)al_get_system_driver(); - - _al_mutex_lock(&system->lock); - int major, minor; glXQueryVersion(system->x11display, &major, &minor); d->glx_version = major * 100 + minor * 10; @@ -248,12 +256,10 @@ display->flags |= ALLEGRO_OPENGL; // store our initial screen, used by fullscreen and glx visual code - d->xscreen = al_get_new_display_adapter(); - if(d->xscreen < 0) + d->xscreen = adapter; + if (d->xscreen < 0) d->xscreen = 0; - ALLEGRO_DEBUG("xdpy: default screen: %d adapter: %d\n", DefaultScreen(system->x11display), d->xscreen); - d->is_mapped = false; _al_cond_init(&d->mapped); Modified: allegro/branches/4.9/src/x/xglx_config.c =================================================================== --- allegro/branches/4.9/src/x/xglx_config.c 2010-07-10 07:09:19 UTC (rev 13451) +++ allegro/branches/4.9/src/x/xglx_config.c 2010-07-10 07:10:13 UTC (rev 13452) @@ -211,8 +211,10 @@ ref = _al_get_new_display_settings(); fbconfig = glXGetFBConfigs(system->gfxdisplay, glx->xscreen, &num_fbconfigs); - if (!fbconfig || !num_fbconfigs) + if (!fbconfig || !num_fbconfigs) { + ALLEGRO_DEBUG("glXGetFBConfigs(xscreen=%d) returned NULL.\n", glx->xscreen); return NULL; + } eds = al_malloc(num_fbconfigs * sizeof(*eds)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |