public void OnRender(DrawingSurface surface)
        {
            Debug.AssertFormat(surface != null, "Cannot render to surface: {0}", "surface is null");
            Debug.AssertFormat(surface.RenderTexture != null, "Cannot render to surface: {0}", "render texture is null");
            Debug.AssertFormat(Material != null, "Cannot render to surface: {0}", "material is null");

            Geometry.Reset();
            foreach (Line line in Lines.Values)
            {
                line.OnRender(m_Geometry, m_Options);
            }
            Geometry.CopyToMesh(Mesh);

            Matrix4x4 matrix = surface.Camera.transform.localToWorldMatrix;

            matrix.m23 = surface.transform.position.z;

            surface.Invoke(() => {
                surface.RenderTexture.MarkRestoreExpected();
                Material.SetPass(0);
                Graphics.DrawMeshNow(Mesh, matrix, 0);
            });
        }