/// <summary>
        /// Help function to draw a single, texture quad on the screen
        /// </summary>
        /// <param name="left"></param>
        /// <param name="right"></param>
        /// <param name="top"></param>
        /// <param name="bottom"></param>
        /// <param name="shader"></param>
        void DrawTexturedQuad(float left, float right, float top, float bottom, TexturedShader shader)
        {
            Vector2[] texCoords = new Vector2[]
            {
                new Vector2(0, 0),
                new Vector2(1, 0),
                new Vector2(1, 1),
                new Vector2(0, 1)
            };

            Vector3[] positions = new Vector3[]
            {
                new Vector3(left, bottom, 0),
                new Vector3(right, bottom, 0),
                new Vector3(right, top, 0),
                new Vector3(left, top, 0),
            };

            uint[] indices = new uint[]
            {
                0, 1, 2, 0, 2, 3
            };

            shader.SetIndices(indices);
            shader.SetVertexPositions(positions);
            shader.SetTextureCoordinates(texCoords);
            shader.DrawElements(BeginMode.Triangles);
        }
        /// <summary>
        /// Constructs the DiffusionRenderer to draw the editor's current frame. DiffusionRenderer
        /// can only start drawing when OpenGL has finished loading.
        /// </summary>
        /// <param name="editorState">Used as a reference to draw the currently selected point</param>
        /// <param name="pathsContainer">Used as a reference to draw all the paths in the current frame</param>
        public DiffusionRenderer(RenderState renderState,
                                 EditorState currentState, DiffusionBuffers buffers,
                                 DefaultShader pointShader, TexturedShader imageShader, TexturedShader diffuseShader,
                                 NormalShader lineShader, NormalShader endPointShader)
        {
            this.renderState    = renderState;
            this.currentState   = currentState;
            this.buffers        = buffers;
            this.pointShader    = pointShader;
            this.imageShader    = imageShader;
            this.diffuseShader  = diffuseShader;
            this.lineShader     = lineShader;
            this.endPointShader = endPointShader;

            this.renderState.PropertyChanged += renderState_PropertyChanged;
        }