using System;
using System.Collections.Generic;
using Artemis.Core.Services.Core;
using Artemis.Core.SkiaSharp;
using RGB.NET.Core;
namespace Artemis.Core.Services;
///
/// Represents a service that manages the render loop and renderers.
///
public interface IRenderService : IArtemisService
{
///
/// Gets the graphics context to be used for rendering
///
IManagedGraphicsContext? GraphicsContext { get; }
///
/// Gets the RGB surface to which is being rendered.
///
RGBSurface Surface { get; }
///
/// Gets a list of registered renderers.
///
List Renderers { get; }
///
/// Gets or sets a boolean indicating whether rendering is paused.
///
bool IsPaused { get; set; }
///
/// Gets or sets a boolean indicating whether to flush the RGB.NET LEDs during next update
///
bool FlushLeds { get; set; }
///
/// The time the last frame took to render
///
TimeSpan FrameTime { get; }
///
/// The amount of frames rendered each second
///
public int FrameRate { get; }
///
/// Initializes the render service and starts rendering.
///
void Initialize();
///
/// Occurs whenever a frame is rendering, after modules have rendered
///
event EventHandler FrameRendering;
///
/// Occurs whenever a frame is finished rendering and the render pipeline is closed
///
event EventHandler FrameRendered;
}