/// <inheritdoc />
        public virtual void Dispose()
        {
            FpsCounter.Dispose();
            FpsCounter = default;

            HostHandle = default;
        }
 /// <inheritdoc />
 public void Render()
 {
     FrameStarted = DateTime.UtcNow;
     FpsCounter.StartFrame();
     RenderInternal();
     FpsCounter.StopFrame();
 }
        /// <summary>
        /// Constructor.
        /// </summary>
        protected RenderHost(IRenderHostSetup renderHostSetup)
        {
            HostHandle = renderHostSetup.HostHandle;
            HostInput  = renderHostSetup.HostInput;

            BufferSize   = HostInput.Size;
            ViewportSize = HostInput.Size;

            FpsCounter = new FpsCounter(new TimeSpan(0, 0, 0, 0, 1000));

            HostInput.SizeChanged += HostInputOnSizeChanged;
        }
        /// <inheritdoc />
        public virtual void Dispose()
        {
            HostInput.SizeChanged -= HostInputOnSizeChanged;

            FpsCounter.Dispose();
            FpsCounter = default;

            BufferSize   = default;
            ViewportSize = default;

            HostInput.Dispose();
            HostInput = default;

            HostHandle = default;
        }
        /// <summary>
        /// Constructor.
        /// </summary>
        protected RenderHost(IntPtr hostHandle)
        {
            HostHandle = hostHandle;

            FpsCounter = new FpsCounter(new TimeSpan(0, 0, 0, 0, 1000));
        }
 /// <summary>
 /// Constructor.
 /// </summary>
 protected RenderHost(IRenderHostSetup renderHostSetup)
 {
     HostHandle = renderHostSetup.HostHandle;
     HostInput  = renderHostSetup.HostInput;
     FpsCounter = new FpsCounter(new TimeSpan(0, 0, 0, 0, 1000));
 }