diff --git a/src/gamma.c b/src/gamma.c index ff97d600..b2416a98 100644 --- a/src/gamma.c +++ b/src/gamma.c @@ -82,7 +82,7 @@ GLFWAPI void glfwSetGammaFormula(float gamma, float blacklevel, float gain) //======================================================================== -// Return the currently set gamma ramp +// Return the cached currently set gamma ramp //======================================================================== GLFWAPI void glfwGetGammaRamp(GLFWgammaramp* ramp) diff --git a/src/win32/platform.h b/src/win32/platform.h index fb9107b8..3ce580f2 100644 --- a/src/win32/platform.h +++ b/src/win32/platform.h @@ -270,7 +270,6 @@ typedef struct _GLFWlibraryWin32 ATOM classAtom; // Window class atom HHOOK keyboardHook; // Keyboard hook handle DWORD foregroundLockTimeout; - HDC desktopDC; // Default monitor struct { diff --git a/src/win32/win32_gamma.c b/src/win32/win32_gamma.c index 71d2645f..fc01cc44 100644 --- a/src/win32/win32_gamma.c +++ b/src/win32/win32_gamma.c @@ -1,11 +1,10 @@ //======================================================================== // GLFW - An OpenGL framework // Platform: Win32/WGL -// API version: 2.7 +// API version: 3.0 // WWW: http://www.glfw.org/ //------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund +// Copyright (c) 2010 Camilla Berglund // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages @@ -33,35 +32,26 @@ #include -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ +////////////////////////////////////////////////////////////////////////// +////// GLFW platform API ////// +////////////////////////////////////////////////////////////////////////// //======================================================================== -// Save the gamma ramp to our internal copy +// Retrieve the currently set gamma ramp //======================================================================== -void _glfwPlatformSaveGammaRamp(int ramp) +void _glfwPlatformGetGammaRamp(GLFWgammaramp* ramp) { - if (!_glfwLibrary.gammaSize) - { - return; - } - _glfw_GetDeviceGammaRamp(_glfwLibrary.Win32.desktopDC, - _glfwLibrary.gammaRamp[ramp]); + _glfw_GetDeviceGammaRamp(GetDC(GetDesktopWindow()), (WORD*) ramp); } //======================================================================== -// Restore the gamma ramp to our internal copy of the gamma ramp +// Push the specified gamma ramp to the monitor //======================================================================== -void _glfwPlatformRestoreGammaRamp(int ramp) +void _glfwPlatformSetGammaRamp(const GLFWgammaramp* ramp) { - if (!_glfwLibrary.gammaSize) - { - return; - } - _glfw_SetDeviceGammaRamp(_glfwLibrary.Win32.desktopDC, - _glfwLibrary.gammaRamp[ramp]); + _glfw_SetDeviceGammaRamp(GetDC(GetDesktopWindow()), (WORD*) ramp); } + diff --git a/src/win32/win32_init.c b/src/win32/win32_init.c index 54939cc3..4c8bfb22 100644 --- a/src/win32/win32_init.c +++ b/src/win32/win32_init.c @@ -160,18 +160,9 @@ int _glfwPlatformInit(void) _glfwLibrary.Win32.instance = GetModuleHandle(NULL); - // Initialise the internal gamma ramp - _glfwLibrary.gammaSize = 256; - _glfwLibrary.gammaRamp[GLFW_GAMMA_ORIG] = - malloc(256 * sizeof(unsigned short) * 3); - _glfwLibrary.gammaRamp[GLFW_GAMMA_CURR] = - malloc(256 * sizeof(unsigned short) * 3); - - // Get the desktop DC - _glfwLibrary.Win32.desktopDC = GetDC(GetDesktopWindow()); - // Save the original gamma ramp - _glfwPlatformSaveGammaRamp(GLFW_GAMMA_ORIG); + _glfwLibrary.originalRampSize = 256; + _glfwPlatformGetGammaRamp(&_glfwLibrary.originalRamp); _glfwInitTimer(); @@ -186,11 +177,7 @@ int _glfwPlatformInit(void) int _glfwPlatformTerminate(void) { // Restore the original gamma ramp - _glfwPlatformRestoreGammaRamp(GLFW_GAMMA_ORIG); - - // Free the gamma ramps - free(_glfwLibrary.gammaRamp[GLFW_GAMMA_ORIG]); - free(_glfwLibrary.gammaRamp[GLFW_GAMMA_CURR]); + _glfwPlatformSetGammaRamp(&_glfwLibrary.originalRamp); if (_glfwLibrary.Win32.classAtom) { diff --git a/src/x11/x11_gamma.c b/src/x11/x11_gamma.c index e4424867..d0a32277 100644 --- a/src/x11/x11_gamma.c +++ b/src/x11/x11_gamma.c @@ -38,7 +38,7 @@ ////////////////////////////////////////////////////////////////////////// //======================================================================== -// Save the original gamma ramp so that we can restore it later +// Retrieve the currently set gamma ramp //======================================================================== void _glfwPlatformGetGammaRamp(GLFWgammaramp* ramp) @@ -80,7 +80,7 @@ void _glfwPlatformGetGammaRamp(GLFWgammaramp* ramp) //======================================================================== -// Make the specified gamma ramp current +// Push the specified gamma ramp to the monitor //======================================================================== void _glfwPlatformSetGammaRamp(const GLFWgammaramp* ramp)