Removed Subrepository
This commit is contained in:
66
C#/OpenGLTutorial/Rendering/Display/DisplayManager.cs
Normal file
66
C#/OpenGLTutorial/Rendering/Display/DisplayManager.cs
Normal file
@@ -0,0 +1,66 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.IO;
|
||||
using GLFW;
|
||||
using OpenGLTutorial.GameLoop;
|
||||
using StbiSharp;
|
||||
using static OpenGL.GL;
|
||||
using Image = GLFW.Image;
|
||||
|
||||
namespace OpenGLTutorial.Rendering.Display {
|
||||
public static class DisplayManager {
|
||||
|
||||
public static NativeWindow Window { get; set; }
|
||||
public static Size WindowSize { get; set; }
|
||||
|
||||
public static void CreateWindow(int width, int height, string title, bool vsync) {
|
||||
WindowSize = new Size(width, height);
|
||||
Glfw.Init();
|
||||
|
||||
Glfw.WindowHint(Hint.ContextVersionMajor, 3);
|
||||
Glfw.WindowHint(Hint.ContextVersionMinor, 3);
|
||||
Glfw.WindowHint(Hint.OpenglProfile, Profile.Core);
|
||||
|
||||
Glfw.WindowHint(Hint.Focused, true);
|
||||
Glfw.WindowHint(Hint.Resizable, true);
|
||||
|
||||
Window = new NativeWindow(width, height, title);
|
||||
Window.CenterOnScreen();
|
||||
Window.MakeCurrent();
|
||||
Import(Glfw.GetProcAddress);
|
||||
glViewport(0, 0, width, height);
|
||||
Glfw.SwapInterval(vsync ? 1 : 0);
|
||||
|
||||
Window.SizeChanged += OnResize;
|
||||
Window.KeyAction += OnKey;
|
||||
Window.MouseButton += OnMouse;
|
||||
Window.MouseMoved += OnMouseMove;
|
||||
Window.MouseScroll += OnMouseScroll;
|
||||
|
||||
}
|
||||
|
||||
private static void OnResize(object sender, SizeChangeEventArgs e) {
|
||||
WindowSize = e.Size;
|
||||
glViewport(0, 0, WindowSize.Width, WindowSize.Height);
|
||||
}
|
||||
|
||||
private static void OnKey(object sender, KeyEventArgs e) => Input.Keys[e.Key] = e.State != InputState.Release;
|
||||
|
||||
private static void OnMouse(object sender, MouseButtonEventArgs e) => Input.MouseButtons[e.Button] = e.Action != InputState.Release;
|
||||
private static void OnMouseMove(object sender, MouseMoveEventArgs e) => Input.MousePosition = e.Position;
|
||||
private static void OnMouseScroll(object sender, MouseMoveEventArgs e) => Input.MouseScroll = e.Position.Y;
|
||||
|
||||
public static unsafe void SetWindowIcon(this NativeWindow window, string file) {
|
||||
using var stream = File.OpenRead(file);
|
||||
using var memoryStream = new MemoryStream();
|
||||
stream.CopyTo(memoryStream);
|
||||
StbiImage image = Stbi.LoadFromMemory(memoryStream, 0);
|
||||
|
||||
fixed (byte* data = &image.Data[0]) {
|
||||
window.SetIcons(new Image(image.Width, image.Height, new IntPtr(data)));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user