X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fmswin%2Ffg_state_mswin.c;h=98468f5f512e6dff9c854f00d7d9d8f58e13f9f1;hb=a0871c21cb859cea6f24802b6828352a211ab102;hp=b8cfb37a25187867521ce800fe7760f2e052e7dc;hpb=67f242b7dd68bea7dea467f9b5265c8448b6655e;p=freeglut diff --git a/src/mswin/fg_state_mswin.c b/src/mswin/fg_state_mswin.c index b8cfb37..98468f5 100644 --- a/src/mswin/fg_state_mswin.c +++ b/src/mswin/fg_state_mswin.c @@ -32,7 +32,7 @@ extern GLboolean fgSetupPixelFormat( SFG_Window* window, GLboolean checkOnly, unsigned char layer_type ); -/* +/* * Helper functions for getting client area from the window rect * and the window rect from the client area given the style of the window * (or a valid window pointer from which the style can be queried). @@ -46,7 +46,14 @@ extern void fghComputeWindowRectFromClientArea_UseStyle( RECT *clientRect, const * #include * 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 @@ -146,7 +153,7 @@ int fgPlatformGlutGet ( GLenum eWhat ) HDC hdc = fgStructure.CurrentWindow->Window.pContext.Device; int iPixelFormat = GetPixelFormat( hdc ); DescribePixelFormat(hdc, iPixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd); - + returnValue = pfd.cColorBits; if (pfd.iPixelType==PFD_TYPE_RGBA) returnValue += pfd.cAlphaBits; @@ -183,7 +190,7 @@ int fgPlatformGlutGet ( GLenum eWhat ) GetWindowRect( fgStructure.CurrentWindow->Window.Handle, &winRect); #else ClientToScreen(fgStructure.CurrentWindow->Window.Handle, &topLeft); - + if (fgStructure.CurrentWindow->Parent) /* For child window, we should return relative to upper-left * of parent's client area. @@ -257,7 +264,7 @@ int fgPlatformGlutGet ( GLenum eWhat ) */ borderWidth = ((winRect.right-winRect.left)-(clientRect.right-clientRect.left))/2; captionHeight = (winRect.bottom-winRect.top)-(clientRect.bottom-clientRect.top)-borderWidth; /* include top border in caption height */ - + switch( eWhat ) { case GLUT_WINDOW_BORDER_WIDTH: @@ -284,12 +291,31 @@ int fgPlatformGlutGet ( GLenum eWhat ) #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; } - return -1; + return -1; } @@ -345,4 +371,4 @@ int *fgPlatformGlutGetModeValues(GLenum eWhat, int *size) { *size = 0; return NULL; -} \ No newline at end of file +}