mirror of
https://github.com/Ryujinx/GLWidget.git
synced 2024-12-22 18:45:35 +00:00
1.0.3pre1
This commit is contained in:
parent
d573036187
commit
4435d1a5da
|
@ -174,6 +174,7 @@ namespace OpenTK
|
||||||
private int _error;
|
private int _error;
|
||||||
|
|
||||||
private IGraphicsContext _context;
|
private IGraphicsContext _context;
|
||||||
|
private GLContext _gdkGlContext;
|
||||||
|
|
||||||
public bool ForwardCompatible { get; }
|
public bool ForwardCompatible { get; }
|
||||||
public DeviceContext DeviceContext { get => _deviceContext; set => _deviceContext = value; }
|
public DeviceContext DeviceContext { get => _deviceContext; set => _deviceContext = value; }
|
||||||
|
@ -209,10 +210,12 @@ namespace OpenTK
|
||||||
{
|
{
|
||||||
OnShuttingDown();
|
OnShuttingDown();
|
||||||
|
|
||||||
DeviceContext.DeleteContext(_graphicsContext);
|
DeviceContext?.DeleteContext(_graphicsContext);
|
||||||
|
|
||||||
DeviceContext.Dispose();
|
DeviceContext?.Dispose();
|
||||||
}
|
|
||||||
|
_gdkGlContext?.Dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -271,7 +274,7 @@ namespace OpenTK
|
||||||
|
|
||||||
public void Swapbuffers()
|
public void Swapbuffers()
|
||||||
{
|
{
|
||||||
DeviceContext?.SwapBuffers();
|
_context?.SwapBuffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void MakeCurrent()
|
public void MakeCurrent()
|
||||||
|
@ -285,9 +288,15 @@ namespace OpenTK
|
||||||
|
|
||||||
public void ClearCurrent()
|
public void ClearCurrent()
|
||||||
{
|
{
|
||||||
//Gdk.GLContext.ClearCurrent();
|
if (GTKBindingHelper.CurrentPlatform == OSPlatform.Windows)
|
||||||
DeviceContext?.MakeCurrent(IntPtr.Zero);
|
{
|
||||||
}
|
DeviceContext?.MakeCurrent(IntPtr.Zero);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Gdk.GLContext.ClearCurrent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void CreateContext()
|
private void CreateContext()
|
||||||
{
|
{
|
||||||
|
@ -404,20 +413,42 @@ namespace OpenTK
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Initialize()
|
private void CreateGdkGlContext()
|
||||||
|
{
|
||||||
|
_gdkGlContext = Window.CreateGlContext();
|
||||||
|
|
||||||
|
_gdkGlContext.SetRequiredVersion(GLVersionMajor, GLVersionMinor);
|
||||||
|
|
||||||
|
_gdkGlContext.ForwardCompatible = ForwardCompatible;
|
||||||
|
|
||||||
|
_gdkGlContext.SetUseEs(0);
|
||||||
|
|
||||||
|
_gdkGlContext.Realize();
|
||||||
|
|
||||||
|
_gdkGlContext.MakeCurrent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Initialize()
|
||||||
{
|
{
|
||||||
ClearCurrent();
|
ClearCurrent();
|
||||||
|
|
||||||
Khronos.KhronosApi.LogEnabled = true;
|
Khronos.KhronosApi.LogEnabled = true;
|
||||||
Wgl.ErrorHandling = Wgl.ErrorHandlingMode.Normal;
|
|
||||||
|
|
||||||
Window.EnsureNative();
|
Window.EnsureNative();
|
||||||
|
|
||||||
CreateDeviceContext(ControlPixelFormat);
|
if (GTKBindingHelper.CurrentPlatform == OSPlatform.Windows)
|
||||||
|
{
|
||||||
|
CreateDeviceContext(ControlPixelFormat);
|
||||||
|
|
||||||
CreateContext();
|
CreateContext();
|
||||||
|
|
||||||
DeviceContext.MakeCurrent(_graphicsContext);
|
DeviceContext.MakeCurrent(_graphicsContext);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
GraphicsContext.Display = Display.Handle;
|
||||||
|
|
||||||
|
CreateGdkGlContext();
|
||||||
|
}
|
||||||
|
|
||||||
_context = GraphicsContext.GetCurrentContext(Window.Handle);
|
_context = GraphicsContext.GetCurrentContext(Window.Handle);
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ namespace OpenTK
|
||||||
}
|
}
|
||||||
else if(CurrentPlatform == OSPlatform.OSX)
|
else if(CurrentPlatform == OSPlatform.OSX)
|
||||||
{
|
{
|
||||||
var osxAddr = !IsGlxRequired ? GetProcAddressOSX(procName) : GetProcAddressGlx(procName);
|
var osxAddr = GetProcAddressOSX(procName);
|
||||||
if (osxAddr != IntPtr.Zero)
|
if (osxAddr != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
Loaded = true;
|
Loaded = true;
|
||||||
|
@ -242,6 +242,22 @@ namespace OpenTK
|
||||||
[DllImport(OSXLibrary, EntryPoint = "NSAddressOfSymbol")]
|
[DllImport(OSXLibrary, EntryPoint = "NSAddressOfSymbol")]
|
||||||
public static extern IntPtr NSAddressOfSymbol(IntPtr symbol);
|
public static extern IntPtr NSAddressOfSymbol(IntPtr symbol);
|
||||||
|
|
||||||
|
[DllImport(OSXLibrary)]
|
||||||
|
public extern static int CGLSetCurrentContext(IntPtr ctx);
|
||||||
|
|
||||||
|
[DllImport(OSXLibrary)]
|
||||||
|
public extern static IntPtr CGLGetCurrentContext();
|
||||||
|
[DllImport(OSXLibrary)]
|
||||||
|
public extern static void CGLReleaseContext(IntPtr ctx);
|
||||||
|
[DllImport(OSXLibrary)]
|
||||||
|
public extern static int CGLFlushDrawable(IntPtr ctx);
|
||||||
|
|
||||||
|
[DllImport(OSXLibrary)]
|
||||||
|
internal static extern int CGLDestroyContext(IntPtr ctx);
|
||||||
|
|
||||||
|
[DllImport(OSXLibrary)]
|
||||||
|
internal static extern int CGLSetParameter(IntPtr ctx, int parameter, ref int value);
|
||||||
|
|
||||||
[DllImport(GlxLibrary, EntryPoint = "glXGetCurrentContext")]
|
[DllImport(GlxLibrary, EntryPoint = "glXGetCurrentContext")]
|
||||||
public static extern IntPtr glXGetCurrentContext();
|
public static extern IntPtr glXGetCurrentContext();
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,10 @@ namespace OpenTK
|
||||||
}
|
}
|
||||||
return GlxGraphicsContext.GetCurrent(handle, Display);
|
return GlxGraphicsContext.GetCurrent(handle, Display);
|
||||||
}
|
}
|
||||||
|
else if (currentPlatform == OSPlatform.OSX)
|
||||||
|
{
|
||||||
|
return CglGraphicsContext.GetCurrent();
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -157,4 +161,44 @@ namespace OpenTK
|
||||||
UnsafeNativeMethods.glXSwapIntervalEXT(interval);
|
UnsafeNativeMethods.glXSwapIntervalEXT(interval);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class CglGraphicsContext : GraphicsContext
|
||||||
|
{
|
||||||
|
private IntPtr _windowHandle;
|
||||||
|
|
||||||
|
public static CglGraphicsContext GetCurrent()
|
||||||
|
{
|
||||||
|
var gc = UnsafeNativeMethods.CGLGetCurrentContext();
|
||||||
|
|
||||||
|
return new CglGraphicsContext(gc);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CglGraphicsContext(IntPtr graphicsContext)
|
||||||
|
{
|
||||||
|
_graphicsContext = graphicsContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
private IntPtr _graphicsContext;
|
||||||
|
private IntPtr _display;
|
||||||
|
|
||||||
|
public override void MakeCurrent()
|
||||||
|
{
|
||||||
|
UnsafeNativeMethods.CGLSetCurrentContext(_graphicsContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SwapBuffers()
|
||||||
|
{
|
||||||
|
UnsafeNativeMethods.CGLFlushDrawable(_graphicsContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void ClearCurrent()
|
||||||
|
{
|
||||||
|
UnsafeNativeMethods.CGLSetCurrentContext(IntPtr.Zero);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SwapInterval(int interval)
|
||||||
|
{
|
||||||
|
UnsafeNativeMethods.CGLSetParameter(_graphicsContext, 222 , ref interval);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue