| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- using OpenTK.Graphics.OpenGL;
- using Ryujinx.Common.Configuration;
- using SPB.Graphics;
- using SPB.Graphics.OpenGL;
- using SPB.Platform;
- using SPB.Platform.WGL;
- using SPB.Windowing;
- using System;
- namespace Ryujinx.Ava.UI.Helpers
- {
- public class OpenGLEmbeddedWindow : EmbeddedWindow
- {
- private readonly int _major;
- private readonly int _minor;
- private readonly GraphicsDebugLevel _graphicsDebugLevel;
- private SwappableNativeWindowBase _window;
- public OpenGLContextBase Context { get; set; }
- public OpenGLEmbeddedWindow(int major, int minor, GraphicsDebugLevel graphicsDebugLevel)
- {
- _major = major;
- _minor = minor;
- _graphicsDebugLevel = graphicsDebugLevel;
- }
- protected override void OnWindowDestroying()
- {
- Context.Dispose();
- base.OnWindowDestroying();
- }
- public override void OnWindowCreated()
- {
- base.OnWindowCreated();
- if (OperatingSystem.IsWindows())
- {
- _window = new WGLWindow(new NativeHandle(WindowHandle));
- }
- else if (OperatingSystem.IsLinux())
- {
- _window = X11Window;
- }
- else
- {
- throw new PlatformNotSupportedException();
- }
- var flags = OpenGLContextFlags.Compat;
- if (_graphicsDebugLevel != GraphicsDebugLevel.None)
- {
- flags |= OpenGLContextFlags.Debug;
- }
- Context = PlatformHelper.CreateOpenGLContext(FramebufferFormat.Default, _major, _minor, flags);
- Context.Initialize(_window);
- Context.MakeCurrent(_window);
- var bindingsContext = new OpenToolkitBindingsContext(Context.GetProcAddress);
- GL.LoadBindings(bindingsContext);
- Context.MakeCurrent(null);
- }
- public void MakeCurrent()
- {
- Context?.MakeCurrent(_window);
- }
- public void MakeCurrent(NativeWindowBase window)
- {
- Context?.MakeCurrent(window);
- }
- public void SwapBuffers()
- {
- _window.SwapBuffers();
- }
- }
- }
|