H. Utku Maden
a1f4e6a4dc
Due to unforseen naming conflicts, the project has been rebranded under the ReFuel umbrealla and will now be referred to as Dashboard from now on. Other changes will occur to suit the library more for the engine whilst keeping the freestanding nature of the library. Rename folder. Rename to Dashboard.OpenTK Rename to Dashboard.Media.Defaults. Do the last renames and path fixes.
107 lines
2.8 KiB
C#
107 lines
2.8 KiB
C#
using System;
|
|
using OpenTK.Mathematics;
|
|
using OpenTK.Windowing.Desktop;
|
|
using Dashboard.OpenGL;
|
|
using Dashboard.CommandMachine;
|
|
using Dashboard.PAL;
|
|
using Dashboard.VertexGenerator;
|
|
|
|
namespace Dashboard.OpenTK
|
|
{
|
|
public class OpenTKPort : IQuikPortHandle
|
|
{
|
|
private readonly NativeWindow _window;
|
|
private readonly GL21Driver _glDriver;
|
|
private readonly VertexGeneratorEngine _vertexEngine;
|
|
|
|
public string Title
|
|
{
|
|
get => _window.Title;
|
|
set => _window.Title = value;
|
|
}
|
|
|
|
public QVec2 Size
|
|
{
|
|
get
|
|
{
|
|
Vector2i size = _window.ClientSize;
|
|
return new QVec2(size.X, size.Y);
|
|
}
|
|
set
|
|
{
|
|
// OpenTK being OpenTK as usual, you can't set the client size.
|
|
Vector2i extents = _window.Size - _window.ClientSize;
|
|
Vector2i size = extents + new Vector2i((int)value.X, (int)value.Y);
|
|
_window.Size = size;
|
|
}
|
|
}
|
|
public QVec2 Position
|
|
{
|
|
get
|
|
{
|
|
Vector2i location = _window.Location;
|
|
return new QVec2(location.X, location.Y);
|
|
}
|
|
set
|
|
{
|
|
Vector2i location = new Vector2i((int)value.X, (int)value.Y);
|
|
_window.Location = location;
|
|
}
|
|
}
|
|
|
|
public bool IsValid => !isDisposed;
|
|
|
|
public event EventHandler? EventRaised;
|
|
|
|
public OpenTKPort(NativeWindow window)
|
|
{
|
|
_window = window;
|
|
_glDriver = new GL21Driver();
|
|
_vertexEngine = new VertexGeneratorEngine();
|
|
}
|
|
|
|
public void Focus()
|
|
{
|
|
_window.Focus();
|
|
}
|
|
|
|
public void Paint(CommandList queue)
|
|
{
|
|
QRectangle view = new QRectangle(Size, new QVec2(0, 0));
|
|
|
|
_vertexEngine.Reset();
|
|
_vertexEngine.ProcessCommands(view, queue);
|
|
|
|
if (!_window.Context.IsCurrent)
|
|
_window.Context.MakeCurrent();
|
|
|
|
if (!_glDriver.IsInit)
|
|
_glDriver.Init();
|
|
|
|
GL.Clear(GLEnum.GL_COLOR_BUFFER_BIT | GLEnum.GL_DEPTH_BUFFER_BIT);
|
|
_glDriver.Draw(_vertexEngine.DrawQueue, view);
|
|
|
|
_window.Context.SwapBuffers();
|
|
}
|
|
|
|
public void Show(bool shown = true)
|
|
{
|
|
_window.IsVisible = shown;
|
|
}
|
|
|
|
private bool isDisposed;
|
|
private void Dispose(bool disposing)
|
|
{
|
|
if (isDisposed) return;
|
|
|
|
if (disposing)
|
|
{
|
|
_window?.Dispose();
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
isDisposed = true;
|
|
}
|
|
public void Dispose() => Dispose(true);
|
|
}
|
|
} |