#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.
* Only one GLUT_AUXn bit may be used at a time.
* #include <GL/wglext.h>
* So we copy the necessary parts out of it to support the multisampling query
*/
+#ifndef WGL_SAMPLES_ARB
#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)
# include <Aygshell.h>
#endif /* defined(_WIN32_WCE) */
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:
fgWarning( "glutGet(): missing enum handle %d", eWhat );
break;
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_STEREO, GLX_STEREO );
+ GLX_QUERY( GLUT_WINDOW_SRGB, GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB);
# undef GLX_QUERY
fgState.DisplayMode |= GLUT_DOUBLE ;
fghChooseConfig(&WINDOW_CONFIG);
fgState.DisplayMode &= ~GLUT_DOUBLE;
+
+ if( WINDOW_CONFIG ) goto done_retry;
}
#endif
fgState.DisplayMode &= ~GLUT_MULTISAMPLE ;
fghChooseConfig(&WINDOW_CONFIG);
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,
"FBConfig with necessary capabilities not found", "fgOpenWindow" );