From: <sp...@us...> - 2008-11-02 20:09:06
|
Revision: 748 http://freeglut.svn.sourceforge.net/freeglut/?rev=748&view=rev Author: spanne Date: 2008-11-02 20:09:02 +0000 (Sun, 02 Nov 2008) Log Message: ----------- Refactored GLX context creation into a single function, centralizing things to be changed for OpenGL 3.0 context creation and removing some cut-n-paste. Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2008-11-02 19:38:05 UTC (rev 747) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2008-11-02 20:09:02 UTC (rev 748) @@ -483,6 +483,23 @@ } + +#if TARGET_HOST_POSIX_X11 +static GLXContext fghCreateNewContext( SFG_Window* window ) +{ + int menu = ( window->IsMenu && !fgStructure.MenuContext ); + int index_mode = ( fgState.DisplayMode & GLUT_INDEX ); + Display *dpy = fgDisplay.Display; + GLXFBConfig config = *(window->Window.FBConfig); + int render_type = ( !menu && index_mode ) ? GLX_COLOR_INDEX_TYPE : GLX_RGBA_TYPE; + GLXContext share_list = NULL; + Bool direct = ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT ); + + return glXCreateNewContext( dpy, config, render_type, share_list, direct ); +} +#endif + + /* * Opens a window. Requires a SFG_Window object created and attached * to the freeglut structure. OpenGL context is created here. @@ -499,7 +516,6 @@ XSizeHints sizeHints; XWMHints wmHints; unsigned long mask; - int renderType; /* GLX_RGBA_TYPE or GLX_COLOR_INDEX_TYPE */ unsigned int current_DisplayMode = fgState.DisplayMode ; /* Save the display mode if we are creating a menu window */ @@ -592,21 +608,6 @@ * or else use the current context if the user has so specified */ - /* Set renderType. */ - if( window->IsMenu && ( ! fgStructure.MenuContext ) ) - { - /* Display mode has been set to GLUT_RGB. */ - renderType = GLX_RGBA_TYPE; - } - else if (fgState.DisplayMode & GLUT_INDEX) - { - renderType = GLX_COLOR_INDEX_TYPE; - } - else - { - renderType = GLX_RGBA_TYPE; - } - if( window->IsMenu ) { /* @@ -617,33 +618,21 @@ { fgStructure.MenuContext = (SFG_MenuContext *)malloc( sizeof(SFG_MenuContext) ); - fgStructure.MenuContext->MContext = glXCreateNewContext( - fgDisplay.Display, *(window->Window.FBConfig), renderType, - NULL, ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT ) - ); + fgStructure.MenuContext->MContext = fghCreateNewContext( window ); } /* window->Window.Context = fgStructure.MenuContext->MContext; */ - window->Window.Context = glXCreateNewContext( - fgDisplay.Display, *(window->Window.FBConfig), renderType, - NULL, ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT ) - ); + window->Window.Context = fghCreateNewContext( window ); } else if( fgState.UseCurrentContext ) { window->Window.Context = glXGetCurrentContext( ); if( ! window->Window.Context ) - window->Window.Context = glXCreateNewContext( - fgDisplay.Display, *(window->Window.FBConfig), renderType, - NULL, ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT ) - ); + window->Window.Context = fghCreateNewContext( window ); } else - window->Window.Context = glXCreateNewContext( - fgDisplay.Display, *(window->Window.FBConfig), renderType, - NULL, ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT ) - ); + window->Window.Context = fghCreateNewContext( window ); #if !defined( __FreeBSD__ ) && !defined( __NetBSD__ ) if( !glXIsDirect( fgDisplay.Display, window->Window.Context ) ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sp...@us...> - 2008-11-05 18:24:54
|
Revision: 753 http://freeglut.svn.sourceforge.net/freeglut/?rev=753&view=rev Author: spanne Date: 2008-11-05 18:24:43 +0000 (Wed, 05 Nov 2008) Log Message: ----------- Removed the annoying "Unable to create direct context rendering..." warning, it served no real purpose, and on some platforms there simply is no such thing as a direct context. Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2008-11-05 18:16:17 UTC (rev 752) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2008-11-05 18:24:43 UTC (rev 753) @@ -707,9 +707,6 @@ if( fgState.DirectContext == GLUT_FORCE_DIRECT_CONTEXT ) fgError( "Unable to force direct context rendering for window '%s'", title ); - else if( fgState.DirectContext == GLUT_TRY_DIRECT_CONTEXT ) - fgWarning( "Unable to create direct context rendering for window '%s'\nThis may hurt performance.", - title ); } #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sp...@us...> - 2008-11-06 18:29:42
|
Revision: 756 http://freeglut.svn.sourceforge.net/freeglut/?rev=756&view=rev Author: spanne Date: 2008-11-06 18:29:35 +0000 (Thu, 06 Nov 2008) Log Message: ----------- Fixed first parameter of CreateWindow call, used for multisampling on Windows. It compiles, but it is otherwise untested. Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2008-11-05 18:46:20 UTC (rev 755) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2008-11-06 18:29:35 UTC (rev 756) @@ -376,17 +376,16 @@ HWND hWnd; HDC hDC, hDC_before=wglGetCurrentDC(); WNDCLASS wndCls; - ATOM atom; /* create a dummy window */ ZeroMemory(&wndCls, sizeof(wndCls)); - wndCls.lpfnWndProc = DefWindowProc; - wndCls.hInstance = fgDisplay.Instance; - wndCls.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; - wndCls.lpszClassName = _T("FREEGLUT_dummy"); - atom = RegisterClass( &wndCls ); + wndCls.lpfnWndProc = DefWindowProc; + wndCls.hInstance = fgDisplay.Instance; + wndCls.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; + wndCls.lpszClassName = _T("FREEGLUT_dummy"); + RegisterClass( &wndCls ); - hWnd=CreateWindow((LPCSTR)atom, _T(""), WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW , 0,0,0,0, 0, 0, fgDisplay.Instance, 0 ); + hWnd=CreateWindow(_T("FREEGLUT_dummy"), _T(""), WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW , 0,0,0,0, 0, 0, fgDisplay.Instance, 0 ); hDC=GetDC(hWnd); SetPixelFormat( hDC, pixelformat, ppfd ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sp...@us...> - 2009-02-13 18:16:44
|
Revision: 770 http://freeglut.svn.sourceforge.net/freeglut/?rev=770&view=rev Author: spanne Date: 2009-02-13 18:16:41 +0000 (Fri, 13 Feb 2009) Log Message: ----------- Refactoring only (replace nested conditionals with guard clauses), making the normal path of execution much clearer. Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2009-02-13 18:05:37 UTC (rev 769) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2009-02-13 18:16:41 UTC (rev 770) @@ -302,60 +302,68 @@ GLboolean fgNewWGLCreateContext( SFG_Window* window ) { + PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetEntensionsStringARB; + if( (fgState.ContextFlags & GLUT_FORWARD_COMPATIBLE) && (fgState.MajorVersion > 2) ) { - PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetEntensionsStringARB=NULL; + return GL_TRUE; + } - wglMakeCurrent( window->Window.Device, - window->Window.Context ); + wglMakeCurrent( window->Window.Device, + window->Window.Context ); - wglGetEntensionsStringARB=(PFNWGLGETEXTENSIONSSTRINGARBPROC)wglGetProcAddress("wglGetExtensionsStringARB"); - if (wglGetEntensionsStringARB) - { - const char * pWglExtString=wglGetEntensionsStringARB(window->Window.Device); - if (pWglExtString) - { - if (strstr(pWglExtString, "WGL_ARB_create_context")) - { - /* new context creation */ - HGLRC context; - int attribs[7]; - PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB; + wglGetEntensionsStringARB=(PFNWGLGETEXTENSIONSSTRINGARBPROC)wglGetProcAddress("wglGetExtensionsStringARB"); + if ( wglGetEntensionsStringARB == NULL ) + { + return GL_TRUE; + } - attribs[0] = WGL_CONTEXT_MAJOR_VERSION_ARB; - attribs[1] = fgState.MajorVersion; - attribs[2] = WGL_CONTEXT_MINOR_VERSION_ARB; - attribs[3] = fgState.MinorVersion; - attribs[4] = WGL_CONTEXT_FLAGS_ARB; - attribs[5] = ((fgState.ContextFlags & GLUT_DEBUG) ? WGL_CONTEXT_DEBUG_BIT_ARB : 0) | - ((fgState.ContextFlags & GLUT_FORWARD_COMPATIBLE) ? WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB : 0); - attribs[6] = 0; + const char * pWglExtString=wglGetEntensionsStringARB(window->Window.Device); + if ( pWglExtString == NULL ) + { + return GL_TRUE; + } - wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC) wglGetProcAddress( "wglCreateContextAttribsARB" ); - if ( wglCreateContextAttribsARB == NULL ) - { - fgError( "wglCreateContextAttribsARB not found" ); - } + if ( strstr(pWglExtString, "WGL_ARB_create_context") == NULL ) + { + return GL_TRUE; + } - context = wglCreateContextAttribsARB( window->Window.Device, 0, attribs ); - if ( context == NULL ) - { - fgError( "Unable to create OpenGL %d.%d context (flags %x)", - fgState.MajorVersion, fgState.MinorVersion, fgState.ContextFlags ); - } - else - { - fgWarning( "Success 3.0" ); - wglMakeCurrent( NULL, NULL ); - wglDeleteContext( window->Window.Context ); - window->Window.Context = context; - } - } - } - } + /* new context creation */ + HGLRC context; + int attribs[7]; + PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB; + + attribs[0] = WGL_CONTEXT_MAJOR_VERSION_ARB; + attribs[1] = fgState.MajorVersion; + attribs[2] = WGL_CONTEXT_MINOR_VERSION_ARB; + attribs[3] = fgState.MinorVersion; + attribs[4] = WGL_CONTEXT_FLAGS_ARB; + attribs[5] = ((fgState.ContextFlags & GLUT_DEBUG) ? WGL_CONTEXT_DEBUG_BIT_ARB : 0) | + ((fgState.ContextFlags & GLUT_FORWARD_COMPATIBLE) ? WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB : 0); + attribs[6] = 0; + + wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC) wglGetProcAddress( "wglCreateContextAttribsARB" ); + if ( wglCreateContextAttribsARB == NULL ) + { + fgError( "wglCreateContextAttribsARB not found" ); } + context = wglCreateContextAttribsARB( window->Window.Device, 0, attribs ); + if ( context == NULL ) + { + fgError( "Unable to create OpenGL %d.%d context (flags %x)", + fgState.MajorVersion, fgState.MinorVersion, fgState.ContextFlags ); + } + else + { + fgWarning( "Success 3.0" ); + wglMakeCurrent( NULL, NULL ); + wglDeleteContext( window->Window.Context ); + window->Window.Context = context; + } + return GL_TRUE; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sp...@us...> - 2009-02-13 18:29:02
|
Revision: 772 http://freeglut.svn.sourceforge.net/freeglut/?rev=772&view=rev Author: spanne Date: 2009-02-13 18:28:58 +0000 (Fri, 13 Feb 2009) Log Message: ----------- Synchronized WGL behavior with GLX implementation: Do not call the new context creation API when it is not required. Fixing a bug in a previous commit on the way... :-} Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2009-02-13 18:24:46 UTC (rev 771) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2009-02-13 18:28:58 UTC (rev 772) @@ -307,8 +307,8 @@ int attribs[7]; PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB; - if( (fgState.ContextFlags & GLUT_FORWARD_COMPATIBLE) && - (fgState.MajorVersion > 2) ) + /* If nothing fancy has been required, leave the context as it is */ + if ( fgState.MajorVersion == 1 && fgState.MinorVersion == 0 && fgState.ContextFlags == 0 ) { return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2009-02-18 18:30:17
|
Revision: 779 http://freeglut.svn.sourceforge.net/freeglut/?rev=779&view=rev Author: fayjf Date: 2009-02-18 18:30:12 +0000 (Wed, 18 Feb 2009) Log Message: ----------- Fixing a build error caused by a variable declaration being out of place Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2009-02-15 21:12:25 UTC (rev 778) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2009-02-18 18:30:12 UTC (rev 779) @@ -306,6 +306,7 @@ HGLRC context; int attribs[7]; PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB; + const char * pWglExtString; /* If nothing fancy has been required, leave the context as it is */ if ( fgState.MajorVersion == 1 && fgState.MinorVersion == 0 && fgState.ContextFlags == 0 ) @@ -322,7 +323,7 @@ return; } - const char * pWglExtString=wglGetEntensionsStringARB(window->Window.Device); + pWglExtString=wglGetEntensionsStringARB(window->Window.Device); if (( pWglExtString == NULL ) || ( strstr(pWglExtString, "WGL_ARB_create_context") == NULL )) { return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sp...@us...> - 2009-02-28 17:09:24
|
Revision: 785 http://freeglut.svn.sourceforge.net/freeglut/?rev=785&view=rev Author: spanne Date: 2009-02-28 17:09:15 +0000 (Sat, 28 Feb 2009) Log Message: ----------- Do not try to destroy a GLX context when there is none, e.g. when glXCreateContextAttribsARB is not there. Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2009-02-28 13:09:22 UTC (rev 784) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2009-02-28 17:09:15 UTC (rev 785) @@ -1025,7 +1025,8 @@ { #if TARGET_HOST_POSIX_X11 - glXDestroyContext( fgDisplay.Display, window->Window.Context ); + if( window->Window.Context ) + glXDestroyContext( fgDisplay.Display, window->Window.Context ); XFree( window->Window.FBConfig ); XDestroyWindow( fgDisplay.Display, window->Window.Handle ); /* XFlush( fgDisplay.Display ); */ /* XXX Shouldn't need this */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2009-12-24 04:05:53
|
Revision: 866 http://freeglut.svn.sourceforge.net/freeglut/?rev=866&view=rev Author: fayjf Date: 2009-12-24 04:05:46 +0000 (Thu, 24 Dec 2009) Log Message: ----------- Rearranged some of the configuration-dependent code with an eye to simplifying it. Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2009-12-24 03:06:22 UTC (rev 865) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2009-12-24 04:05:46 UTC (rev 866) @@ -38,19 +38,109 @@ # ifdef FREEGLUT_LIB_PRAGMAS # pragma comment( lib, "Aygshell.lib" ) # endif +#endif /* defined(_WIN32_WCE) */ -static wchar_t* fghWstrFromStr(const char* str) -{ - int i,len=strlen(str); - wchar_t* wstr = (wchar_t*)malloc(2*len+2); - for(i=0; i<len; i++) - wstr[i] = str[i]; - wstr[len] = 0; - return wstr; -} -#endif /* defined(_WIN32_WCE) */ +#if TARGET_HOST_POSIX_X11 +#ifndef GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB +#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2 +#endif +#ifndef GLX_CONTEXT_MAJOR_VERSION_ARB +#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#endif + +#ifndef GLX_CONTEXT_MINOR_VERSION_ARB +#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 +#endif + +#ifndef GLX_CONTEXT_FLAGS_ARB +#define GLX_CONTEXT_FLAGS_ARB 0x2094 +#endif + +#ifndef GLX_CONTEXT_PROFILE_MASK_ARB +#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126 +#endif + +#ifndef GLX_CONTEXT_DEBUG_BIT_ARB +#define GLX_CONTEXT_DEBUG_BIT_ARB 0x0001 +#endif + +#ifndef GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB +#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 +#endif + +#ifndef GLX_CONTEXT_CORE_PROFILE_BIT_ARB +#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 +#endif + +#ifndef GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB +#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 +#endif + +#ifndef GLX_RGBA_FLOAT_TYPE +#define GLX_RGBA_FLOAT_TYPE 0x20B9 +#endif + +#ifndef GLX_RGBA_FLOAT_BIT +#define GLX_RGBA_FLOAT_BIT 0x00000004 +#endif +#endif /* TARGET_HOST_POSIX_X11 */ + + +#if TARGET_HOST_MS_WINDOWS +/* The following include file is available from SGI but is not standard: + * #include <GL/wglext.h> + * So we copy the necessary parts out of it. + * XXX: should local definitions for extensions be put in a separate include file? + */ +typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc); + +typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); + +#define WGL_DRAW_TO_WINDOW_ARB 0x2001 +#define WGL_ACCELERATION_ARB 0x2003 +#define WGL_SUPPORT_OPENGL_ARB 0x2010 +#define WGL_DOUBLE_BUFFER_ARB 0x2011 +#define WGL_COLOR_BITS_ARB 0x2014 +#define WGL_ALPHA_BITS_ARB 0x201B +#define WGL_DEPTH_BITS_ARB 0x2022 +#define WGL_STENCIL_BITS_ARB 0x2023 +#define WGL_FULL_ACCELERATION_ARB 0x2027 + +#define WGL_SAMPLE_BUFFERS_ARB 0x2041 +#define WGL_SAMPLES_ARB 0x2042 + +#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 + +#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 + +#ifndef WGL_ARB_create_context +#define WGL_ARB_create_context 1 +#ifdef WGL_WGLEXT_PROTOTYPES +extern HGLRC WINAPI wglCreateContextAttribsARB (HDC, HGLRC, const int *); +#endif /* WGL_WGLEXT_PROTOTYPES */ +typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList); + +#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 +#define WGL_CONTEXT_FLAGS_ARB 0x2094 +#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 + +#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 +#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 + +#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 +#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 + +#define ERROR_INVALID_VERSION_ARB 0x2095 +#define ERROR_INVALID_PROFILE_ARB 0x2096 +#endif + +#endif /* TARGET_HOST_MS_WINDOWS */ + + /* pushing attribute/value pairs into an array */ #define ATTRIB(a) attributes[where++]=(a) #define ATTRIB_VAL(a,v) {ATTRIB(a); ATTRIB(v);} @@ -122,15 +212,14 @@ fgState.ContextProfile ); } + +/* -- SYSTEM-DEPENDENT PRIVATE FUNCTIONS ------------------------------------ */ + +#if TARGET_HOST_POSIX_X11 /* * Chooses a visual basing on the current display mode settings */ -#if TARGET_HOST_POSIX_X11 -#ifndef GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB -#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2 -#endif - GLXFBConfig* fgChooseFBConfig( void ) { GLboolean wantIndexedMode = GL_FALSE; @@ -299,61 +388,178 @@ return fbconfig; } } -#endif /* TARGET_HOST_POSIX_X11 */ -/* - * Setup the pixel format for a Win32 window - */ -#if TARGET_HOST_MS_WINDOWS -/* The following include file is available from SGI but is not standard: - * #include <GL/wglext.h> - * So we copy the necessary parts out of it. - * XXX: should local definitions for extensions be put in a separate include file? - */ -typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc); -typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); +static void fghFillContextAttributes( int *attributes ) { + int where = 0, contextFlags, contextProfile; -#define WGL_DRAW_TO_WINDOW_ARB 0x2001 -#define WGL_ACCELERATION_ARB 0x2003 -#define WGL_SUPPORT_OPENGL_ARB 0x2010 -#define WGL_DOUBLE_BUFFER_ARB 0x2011 -#define WGL_COLOR_BITS_ARB 0x2014 -#define WGL_ALPHA_BITS_ARB 0x201B -#define WGL_DEPTH_BITS_ARB 0x2022 -#define WGL_STENCIL_BITS_ARB 0x2023 -#define WGL_FULL_ACCELERATION_ARB 0x2027 + if ( !fghIsLegacyContextVersionRequested() ) { + ATTRIB_VAL( GLX_CONTEXT_MAJOR_VERSION_ARB, fgState.MajorVersion ); + ATTRIB_VAL( GLX_CONTEXT_MINOR_VERSION_ARB, fgState.MinorVersion ); + } -#define WGL_SAMPLE_BUFFERS_ARB 0x2041 -#define WGL_SAMPLES_ARB 0x2042 + contextFlags = + fghMapBit( fgState.ContextFlags, GLUT_DEBUG, GLX_CONTEXT_DEBUG_BIT_ARB ) | + fghMapBit( fgState.ContextFlags, GLUT_FORWARD_COMPATIBLE, GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB ); + if ( contextFlags != 0 ) { + ATTRIB_VAL( GLX_CONTEXT_FLAGS_ARB, contextFlags ); + } -#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 + contextProfile = + fghMapBit( fgState.ContextProfile, GLUT_CORE_PROFILE, GLX_CONTEXT_CORE_PROFILE_BIT_ARB ) | + fghMapBit( fgState.ContextProfile, GLUT_COMPATIBILITY_PROFILE, GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB ); + if ( contextProfile != 0 ) { + ATTRIB_VAL( GLX_CONTEXT_PROFILE_MASK_ARB, contextProfile ); + } -#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 + ATTRIB( 0 ); +} -#ifndef WGL_ARB_create_context -#define WGL_ARB_create_context 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern HGLRC WINAPI wglCreateContextAttribsARB (HDC, HGLRC, const int *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList); +typedef GLXContext (*CreateContextAttribsProc)(Display *dpy, GLXFBConfig config, + GLXContext share_list, Bool direct, + const int *attrib_list); -#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 -#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 -#define WGL_CONTEXT_FLAGS_ARB 0x2094 -#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 +static GLXContext fghCreateNewContext( SFG_Window* window ) +{ + /* for color model calculation */ + int menu = ( window->IsMenu && !fgStructure.MenuContext ); + int index_mode = ( fgState.DisplayMode & GLUT_INDEX ); -#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 -#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 + /* "classic" context creation */ + Display *dpy = fgDisplay.Display; + GLXFBConfig config = *(window->Window.FBConfig); + int render_type = ( !menu && index_mode ) ? GLX_COLOR_INDEX_TYPE : GLX_RGBA_TYPE; + GLXContext share_list = NULL; + Bool direct = ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT ); + GLXContext context; -#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 -#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 + /* new context creation */ + int attributes[9]; + CreateContextAttribsProc createContextAttribs; -#define ERROR_INVALID_VERSION_ARB 0x2095 -#define ERROR_INVALID_PROFILE_ARB 0x2096 -#endif + /* If nothing fancy has been required, simply use the old context creation GLX API entry */ + if ( fghIsLegacyContextRequested() ) + { + context = glXCreateNewContext( dpy, config, render_type, share_list, direct ); + if ( context == NULL ) { + fghContextCreationError(); + } + return context; + } + /* color index mode is not available anymore with OpenGL 3.0 */ + if ( render_type == GLX_COLOR_INDEX_TYPE ) { + fgWarning( "color index mode is deprecated, using RGBA mode" ); + } + + fghFillContextAttributes( attributes ); + + createContextAttribs = (CreateContextAttribsProc) fghGetProcAddress( "glXCreateContextAttribsARB" ); + if ( createContextAttribs == NULL ) { + fgError( "glXCreateContextAttribsARB not found" ); + } + + context = createContextAttribs( dpy, config, share_list, direct, attributes ); + if ( context == NULL ) { + fghContextCreationError(); + } + return context; +} + + +#define _NET_WM_STATE_TOGGLE 2 +static int fghResizeFullscrToggle(void) +{ + XWindowAttributes attributes; + + if(glutGet(GLUT_FULL_SCREEN)) { + /* restore original window size */ + SFG_Window *win = fgStructure.CurrentWindow; + fgStructure.CurrentWindow->State.NeedToResize = GL_TRUE; + fgStructure.CurrentWindow->State.Width = win->State.OldWidth; + fgStructure.CurrentWindow->State.Height = win->State.OldHeight; + + } else { + /* resize the window to cover the entire screen */ + 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); + } + return 0; +} + +static int fghEwmhFullscrToggle(void) +{ + XEvent xev; + long evmask = SubstructureRedirectMask | SubstructureNotifyMask; + + if(!fgDisplay.State || !fgDisplay.StateFullScreen) { + return -1; + } + + xev.type = ClientMessage; + xev.xclient.window = fgStructure.CurrentWindow->Window.Handle; + xev.xclient.message_type = fgDisplay.State; + xev.xclient.format = 32; + xev.xclient.data.l[0] = _NET_WM_STATE_TOGGLE; + xev.xclient.data.l[1] = fgDisplay.StateFullScreen; + xev.xclient.data.l[2] = 0; /* no second property to toggle */ + xev.xclient.data.l[3] = 1; /* source indication: application */ + xev.xclient.data.l[4] = 0; /* unused */ + + if(!XSendEvent(fgDisplay.Display, fgDisplay.RootWindow, 0, evmask, &xev)) { + return -1; + } + return 0; +} + +static int fghToggleFullscreen(void) +{ + /* first try the EWMH (_NET_WM_STATE) method ... */ + if(fghEwmhFullscrToggle() != -1) { + return 0; + } + + /* fall back to resizing the window */ + if(fghResizeFullscrToggle() != -1) { + return 0; + } + return -1; +} + + +#endif /* TARGET_HOST_POSIX_X11 */ + + +#if TARGET_HOST_MS_WINDOWS +/* + * Setup the pixel format for a Win32 window + */ + +#if defined(_WIN32_WCE) +static wchar_t* fghWstrFromStr(const char* str) +{ + int i,len=strlen(str); + wchar_t* wstr = (wchar_t*)malloc(2*len+2); + for(i=0; i<len; i++) + wstr[i] = str[i]; + wstr[len] = 0; + return wstr; +} +#endif /* defined(_WIN32_WCE) */ + + static void fghFillContextAttributes( int *attributes ) { int where = 0, contextFlags, contextProfile; @@ -583,8 +789,9 @@ return ( pixelformat != 0 ) && ( checkOnly || SetPixelFormat( window->Window.Device, pixelformat, ppfd ) ); #endif /* defined(_WIN32_WCE) */ } -#endif /* TARGET_HOST_MS_WINDOWS */ +#endif /* TARGET_HOST_MS_WINDOWS */ + /* * Sets the OpenGL context and the fgStructure "Current Window" pointer to * the window structure passed in. @@ -620,126 +827,6 @@ -#if TARGET_HOST_POSIX_X11 - -#ifndef GLX_CONTEXT_MAJOR_VERSION_ARB -#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#endif - -#ifndef GLX_CONTEXT_MINOR_VERSION_ARB -#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 -#endif - -#ifndef GLX_CONTEXT_FLAGS_ARB -#define GLX_CONTEXT_FLAGS_ARB 0x2094 -#endif - -#ifndef GLX_CONTEXT_PROFILE_MASK_ARB -#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126 -#endif - -#ifndef GLX_CONTEXT_DEBUG_BIT_ARB -#define GLX_CONTEXT_DEBUG_BIT_ARB 0x0001 -#endif - -#ifndef GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB -#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 -#endif - -#ifndef GLX_CONTEXT_CORE_PROFILE_BIT_ARB -#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 -#endif - -#ifndef GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB -#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 -#endif - -#ifndef GLX_RGBA_FLOAT_TYPE -#define GLX_RGBA_FLOAT_TYPE 0x20B9 -#endif - -#ifndef GLX_RGBA_FLOAT_BIT -#define GLX_RGBA_FLOAT_BIT 0x00000004 -#endif - -static void fghFillContextAttributes( int *attributes ) { - int where = 0, contextFlags, contextProfile; - - if ( !fghIsLegacyContextVersionRequested() ) { - ATTRIB_VAL( GLX_CONTEXT_MAJOR_VERSION_ARB, fgState.MajorVersion ); - ATTRIB_VAL( GLX_CONTEXT_MINOR_VERSION_ARB, fgState.MinorVersion ); - } - - contextFlags = - fghMapBit( fgState.ContextFlags, GLUT_DEBUG, GLX_CONTEXT_DEBUG_BIT_ARB ) | - fghMapBit( fgState.ContextFlags, GLUT_FORWARD_COMPATIBLE, GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB ); - if ( contextFlags != 0 ) { - ATTRIB_VAL( GLX_CONTEXT_FLAGS_ARB, contextFlags ); - } - - contextProfile = - fghMapBit( fgState.ContextProfile, GLUT_CORE_PROFILE, GLX_CONTEXT_CORE_PROFILE_BIT_ARB ) | - fghMapBit( fgState.ContextProfile, GLUT_COMPATIBILITY_PROFILE, GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB ); - if ( contextProfile != 0 ) { - ATTRIB_VAL( GLX_CONTEXT_PROFILE_MASK_ARB, contextProfile ); - } - - ATTRIB( 0 ); -} - -typedef GLXContext (*CreateContextAttribsProc)(Display *dpy, GLXFBConfig config, - GLXContext share_list, Bool direct, - const int *attrib_list); - -static GLXContext fghCreateNewContext( SFG_Window* window ) -{ - /* for color model calculation */ - int menu = ( window->IsMenu && !fgStructure.MenuContext ); - int index_mode = ( fgState.DisplayMode & GLUT_INDEX ); - - /* "classic" context creation */ - Display *dpy = fgDisplay.Display; - GLXFBConfig config = *(window->Window.FBConfig); - int render_type = ( !menu && index_mode ) ? GLX_COLOR_INDEX_TYPE : GLX_RGBA_TYPE; - GLXContext share_list = NULL; - Bool direct = ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT ); - GLXContext context; - - /* new context creation */ - int attributes[9]; - CreateContextAttribsProc createContextAttribs; - - /* If nothing fancy has been required, simply use the old context creation GLX API entry */ - if ( fghIsLegacyContextRequested() ) - { - context = glXCreateNewContext( dpy, config, render_type, share_list, direct ); - if ( context == NULL ) { - fghContextCreationError(); - } - return context; - } - - /* color index mode is not available anymore with OpenGL 3.0 */ - if ( render_type == GLX_COLOR_INDEX_TYPE ) { - fgWarning( "color index mode is deprecated, using RGBA mode" ); - } - - fghFillContextAttributes( attributes ); - - createContextAttribs = (CreateContextAttribsProc) fghGetProcAddress( "glXCreateContextAttribsARB" ); - if ( createContextAttribs == NULL ) { - fgError( "glXCreateContextAttribsARB not found" ); - } - - context = createContextAttribs( dpy, config, share_list, direct, attributes ); - if ( context == NULL ) { - fghContextCreationError(); - } - return context; -} -#endif - - /* * Opens a window. Requires a SFG_Window object created and attached * to the freeglut structure. OpenGL context is created here. @@ -1556,83 +1643,6 @@ #endif } -#if TARGET_HOST_POSIX_X11 -static int ewmh_fullscr_toggle(void); -static int resize_fullscr_toogle(void); - -static int toggle_fullscreen(void) -{ - /* first try the EWMH (_NET_WM_STATE) method ... */ - if(ewmh_fullscr_toggle() != -1) { - return 0; - } - - /* fall back to resizing the window */ - if(resize_fullscr_toogle() != -1) { - return 0; - } - return -1; -} - -#define _NET_WM_STATE_TOGGLE 2 -static int ewmh_fullscr_toggle(void) -{ - XEvent xev; - long evmask = SubstructureRedirectMask | SubstructureNotifyMask; - - if(!fgDisplay.State || !fgDisplay.StateFullScreen) { - return -1; - } - - xev.type = ClientMessage; - xev.xclient.window = fgStructure.CurrentWindow->Window.Handle; - xev.xclient.message_type = fgDisplay.State; - xev.xclient.format = 32; - xev.xclient.data.l[0] = _NET_WM_STATE_TOGGLE; - xev.xclient.data.l[1] = fgDisplay.StateFullScreen; - xev.xclient.data.l[2] = 0; /* no second property to toggle */ - xev.xclient.data.l[3] = 1; /* source indication: application */ - xev.xclient.data.l[4] = 0; /* unused */ - - if(!XSendEvent(fgDisplay.Display, fgDisplay.RootWindow, 0, evmask, &xev)) { - return -1; - } - return 0; -} - -static int resize_fullscr_toogle(void) -{ - XWindowAttributes attributes; - - if(glutGet(GLUT_FULL_SCREEN)) { - /* restore original window size */ - SFG_Window *win = fgStructure.CurrentWindow; - fgStructure.CurrentWindow->State.NeedToResize = GL_TRUE; - fgStructure.CurrentWindow->State.Width = win->State.OldWidth; - fgStructure.CurrentWindow->State.Height = win->State.OldHeight; - - } else { - /* resize the window to cover the entire screen */ - 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); - } - return 0; -} -#endif /* TARGET_HOST_POSIX_X11 */ - - /* * Resize the current window so that it fits the whole screen */ @@ -1647,7 +1657,7 @@ #if TARGET_HOST_POSIX_X11 if(!glutGet(GLUT_FULL_SCREEN)) { - if(toggle_fullscreen() != -1) { + if(fghToggleFullscreen() != -1) { win->State.IsFullscreen = GL_TRUE; } } @@ -1711,7 +1721,7 @@ win = fgStructure.CurrentWindow; #if TARGET_HOST_POSIX_X11 - if(toggle_fullscreen() != -1) { + if(fghToggleFullscreen() != -1) { win->State.IsFullscreen = !win->State.IsFullscreen; } #elif TARGET_HOST_MS_WINDOWS This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2010-02-01 03:02:50
|
Revision: 875 http://freeglut.svn.sourceforge.net/freeglut/?rev=875&view=rev Author: fayjf Date: 2010-02-01 03:02:44 +0000 (Mon, 01 Feb 2010) Log Message: ----------- Allowing recent change to build on older versions of MSVC per e-mail from Eero Pajarre dated 1/31/10 at 10:00 AM Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2010-01-30 00:54:59 UTC (rev 874) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2010-02-01 03:02:44 UTC (rev 875) @@ -827,6 +827,7 @@ #if TARGET_HOST_MS_WINDOWS +#if(WINVER >= 0x500) typedef struct { int *x; int *y; @@ -859,7 +860,7 @@ * this function is only used in fgOpenWindow. Currently it only sets * its output parameters, if the DisplayName is set in fgDisplay * (and if it is able to recognize the display) -*/ + */ static void get_display_origin(int *xp,int *yp) { @@ -872,7 +873,18 @@ EnumDisplayMonitors(0,0,m_proc,(LPARAM)&st); } } +#else +#pragma message( "-display parameter only works if compiled with WINVER >= 0x0500") + +static void get_display_origin(int *xp,int *yp) +{ + if( fgDisplay.DisplayName ) + { + fgWarning( "for working -display support FreeGLUT must be compiled with WINVER >= 0x0500"); + } +} #endif +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2010-05-29 02:07:30
|
Revision: 876 http://freeglut.svn.sourceforge.net/freeglut/?rev=876&view=rev Author: fayjf Date: 2010-05-29 02:07:21 +0000 (Sat, 29 May 2010) Log Message: ----------- Fixing "fgDestroyWindow" error per e-mail from John Tsiombikas dated Wed, 26 May 2010 13:16:28 +0200 Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2010-02-01 03:02:44 UTC (rev 875) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2010-05-29 02:07:21 UTC (rev 876) @@ -1282,7 +1282,10 @@ if( window->Window.Context ) glXDestroyContext( fgDisplay.Display, window->Window.Context ); XFree( window->Window.FBConfig ); - XDestroyWindow( fgDisplay.Display, window->Window.Handle ); + + if( window->Window.Handle ) { + XDestroyWindow( fgDisplay.Display, window->Window.Handle ); + } /* XFlush( fgDisplay.Display ); */ /* XXX Shouldn't need this */ #elif TARGET_HOST_MS_WINDOWS This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2011-01-25 05:17:19
|
Revision: 888 http://freeglut.svn.sourceforge.net/freeglut/?rev=888&view=rev Author: fayjf Date: 2011-01-25 05:17:12 +0000 (Tue, 25 Jan 2011) Log Message: ----------- Fixing bug report 3021598 by modifying "glutSetWindow" under Windows so that it only releases and gets the device context if the window is being set to a new window Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2011-01-23 22:30:13 UTC (rev 887) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2011-01-25 05:17:12 UTC (rev 888) @@ -812,17 +812,20 @@ ); } #elif TARGET_HOST_MS_WINDOWS - if( fgStructure.CurrentWindow ) - ReleaseDC( fgStructure.CurrentWindow->Window.Handle, - fgStructure.CurrentWindow->Window.Device ); + if ( window != fgStructure.CurrentWindow ) + { + if( fgStructure.CurrentWindow ) + ReleaseDC( fgStructure.CurrentWindow->Window.Handle, + fgStructure.CurrentWindow->Window.Device ); - if ( window ) - { - window->Window.Device = GetDC( window->Window.Handle ); - wglMakeCurrent( - window->Window.Device, - window->Window.Context - ); + if ( window ) + { + window->Window.Device = GetDC( window->Window.Handle ); + wglMakeCurrent( + window->Window.Device, + window->Window.Context + ); + } } #endif fgStructure.CurrentWindow = window; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2011-01-25 05:43:44
|
Revision: 889 http://freeglut.svn.sourceforge.net/freeglut/?rev=889&view=rev Author: fayjf Date: 2011-01-25 05:43:37 +0000 (Tue, 25 Jan 2011) Log Message: ----------- Fixing bug 3105058. There is a possibly substantial change on line 783, where the "window->Window.Device" is replaced with "hDC" rather than "current_hDC" which was assigned to its value earlier. Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2011-01-25 05:17:12 UTC (rev 888) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2011-01-25 05:43:37 UTC (rev 889) @@ -733,10 +733,17 @@ PIXELFORMATDESCRIPTOR pfd; PIXELFORMATDESCRIPTOR* ppfd = &pfd; int pixelformat; + HDC current_hDC; + GLboolean success; - fghFillPFD( ppfd, window->Window.Device, layer_type ); - pixelformat = ChoosePixelFormat( window->Window.Device, ppfd ); + if (checkOnly) + current_hDC = CreateDC(TEXT("DISPLAY"), NULL ,NULL ,NULL); + else + current_hDC = window->Window.Device; + fghFillPFD( ppfd, current_hDC, layer_type ); + pixelformat = ChoosePixelFormat( current_hDC, ppfd ); + /* windows hack for multismapling/sRGB */ if ( ( fgState.DisplayMode & GLUT_MULTISAMPLE ) || ( fgState.DisplayMode & GLUT_SRGB ) ) @@ -757,10 +764,10 @@ hWnd=CreateWindow(_T("FREEGLUT_dummy"), _T(""), WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW , 0,0,0,0, 0, 0, fgDisplay.Instance, 0 ); hDC=GetDC(hWnd); SetPixelFormat( hDC, pixelformat, ppfd ); - + rc = wglCreateContext( hDC ); wglMakeCurrent(hDC, rc); - + if ( fghIsExtensionSupported( hDC, "WGL_ARB_multisample" ) ) { PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARBProc = @@ -773,7 +780,7 @@ float fAttributes[] = { 0, 0 }; UINT numFormats; fghFillPixelFormatAttributes( attributes, ppfd ); - bValid = wglChoosePixelFormatARBProc(window->Window.Device, attributes, fAttributes, 1, &iPixelFormat, &numFormats); + bValid = wglChoosePixelFormatARBProc(hDC, attributes, fAttributes, 1, &iPixelFormat, &numFormats); if ( bValid && numFormats > 0 ) { @@ -789,7 +796,12 @@ UnregisterClass(_T("FREEGLUT_dummy"), fgDisplay.Instance); } - return ( pixelformat != 0 ) && ( checkOnly || SetPixelFormat( window->Window.Device, pixelformat, ppfd ) ); + success = ( pixelformat != 0 ) && ( checkOnly || SetPixelFormat( current_hDC, pixelformat, ppfd ) ); + + if (checkOnly) + DeleteDC(current_hDC); + + return success; #endif /* defined(_WIN32_WCE) */ } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2011-01-25 05:48:02
|
Revision: 890 http://freeglut.svn.sourceforge.net/freeglut/?rev=890&view=rev Author: fayjf Date: 2011-01-25 05:47:56 +0000 (Tue, 25 Jan 2011) Log Message: ----------- Fixing bug report 3104860 -- setting the accumulator bits to one if GLUT_ACCUM is set (Windows code only) Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2011-01-25 05:43:37 UTC (rev 889) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2011-01-25 05:47:56 UTC (rev 890) @@ -679,7 +679,7 @@ ppfd->cGreenShift = 0; ppfd->cBlueShift = 0; ppfd->cAlphaShift = 0; - ppfd->cAccumBits = 0; + ppfd->cAccumBits = ( fgState.DisplayMode & GLUT_ACCUM ) ? 1 : 0; ppfd->cAccumRedBits = 0; ppfd->cAccumGreenBits = 0; ppfd->cAccumBlueBits = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2011-01-25 05:56:44
|
Revision: 891 http://freeglut.svn.sourceforge.net/freeglut/?rev=891&view=rev Author: fayjf Date: 2011-01-25 05:56:38 +0000 (Tue, 25 Jan 2011) Log Message: ----------- Fixing bug 3048705 -- "fgOpenWindow should only return after the window opens". This is a *nix change and I am building on Windows, so somebody else needs to test this change. Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2011-01-25 05:47:56 UTC (rev 890) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2011-01-25 05:56:38 UTC (rev 891) @@ -31,6 +31,7 @@ #if TARGET_HOST_POSIX_X11 #include <limits.h> /* LONG_MAX */ +#include <unistd.h> /* usleep */ #endif #if defined(_WIN32_WCE) @@ -905,7 +906,15 @@ #endif +#if TARGET_HOST_POSIX_X11 +static Bool fghWindowIsVisible( Display *display, XEvent *event, XPointer arg) +{ + Window window = arg; + return (event->type == MapNotify) && (event->xmap.window == window); +} +#endif + /* * Opens a window. Requires a SFG_Window object created and attached * to the freeglut structure. OpenGL context is created here. @@ -921,6 +930,7 @@ XTextProperty textProperty; XSizeHints sizeHints; XWMHints wmHints; + XEvent eventReturnBuffer; /* return buffer required for a call */ unsigned long mask; int num_FBConfigs, i; unsigned int current_DisplayMode = fgState.DisplayMode ; @@ -1114,6 +1124,9 @@ XFree(visualInfo); + if( !isSubWindow) + XPeekIfEvent( fgDisplay.Display, &eventReturnBuffer, &fghWindowIsVisible, window->Window.Handle ); + #elif TARGET_HOST_MS_WINDOWS WNDCLASS wc; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2011-06-01 11:44:06
|
Revision: 922 http://freeglut.svn.sourceforge.net/freeglut/?rev=922&view=rev Author: fayjf Date: 2011-06-01 11:44:00 +0000 (Wed, 01 Jun 2011) Log Message: ----------- Fixing a 'gamemode at_exit' bug courtesy of Diederick Niehorster per e-mail dated 6/1/11 1:50 AM Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2011-05-27 20:37:31 UTC (rev 921) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2011-06-01 11:44:00 UTC (rev 922) @@ -1332,10 +1332,11 @@ */ void fgCloseWindow( SFG_Window* window ) { - /* if we're in gamemode, call glutLeaveGameMode first to make sure the - * gamemode is properly closed before closing the window + /* if we're in gamemode and we're closing the gamemode window, + * call glutLeaveGameMode first to make sure the gamemode is + * properly closed before closing the window */ - if (fgStructure.GameModeWindow != NULL) + if (fgStructure.GameModeWindow != NULL && fgStructure.GameModeWindow->ID==window->ID) glutLeaveGameMode(); #if TARGET_HOST_POSIX_X11 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2011-09-04 19:58:25
|
Revision: 930 http://freeglut.svn.sourceforge.net/freeglut/?rev=930&view=rev Author: fayjf Date: 2011-09-04 19:58:20 +0000 (Sun, 04 Sep 2011) Log Message: ----------- Fixing the build after Diederick Niehorster's full screen fixes: they are only valid for WINVER >= 0x0500. Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2011-09-04 19:38:32 UTC (rev 929) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2011-09-04 19:58:20 UTC (rev 930) @@ -2000,6 +2000,7 @@ } { +#if(WINVER >= 0x0500) DWORD s; RECT rect; HMONITOR hMonitor; @@ -2031,7 +2032,24 @@ mi.cbSize = sizeof(mi); GetMonitorInfo(hMonitor, &mi); rect = mi.rcMonitor; +#else /* if (WINVER >= 0x0500) */ + RECT rect; + /* For fullscreen mode, force the top-left corner to 0,0 + * and adjust the window rectangle so that the client area + * covers the whole screen. + */ + + rect.left = 0; + rect.top = 0; + get_display_origin(&rect.left,&rect.top); + rect.right = fgDisplay.ScreenWidth+rect.left; + rect.bottom = fgDisplay.ScreenHeight+rect.top; + + AdjustWindowRect ( &rect, WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | + WS_CLIPCHILDREN, FALSE ); +#endif /* (WINVER >= 0x0500) */ + /* * then resize window * SWP_NOACTIVATE Do not activate the window @@ -2048,7 +2066,7 @@ SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSENDCHANGING | SWP_NOZORDER ); - + win->State.IsFullscreen = GL_TRUE; } #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2011-09-05 17:26:36
|
Revision: 937 http://freeglut.svn.sourceforge.net/freeglut/?rev=937&view=rev Author: fayjf Date: 2011-09-05 17:26:30 +0000 (Mon, 05 Sep 2011) Log Message: ----------- Addressing bug report 3368139 about warnings under OpenSUSE. I added two explicit casts and an initialization. Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2011-09-05 13:07:43 UTC (rev 936) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2011-09-05 17:26:30 UTC (rev 937) @@ -1076,7 +1076,7 @@ #if TARGET_HOST_POSIX_X11 static Bool fghWindowIsVisible( Display *display, XEvent *event, XPointer arg) { - Window window = arg; + Window window = (Window)arg; return (event->type == MapNotify) && (event->xmap.window == window); } #endif @@ -1092,7 +1092,7 @@ GLboolean gameMode, GLboolean isSubWindow ) { #if TARGET_HOST_POSIX_X11 - XVisualInfo * visualInfo; + XVisualInfo * visualInfo = NULL; XSetWindowAttributes winAttr; XTextProperty textProperty; XSizeHints sizeHints; @@ -1297,7 +1297,7 @@ XFree(visualInfo); if( !isSubWindow) - XPeekIfEvent( fgDisplay.Display, &eventReturnBuffer, &fghWindowIsVisible, window->Window.Handle ); + XPeekIfEvent( fgDisplay.Display, &eventReturnBuffer, &fghWindowIsVisible, (XPointer)(window->Window.Handle) ); #elif TARGET_HOST_MS_WINDOWS This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fa...@us...> - 2011-11-06 13:54:49
|
Revision: 943 http://freeglut.svn.sourceforge.net/freeglut/?rev=943&view=rev Author: fayjf Date: 2011-11-06 13:54:43 +0000 (Sun, 06 Nov 2011) Log Message: ----------- Patching to fix "glXCreateContextAttribsARB not found" problem per e-mail from John Tsiombikas dated 11/3/2011 7:02 PM Modified Paths: -------------- trunk/freeglut/freeglut/src/freeglut_window.c Modified: trunk/freeglut/freeglut/src/freeglut_window.c =================================================================== --- trunk/freeglut/freeglut/src/freeglut_window.c 2011-09-28 01:37:26 UTC (rev 942) +++ trunk/freeglut/freeglut/src/freeglut_window.c 2011-11-06 13:54:43 UTC (rev 943) @@ -177,7 +177,7 @@ static int fghIsLegacyContextVersionRequested( void ) { - return fgState.MajorVersion == 1 && fgState.MinorVersion == 0; + return fgState.MajorVersion < 2 || (fgState.MajorVersion == 2 && fgState.MinorVersion <= 1); } static int fghIsLegacyContextRequested( void ) @@ -443,10 +443,17 @@ /* new context creation */ int attributes[9]; - CreateContextAttribsProc createContextAttribs; + CreateContextAttribsProc createContextAttribs = (CreateContextAttribsProc) fghGetProcAddress( "glXCreateContextAttribsARB" ); + + /* glXCreateContextAttribsARB not found, yet the user has requested the new context creation */ + if ( !createContextAttribs && !fghIsLegacyContextRequested() ) { + fgWarning( "OpenGL >2.1 context requested but glXCreateContextAttribsARB is not available! Falling back to legacy context creation" ); + fgState.MajorVersion = 2; + fgState.MinorVersion = 1; + } /* If nothing fancy has been required, simply use the old context creation GLX API entry */ - if ( fghIsLegacyContextRequested() ) + if ( fghIsLegacyContextRequested() || !createContextAttribs ) { context = glXCreateNewContext( dpy, config, render_type, share_list, direct ); if ( context == NULL ) { @@ -462,11 +469,6 @@ fghFillContextAttributes( attributes ); - createContextAttribs = (CreateContextAttribsProc) fghGetProcAddress( "glXCreateContextAttribsARB" ); - if ( createContextAttribs == NULL ) { - fgError( "glXCreateContextAttribsARB not found" ); - } - context = createContextAttribs( dpy, config, share_list, direct, attributes ); if ( context == NULL ) { fghContextCreationError(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |