static void SetGamma(Glfw.Window window, float gamma) { var monitor = Glfw.GetWindowMonitor(window); if (!monitor) { monitor = Glfw.GetPrimaryMonitor(); } if (gamma < 0f) { return; } // It is recommended to use gamma ramps of size 256, as that is the size supported by // all graphics cards on all platforms. const int kSize = 256; var ramp = new Glfw.GammaRamp { Red = new ushort[256], Green = new ushort[256], Blue = new ushort[256] }; for (int i = 0; i < kSize; i++) { float value; // Calculate intensity value = (float)i / (float)(kSize - 1); // Apply gamma curve value = (float)Math.Pow(value, 1f / gamma) * 65535f + 0.5f; // Clamp to value range if (value < 0f) { value = 0f; } else if (value > 65535f) { value = 65535f; } ramp.Red[i] = (ushort)value; ramp.Green[i] = (ushort)value; ramp.Blue[i] = (ushort)value; } m_GammaValue = gamma; Log("Set Gamma: {0}", m_GammaValue); Glfw.SetGammaRamp(monitor, ramp); var r = Glfw.GetGammaRamp(monitor); for (int i = 0; i < r.Size; i++) { Log("Ramp {0}: {1},{2},{3}", i, r.Red[i], r.Green[i], r.Blue[i]); } }