/// <summary>
        /// Traverses the scene's entities with their corresponding components in order to construct an 3D world. This function is called every frame.
        /// </summary>
        /// <param name="renderCanvas">The render canvas that presents the final render image.</param>
        public void Traverse(RenderCanvas renderCanvas)
        {
            RC.Clear(ClearFlags.Color | ClearFlags.Depth);
            int length = SceneMembers.Count;
            for (int i=0;i<length; i++)
            {
                SceneMembers[i].Accept(_sceneVisitorRendering);
                //sceneMember.Accept();
            }

            // Order: Matrix, Mesh, Renderer
            length = RenderJobs.Length;
            for (int i = 1; i < length; i++ )
            {

                int innerlength = RenderJobs[i].Count;
                for (int k = 0; k < innerlength;k++)
                {

                    RenderJobs[i][k].SubmitWork(RC);

                }

            }
            renderCanvas.Present();
            length = RenderJobs.Length;
            //Debug.WriteLine("Drawn "+RenderJobs[2].Count/3+" Objects at "+Time.Instance.FramePerSecondSmooth+" FPS!");
            for (int j = 0; j < length;j++ )
            {
                RenderJobs[j].Clear();
            }
        }