- fallback to non-sRGB visuals if the context creation failed (GLX-only)
- added new glutGet query: GLUT_WINDOW_SRGB (untested on windows) git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1842 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
20e9df4141
commit
89c58f2256
@ -92,6 +92,8 @@
|
|||||||
|
|
||||||
#define GLUT_ALLOW_NEGATIVE_WINDOW_POSITION 0x0207 /* GLUT doesn't allow negative window positions by default */
|
#define GLUT_ALLOW_NEGATIVE_WINDOW_POSITION 0x0207 /* GLUT doesn't allow negative window positions by default */
|
||||||
|
|
||||||
|
#define GLUT_WINDOW_SRGB 0x007D
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* New tokens for glutInitDisplayMode.
|
* New tokens for glutInitDisplayMode.
|
||||||
* Only one GLUT_AUXn bit may be used at a time.
|
* Only one GLUT_AUXn bit may be used at a time.
|
||||||
|
@ -46,7 +46,14 @@ extern void fghComputeWindowRectFromClientArea_UseStyle( RECT *clientRect, const
|
|||||||
* #include <GL/wglext.h>
|
* #include <GL/wglext.h>
|
||||||
* So we copy the necessary parts out of it to support the multisampling query
|
* So we copy the necessary parts out of it to support the multisampling query
|
||||||
*/
|
*/
|
||||||
|
#ifndef WGL_SAMPLES_ARB
|
||||||
#define WGL_SAMPLES_ARB 0x2042
|
#define WGL_SAMPLES_ARB 0x2042
|
||||||
|
#endif
|
||||||
|
#ifndef WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB
|
||||||
|
#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
|
||||||
|
|
||||||
#if defined(_WIN32_WCE)
|
#if defined(_WIN32_WCE)
|
||||||
# include <Aygshell.h>
|
# include <Aygshell.h>
|
||||||
@ -284,6 +291,25 @@ int fgPlatformGlutGet ( GLenum eWhat )
|
|||||||
#endif /* defined(_WIN32_WCE) */
|
#endif /* defined(_WIN32_WCE) */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case GLUT_WINDOW_SRGB:
|
||||||
|
if( fgStructure.CurrentWindow != NULL ) {
|
||||||
|
static int attr = WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB;
|
||||||
|
static PFNWGLGETPIXELFORMATATTRIBIVARBPROC wglGetPixelFormatAttribivARB;
|
||||||
|
HDC hdc = fgStructure.CurrentWindow->Window.pContext.Device;
|
||||||
|
int ipixfmt = GetPixelFormat(hdc);
|
||||||
|
int val;
|
||||||
|
|
||||||
|
if(!wglGetPixelFormatAttribivARB) {
|
||||||
|
if(!(wglGetPixelFormatAttribivARB = (PFNWGLGETPIXELFORMATATTRIBIVARBPROC)wglGetProcAddress("wglGetPixelFormatAttribivARB"))) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(wglGetPixelFormatAttribivARB(hdc, ipixfmt, 0, 1, &attr, &val)) {
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
fgWarning( "glutGet(): missing enum handle %d", eWhat );
|
fgWarning( "glutGet(): missing enum handle %d", eWhat );
|
||||||
break;
|
break;
|
||||||
|
@ -83,6 +83,7 @@ int fghPlatformGlutGetGLX ( GLenum eWhat )
|
|||||||
GLX_QUERY( GLUT_WINDOW_ACCUM_BLUE_SIZE, GLX_ACCUM_BLUE_SIZE );
|
GLX_QUERY( GLUT_WINDOW_ACCUM_BLUE_SIZE, GLX_ACCUM_BLUE_SIZE );
|
||||||
GLX_QUERY( GLUT_WINDOW_ACCUM_ALPHA_SIZE, GLX_ACCUM_ALPHA_SIZE );
|
GLX_QUERY( GLUT_WINDOW_ACCUM_ALPHA_SIZE, GLX_ACCUM_ALPHA_SIZE );
|
||||||
GLX_QUERY( GLUT_WINDOW_STEREO, GLX_STEREO );
|
GLX_QUERY( GLUT_WINDOW_STEREO, GLX_STEREO );
|
||||||
|
GLX_QUERY( GLUT_WINDOW_SRGB, GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB);
|
||||||
|
|
||||||
# undef GLX_QUERY
|
# undef GLX_QUERY
|
||||||
|
|
||||||
|
@ -182,6 +182,8 @@ void fgPlatformOpenWindow( SFG_Window* window, const char* title,
|
|||||||
fgState.DisplayMode |= GLUT_DOUBLE ;
|
fgState.DisplayMode |= GLUT_DOUBLE ;
|
||||||
fghChooseConfig(&WINDOW_CONFIG);
|
fghChooseConfig(&WINDOW_CONFIG);
|
||||||
fgState.DisplayMode &= ~GLUT_DOUBLE;
|
fgState.DisplayMode &= ~GLUT_DOUBLE;
|
||||||
|
|
||||||
|
if( WINDOW_CONFIG ) goto done_retry;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -190,8 +192,20 @@ void fgPlatformOpenWindow( SFG_Window* window, const char* title,
|
|||||||
fgState.DisplayMode &= ~GLUT_MULTISAMPLE ;
|
fgState.DisplayMode &= ~GLUT_MULTISAMPLE ;
|
||||||
fghChooseConfig(&WINDOW_CONFIG);
|
fghChooseConfig(&WINDOW_CONFIG);
|
||||||
fgState.DisplayMode |= GLUT_MULTISAMPLE;
|
fgState.DisplayMode |= GLUT_MULTISAMPLE;
|
||||||
|
|
||||||
|
if( WINDOW_CONFIG ) goto done_retry;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( fgState.DisplayMode & GLUT_SRGB )
|
||||||
|
{
|
||||||
|
fgState.DisplayMode &= ~GLUT_SRGB ;
|
||||||
|
fghChooseConfig(&WINDOW_CONFIG);
|
||||||
|
fgState.DisplayMode |= GLUT_SRGB;
|
||||||
|
|
||||||
|
if( WINDOW_CONFIG ) goto done_retry;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
done_retry:
|
||||||
|
|
||||||
FREEGLUT_INTERNAL_ERROR_EXIT( WINDOW_CONFIG != NULL,
|
FREEGLUT_INTERNAL_ERROR_EXIT( WINDOW_CONFIG != NULL,
|
||||||
"FBConfig with necessary capabilities not found", "fgOpenWindow" );
|
"FBConfig with necessary capabilities not found", "fgOpenWindow" );
|
||||||
|
Reference in New Issue
Block a user