Пример #1
0
        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]);
            }
        }