using System.Runtime.InteropServices; using System.Text; using Engine.Renderer.Buffer; using Engine.Renderer.Buffer.Vertex; using Engine.Renderer.Shader; using OpenTK.Graphics.OpenGL; using OpenTK.Mathematics; using OpenTK.Windowing.Common; using OpenTK.Windowing.Desktop; using Serilog; using Serilog.Events; using Serilog.Sinks.SystemConsole.Themes; namespace Engine; public sealed class Engine { public Renderer.Renderer Renderer => _renderer; private readonly Window _window; private readonly Renderer.Renderer _renderer; private readonly ILogger _logger; public Engine(int width, int height, bool headless = false, string title = "") { var settings = new NativeWindowSettings { ClientSize = headless ? new Vector2i(1, 1) : new Vector2i(width, height), Title = title, StartVisible = !headless, APIVersion = new Version(4, 5), Profile = ContextProfile.Compatability }; _window = new Window(this, new NativeWindow(settings), headless); _renderer = new Renderer.Renderer(width, height); Thread.CurrentThread.Name = "RendererThread"; Log.Logger = new LoggerConfiguration() .MinimumLevel.Verbose() .Enrich.WithThreadName() .Enrich.WithThreadId() .Enrich.FromLogContext() .WriteTo.Console( outputTemplate: "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff}] [{Level:u3}] [{ThreadName,-15:l}:{ThreadId,-4:d4}] [{SourceContext:l}] {Message:lj}{NewLine}{Exception}", theme: AnsiConsoleTheme.Literate) .CreateLogger(); _logger = Log.ForContext(); } public void Run() { GL.ClearColor(0.2f, 0.3f, 0.3f, 1.0f); GL.Viewport(0, 0, _window.Width, _window.Height); while (!_window.IsExiting) { } } }