public void Draw(float max)
        {
            Matrix4 transform = CanvasManager.ViewportTransform;

            GL.Enable(EnableCap.ScissorTest);

            transform = Matrix4.Scale(1, 2 / max, 1) * Matrix4.CreateTranslation(0, -1, 0) *
                        CanvasManager.ViewportTransform;
            GL.UniformMatrix4(_shaderProgram.UniformTransform, false, ref transform);
            GL.Uniform4(_shaderProgram.UniformColor, Color4.Gray);
            //GL.LineWidth(1f);

            GL.Disable(EnableCap.ScissorTest);

            //transform = Matrix4.CreateTranslation(0, pos.Y, 0) * Matrix4.Scale(1, scale.Y, 1) * CanvasManager.ViewportTransform;
            //GL.UniformMatrix4(_uniformTransform, false, ref transform);
            GL.LineWidth(2f);

            GL.Scissor(CanvasManager.TickSize, CanvasManager.BorderSize + CanvasManager.TickSize - 1, CanvasManager.ControlWidth - CanvasManager.TickSize,
                       CanvasManager.ControlHeight - 2 * (CanvasManager.BorderSize + CanvasManager.TickSize) + 2);
            GL.Enable(EnableCap.ScissorTest);

            YTicks.BeginDraw();
            YTicks.Draw(BeginMode.Lines);
            YTicks.EndDraw();

            GL.Disable(EnableCap.ScissorTest);
        }
        public void GenerateAxis(long height)
        {
            //generate y ticks data
            //Note - need allow different axis modes (count, data)
            var digits       = (int)Math.Floor(Math.Log10(height));
            var yTickSpacing = (int)Math.Pow(10, digits - 1);
            var max          = (int)((((height / Math.Pow(10, digits)) + 1) * Math.Pow(10, digits)) / yTickSpacing);
            var data         = new List <Vector2>();

            for (var k = 0; k <= max; k++)
            {
                var tickScale = 0.5f;
                var y         = k * yTickSpacing;
                if (k % 10 == 0)
                {
                    tickScale = 1;
                }
                data.Add(new Vector2(-1, y));
                data.Add(new Vector2(-1 - CanvasManager.TickSize * tickScale * CanvasManager.PixelSize.X, y));
            }
            YTicksData = data.ToArray();
            YTicks.BindData(YTicksData, BufferUsageHint.StaticDraw);
        }