private void OnRender(object sender, FrameEventArgs e)
        {
            // Reset the view
            GL.Clear(ClearBufferMask.ColorBufferBit |
                     ClearBufferMask.DepthBufferBit |
                     ClearBufferMask.StencilBufferBit);

            _updateTimeAccumulator += e.Time;
            var partialTicks = _updateTimeAccumulator / TargetUpdatePeriod;

            // Reload the projection matrix
            var aspectRatio = Width / (float)Height;
            var scale       = new Vector3(4 * (1 / _zoom), -4 * (1 / _zoom), 4 * (1 / _zoom));
            var rotX        = _prevRotation.X + (_rotation.X - _prevRotation.X) * partialTicks;
            var rotY        = _prevRotation.Y + (_rotation.Y - _prevRotation.Y) * partialTicks;

            var mProjection = Matrix4.CreatePerspectiveFieldOfView(MathHelper.PiOver4, aspectRatio, 1, 1024);
            var mModel      = Matrix4.LookAt(0, 128, 256, 0, 0, 0, 0, 1, 0);
            var mTranslate  = Matrix4.CreateTranslation(_translation.X, _translation.Y, 0);
            var mScale      = Matrix4.CreateScale(scale);
            var mRotX       = Matrix4.CreateRotationX((float)(rotX / 180 * Math.PI));
            var mRotY       = Matrix4.CreateRotationY((float)(rotY / 180 * Math.PI));
            var mView       = mRotY * mRotX * mScale * mTranslate;

            _renderManager.Render(mModel, mView, mProjection);

            // Swap the graphics buffer
            SwapBuffers();
        }
        private void OnRender(object sender, FrameEventArgs e)
        {
            // Reset the view
            GL.Clear(ClearBufferMask.ColorBufferBit |
                     ClearBufferMask.DepthBufferBit |
                     ClearBufferMask.StencilBufferBit);

            _updateTimeAccumulator += e.Time;
            var partialTicks = _updateTimeAccumulator / TargetUpdatePeriod;

            // Reload the projection matrix
            var aspectRatio = Width / (float)Height;
            var zoom        = (float)(_prevZoom + (_zoom - _prevZoom) * partialTicks);
            var scale       = new Vector3(4 * (1 / zoom), -4 * (1 / zoom), 4 * (1 / zoom));
            var rotX        = _prevRotation.X + (_rotation.X - _prevRotation.X) * partialTicks;
            var rotY        = _prevRotation.Y + (_rotation.Y - _prevRotation.Y) * partialTicks;
            var transX      = _prevTranslation.X + (_translation.X - _prevTranslation.X) * partialTicks;
            var transY      = _prevTranslation.Y + (_translation.Y - _prevTranslation.Y) * partialTicks;

            var mProjection     = Matrix4.CreatePerspectiveFieldOfView(MathHelper.PiOver4, aspectRatio, 1, 1024);
            var mModel          = Matrix4.LookAt(0, 128, 256, 0, 0, 0, 0, 1, 0);
            var mTranslate      = Matrix4.CreateTranslation((float)transX, (float)transY, 0);
            var mScale          = Matrix4.CreateScale(scale);
            var mRotX           = Matrix4.CreateRotationX((float)(rotX / 180 * Math.PI));
            var mRotY           = Matrix4.CreateRotationY((float)(rotY / 180 * Math.PI));
            var mLocalTranslate = Matrix4.CreateTranslation(-_renderManager.SideLength * 8 + 1, 0, -_renderManager.SideLength * 8 + 1);
            var mView           = mLocalTranslate * mRotY * mRotX * mScale * mTranslate;

            _renderManager.Render(mModel, mView, mProjection);

            // Swap the graphics buffer
            SwapBuffers();

//            var err = GL.GetError();
//            if (err != ErrorCode.NoError)
//                Lumberjack.Error(err.ToString());
        }