X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_window.c;h=159b3018a0d972d12cb97877f5f3a738b49b8863;hb=f774a7299ff2cc23a1608267cdfc70bfb41930fd;hp=3c7bfb613586027b0ecc196609b31e66e7aa6659;hpb=8c2099b6c2e5c34794d9648a7122dc54a04a1a1a;p=freeglut diff --git a/src/freeglut_window.c b/src/freeglut_window.c index 3c7bfb6..159b301 100644 --- a/src/freeglut_window.c +++ b/src/freeglut_window.c @@ -128,19 +128,20 @@ GLXFBConfig* fgChooseFBConfig( void ) ATTRIB_VAL( GLX_ACCUM_ALPHA_SIZE, 1 ); } - if( fgState.DisplayMode & GLUT_AUX1 ) - ATTRIB_VAL( GLX_AUX_BUFFERS, 1 ); - if( fgState.DisplayMode & GLUT_AUX2 ) - ATTRIB_VAL( GLX_AUX_BUFFERS, 2 ); - if( fgState.DisplayMode & GLUT_AUX3 ) - ATTRIB_VAL( GLX_AUX_BUFFERS, 3 ); - if( fgState.DisplayMode & GLUT_AUX4 ) - ATTRIB_VAL( GLX_AUX_BUFFERS, 4 ); - if ( fgState.DisplayMode & GLUT_MULTISAMPLE ) - { - ATTRIB_VAL( GLX_SAMPLE_BUFFERS, 1 ); - } - + if ((fgState.DisplayMode & GLUT_AUX) + || (fgState.DisplayMode & GLUT_AUX1) + || (fgState.DisplayMode & GLUT_AUX2) + || (fgState.DisplayMode & GLUT_AUX3) + || (fgState.DisplayMode & GLUT_AUX4)) + { + ATTRIB_VAL(GLX_AUX_BUFFERS, fgState.AuxiliaryBufferNumber) + } + + if (fgState.DisplayMode & GLUT_MULTISAMPLE) + { + ATTRIB_VAL(GLX_SAMPLE_BUFFERS, 1) + ATTRIB_VAL(GLX_SAMPLES, fgState.SampleNumber) + } /* Push a null at the end of the list */ ATTRIB( None ); @@ -612,15 +613,15 @@ void fgOpenWindow( SFG_Window* window, const char* title, { fgStructure.MenuContext = (SFG_MenuContext *)malloc( sizeof(SFG_MenuContext) ); - fgStructure.MenuContext->Context = glXCreateNewContext( + fgStructure.MenuContext->MContext = glXCreateNewContext( fgDisplay.Display, *(window->Window.FBConfig), renderType, NULL, ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT ) ); } /* window->Window.Context = fgStructure.MenuContext->MContext; */ - window->Window.Context = glXCreateContext( - fgDisplay.Display, window->Window.FBConfig, renderType, + window->Window.Context = glXCreateNewContext( + fgDisplay.Display, *(window->Window.FBConfig), renderType, NULL, ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT ) ); } @@ -630,13 +631,13 @@ void fgOpenWindow( SFG_Window* window, const char* title, if( ! window->Window.Context ) window->Window.Context = glXCreateNewContext( - fgDisplay.Display, window->Window.FBConfig, renderType, + fgDisplay.Display, *(window->Window.FBConfig), renderType, NULL, ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT ) ); } else window->Window.Context = glXCreateNewContext( - fgDisplay.Display, window->Window.FBConfig, renderType, + fgDisplay.Display, *(window->Window.FBConfig), renderType, NULL, ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT ) ); @@ -858,8 +859,8 @@ void fgOpenWindow( SFG_Window* window, const char* title, SetWindowLong ( window->Window.Handle, GWL_STYLE, WindowStyle & ~(WS_BORDER | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX)); } -//SetWindowPos(window->Window.Handle, NULL, 0, 0, 0, 0, -// SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); +/* SetWindowPos(window->Window.Handle, NULL, 0, 0, 0, 0, + SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); */ #if defined(_WIN32_WCE) @@ -896,7 +897,7 @@ void fgCloseWindow( SFG_Window* window ) glXDestroyContext( fgDisplay.Display, window->Window.Context ); XFree( window->Window.FBConfig ); XDestroyWindow( fgDisplay.Display, window->Window.Handle ); - XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */ + /* XFlush( fgDisplay.Display ); */ /* XXX Shouldn't need this */ #elif TARGET_HOST_MS_WINDOWS @@ -1314,35 +1315,24 @@ void FGAPIENTRY glutFullScreen( void ) { #if TARGET_HOST_POSIX_X11 - int x, y; - Window w; - XMoveResizeWindow( - fgDisplay.Display, - fgStructure.CurrentWindow->Window.Handle, - 0, 0, - fgDisplay.ScreenWidth, - fgDisplay.ScreenHeight - ); + Status status; /* Returned by XGetWindowAttributes(), not checked. */ + XWindowAttributes attributes; - XFlush( fgDisplay.Display ); /* This is needed */ - - XTranslateCoordinates( - fgDisplay.Display, - fgStructure.CurrentWindow->Window.Handle, - fgDisplay.RootWindow, - 0, 0, &x, &y, &w - ); + status = XGetWindowAttributes(fgDisplay.Display, + fgStructure.CurrentWindow->Window.Handle, + &attributes); + /* + * The "x" and "y" members of "attributes" are the window's coordinates + * relative to its parent, i.e. to the decoration window. + */ + XMoveResizeWindow(fgDisplay.Display, + fgStructure.CurrentWindow->Window.Handle, + -attributes.x, + -attributes.y, + fgDisplay.ScreenWidth, + fgDisplay.ScreenHeight); - if (x || y) - { - XMoveWindow( - fgDisplay.Display, - fgStructure.CurrentWindow->Window.Handle, - -x, -y - ); - XFlush( fgDisplay.Display ); /* XXX Shouldn't need this */ - } #elif TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE) /* FIXME: what about WinCE */ RECT rect;