Only restore gamma ramp if it has been changed.
diff --git a/src/cocoa_init.m b/src/cocoa_init.m
index 329bcfa..7c208b9 100644
--- a/src/cocoa_init.m
+++ b/src/cocoa_init.m
@@ -129,7 +129,8 @@
     }
 
     // Restore the original gamma ramp
-    _glfwPlatformSetGammaRamp(&_glfwLibrary.originalRamp);
+    if (_glfwLibrary.rampChanged)
+        _glfwPlatformSetGammaRamp(&_glfwLibrary.originalRamp);
 
     CGDisplayModeRelease(_glfwLibrary.NS.desktopMode);
 
diff --git a/src/gamma.c b/src/gamma.c
index 34cb22f..21940b0 100644
--- a/src/gamma.c
+++ b/src/gamma.c
@@ -112,5 +112,6 @@
 
     _glfwPlatformSetGammaRamp(ramp);
     _glfwLibrary.currentRamp = *ramp;
+    _glfwLibrary.rampChanged = GL_TRUE;
 }
 
diff --git a/src/internal.h b/src/internal.h
index 6398bdc..681df74 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -245,6 +245,7 @@
     GLFWgammaramp currentRamp;
     GLFWgammaramp originalRamp;
     int           originalRampSize;
+    GLboolean     rampChanged;
 
     // This is defined in the current port's platform.h
     _GLFW_PLATFORM_LIBRARY_WINDOW_STATE;
diff --git a/src/win32_init.c b/src/win32_init.c
index 2422dd4..194ff6c 100644
--- a/src/win32_init.c
+++ b/src/win32_init.c
@@ -190,7 +190,8 @@
 int _glfwPlatformTerminate(void)
 {
     // Restore the original gamma ramp
-    _glfwPlatformSetGammaRamp(&_glfwLibrary.originalRamp);
+    if (_glfwLibrary.rampChanged)
+        _glfwPlatformSetGammaRamp(&_glfwLibrary.originalRamp);
 
     if (_glfwLibrary.Win32.classAtom)
     {
diff --git a/src/x11_init.c b/src/x11_init.c
index 6ea8035..3543c9f 100644
--- a/src/x11_init.c
+++ b/src/x11_init.c
@@ -659,7 +659,7 @@
 
 static void terminateDisplay(void)
 {
-    if (_glfwLibrary.originalRampSize)
+    if (_glfwLibrary.originalRampSize && _glfwLibrary.rampChanged)
         _glfwPlatformSetGammaRamp(&_glfwLibrary.originalRamp);
 
     if (_glfwLibrary.X11.display)