mirror of
https://github.com/Ryujinx/Opentk.git
synced 2025-01-11 15:25:31 +00:00
Added GraphicsContext.GetCurrentContextDelegate to IPlatformFactory.
Improved CreateDummyContext logic to detect and use the context handle of the current thread or a specified handle. Removed GetCurrentContext() methods from platform-specific context implementations (everything now goes through the relevant IPlatformFactories).
This commit is contained in:
parent
9c98321c76
commit
76641d46d6
|
@ -200,6 +200,8 @@ namespace OpenTK
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void CreateContext()
|
public void CreateContext()
|
||||||
{
|
{
|
||||||
|
// Todo: This function seems unused. Should we remove it?
|
||||||
|
|
||||||
if (context != null) throw new InvalidOperationException("GLControl already contains an OpenGL context.");
|
if (context != null) throw new InvalidOperationException("GLControl already contains an OpenGL context.");
|
||||||
if (format == null) format = GraphicsMode.Default;
|
if (format == null) format = GraphicsMode.Default;
|
||||||
|
|
||||||
|
@ -234,7 +236,7 @@ namespace OpenTK
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
context = new Platform.Dummy.DummyGLContext(format);
|
context = new Platform.Dummy.DummyGLContext();
|
||||||
|
|
||||||
this.MakeCurrent();
|
this.MakeCurrent();
|
||||||
(context as IGraphicsContextInternal).LoadAll();
|
(context as IGraphicsContextInternal).LoadAll();
|
||||||
|
|
|
@ -41,9 +41,22 @@ namespace OpenTK.Graphics
|
||||||
|
|
||||||
#region --- Constructors ---
|
#region --- Constructors ---
|
||||||
|
|
||||||
|
static GraphicsContext()
|
||||||
|
{
|
||||||
|
GetCurrentContext = Factory.CreateGetCurrentGraphicsContext();
|
||||||
|
}
|
||||||
|
|
||||||
// Necessary to allow creation of dummy GraphicsContexts (see CreateDummyContext static method).
|
// Necessary to allow creation of dummy GraphicsContexts (see CreateDummyContext static method).
|
||||||
GraphicsContext() { }
|
GraphicsContext(ContextHandle handle)
|
||||||
|
{
|
||||||
|
implementation = new OpenTK.Platform.Dummy.DummyGLContext(handle);
|
||||||
|
|
||||||
|
lock (context_lock)
|
||||||
|
{
|
||||||
|
available_contexts.Add((implementation as IGraphicsContextInternal).Context, new WeakReference(this));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs a new GraphicsContext with the specified GraphicsMode and attaches it to the specified window.
|
/// Constructs a new GraphicsContext with the specified GraphicsMode and attaches it to the specified window.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -101,7 +114,7 @@ namespace OpenTK.Graphics
|
||||||
|
|
||||||
// Todo: Add a DummyFactory implementing IPlatformFactory.
|
// Todo: Add a DummyFactory implementing IPlatformFactory.
|
||||||
if (designMode)
|
if (designMode)
|
||||||
implementation = new Platform.Dummy.DummyGLContext(mode);
|
implementation = new Platform.Dummy.DummyGLContext();
|
||||||
else
|
else
|
||||||
implementation = Factory.CreateGLContext(mode, window, shareContext, DirectRendering, major, minor, flags);
|
implementation = Factory.CreateGLContext(mode, window, shareContext, DirectRendering, major, minor, flags);
|
||||||
|
|
||||||
|
@ -132,15 +145,19 @@ namespace OpenTK.Graphics
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
public static GraphicsContext CreateDummyContext()
|
public static GraphicsContext CreateDummyContext()
|
||||||
{
|
{
|
||||||
GraphicsContext context = new GraphicsContext();
|
ContextHandle handle = GetCurrentContext();
|
||||||
context.implementation = new OpenTK.Platform.Dummy.DummyGLContext(GraphicsMode.Default);
|
if (handle == ContextHandle.Zero)
|
||||||
|
throw new InvalidOperationException("No GraphicsContext is current on the calling thread.");
|
||||||
|
|
||||||
lock (context_lock)
|
return CreateDummyContext(handle);
|
||||||
{
|
}
|
||||||
available_contexts.Add((context as IGraphicsContextInternal).Context, new WeakReference(context));
|
|
||||||
}
|
|
||||||
|
|
||||||
return context;
|
public static GraphicsContext CreateDummyContext(ContextHandle handle)
|
||||||
|
{
|
||||||
|
if (handle == ContextHandle.Zero)
|
||||||
|
throw new ArgumentOutOfRangeException("handle");
|
||||||
|
|
||||||
|
return new GraphicsContext(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -26,7 +26,15 @@ namespace OpenTK.Platform.Dummy
|
||||||
|
|
||||||
#region --- Constructors ---
|
#region --- Constructors ---
|
||||||
|
|
||||||
public DummyGLContext(GraphicsMode format) { this.format = format; }
|
public DummyGLContext()
|
||||||
|
{
|
||||||
|
this.handle = new ContextHandle(new IntPtr(++handle_count));
|
||||||
|
}
|
||||||
|
|
||||||
|
public DummyGLContext(ContextHandle handle)
|
||||||
|
{
|
||||||
|
this.handle = handle;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -47,7 +55,6 @@ namespace OpenTK.Platform.Dummy
|
||||||
public void SwapBuffers() { }
|
public void SwapBuffers() { }
|
||||||
public void MakeCurrent(IWindowInfo info) { }
|
public void MakeCurrent(IWindowInfo info) { }
|
||||||
public bool IsCurrent { get { return true; } set { } }
|
public bool IsCurrent { get { return true; } set { } }
|
||||||
public IntPtr GetCurrentContext() { return IntPtr.Zero; }
|
|
||||||
|
|
||||||
public event DestroyEvent<IGraphicsContext> Destroy;
|
public event DestroyEvent<IGraphicsContext> Destroy;
|
||||||
void OnDestroy() { if (Destroy != null) Destroy(this, EventArgs.Empty); }
|
void OnDestroy() { if (Destroy != null) Destroy(this, EventArgs.Empty); }
|
||||||
|
|
|
@ -38,6 +38,11 @@ namespace OpenTK.Platform
|
||||||
return implementation.CreateGLContext(mode, window, shareContext, directRendering, major, minor, flags);
|
return implementation.CreateGLContext(mode, window, shareContext, directRendering, major, minor, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static GraphicsContext.GetCurrentContextDelegate CreateGetCurrentGraphicsContext()
|
||||||
|
{
|
||||||
|
return implementation.CreateGetCurrentGraphicsContext();
|
||||||
|
}
|
||||||
|
|
||||||
internal static IGraphicsMode CreateGraphicsMode()
|
internal static IGraphicsMode CreateGraphicsMode()
|
||||||
{
|
{
|
||||||
return implementation.CreateGraphicsMode();
|
return implementation.CreateGraphicsMode();
|
||||||
|
@ -67,6 +72,12 @@ namespace OpenTK.Platform
|
||||||
throw new PlatformNotSupportedException("Please, refer to http://www.opentk.com for more information.");
|
throw new PlatformNotSupportedException("Please, refer to http://www.opentk.com for more information.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public GraphicsContext.GetCurrentContextDelegate CreateGetCurrentGraphicsContext()
|
||||||
|
{
|
||||||
|
throw new PlatformNotSupportedException("Please, refer to http://www.opentk.com for more information.");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public IGraphicsMode CreateGraphicsMode()
|
public IGraphicsMode CreateGraphicsMode()
|
||||||
{
|
{
|
||||||
throw new PlatformNotSupportedException("Please, refer to http://www.opentk.com for more information.");
|
throw new PlatformNotSupportedException("Please, refer to http://www.opentk.com for more information.");
|
||||||
|
|
|
@ -14,6 +14,8 @@ namespace OpenTK.Platform
|
||||||
|
|
||||||
OpenTK.Graphics.IGraphicsContext CreateGLContext(OpenTK.Graphics.GraphicsMode mode, IWindowInfo window, OpenTK.Graphics.IGraphicsContext shareContext, bool DirectRendering, int major, int minor, OpenTK.Graphics.GraphicsContextFlags flags);
|
OpenTK.Graphics.IGraphicsContext CreateGLContext(OpenTK.Graphics.GraphicsMode mode, IWindowInfo window, OpenTK.Graphics.IGraphicsContext shareContext, bool DirectRendering, int major, int minor, OpenTK.Graphics.GraphicsContextFlags flags);
|
||||||
|
|
||||||
|
OpenTK.Graphics.GraphicsContext.GetCurrentContextDelegate CreateGetCurrentGraphicsContext();
|
||||||
|
|
||||||
OpenTK.Graphics.IGraphicsMode CreateGraphicsMode();
|
OpenTK.Graphics.IGraphicsMode CreateGraphicsMode();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,11 +36,6 @@ namespace OpenTK.Platform.MacOS
|
||||||
CarbonWindowInfo carbonWindow;
|
CarbonWindowInfo carbonWindow;
|
||||||
IntPtr shareContextRef;
|
IntPtr shareContextRef;
|
||||||
|
|
||||||
static AglContext()
|
|
||||||
{
|
|
||||||
if (GraphicsContext.GetCurrentContext == null)
|
|
||||||
GraphicsContext.GetCurrentContext = AglContext.GetCurrentContext;
|
|
||||||
}
|
|
||||||
public AglContext(GraphicsMode mode, IWindowInfo window, IGraphicsContext shareContext)
|
public AglContext(GraphicsMode mode, IWindowInfo window, IGraphicsContext shareContext)
|
||||||
{
|
{
|
||||||
Debug.Print("Context Type: {0}", shareContext);
|
Debug.Print("Context Type: {0}", shareContext);
|
||||||
|
@ -250,10 +245,6 @@ namespace OpenTK.Platform.MacOS
|
||||||
function, err, Agl.ErrorString(err)));
|
function, err, Agl.ErrorString(err)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static ContextHandle GetCurrentContext()
|
|
||||||
{
|
|
||||||
return (ContextHandle)Agl.aglGetCurrentContext();
|
|
||||||
}
|
|
||||||
bool firstFullScreen = false;
|
bool firstFullScreen = false;
|
||||||
|
|
||||||
internal void SetFullScreen(CarbonWindowInfo info)
|
internal void SetFullScreen(CarbonWindowInfo info)
|
||||||
|
|
|
@ -30,6 +30,14 @@ namespace OpenTK.Platform.MacOS
|
||||||
return new AglContext(mode, window, shareContext);
|
return new AglContext(mode, window, shareContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public GraphicsContext.GetCurrentContextDelegate CreateGetCurrentGraphicsContext()
|
||||||
|
{
|
||||||
|
return (GraphicsContext.GetCurrentContextDelegate)delegate
|
||||||
|
{
|
||||||
|
return new ContextHandle(Agl.aglGetCurrentContext());
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public IGraphicsMode CreateGraphicsMode()
|
public IGraphicsMode CreateGraphicsMode()
|
||||||
{
|
{
|
||||||
return new MacOSGraphicsMode();
|
return new MacOSGraphicsMode();
|
||||||
|
|
|
@ -31,6 +31,14 @@ using OpenTK.Input;
|
||||||
return new WinGLContext(mode, window, shareContext, major, minor, flags);
|
return new WinGLContext(mode, window, shareContext, major, minor, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public GraphicsContext.GetCurrentContextDelegate CreateGetCurrentGraphicsContext()
|
||||||
|
{
|
||||||
|
return (GraphicsContext.GetCurrentContextDelegate)delegate
|
||||||
|
{
|
||||||
|
return new ContextHandle(Wgl.GetCurrentContext());
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public IGraphicsMode CreateGraphicsMode()
|
public IGraphicsMode CreateGraphicsMode()
|
||||||
{
|
{
|
||||||
return new WinGraphicsMode();
|
return new WinGraphicsMode();
|
||||||
|
|
|
@ -43,11 +43,6 @@ namespace OpenTK.Platform.Windows
|
||||||
|
|
||||||
static WinGLContext()
|
static WinGLContext()
|
||||||
{
|
{
|
||||||
// Set the GetCurrentContext implementation.
|
|
||||||
// TODO: Does this belong here?
|
|
||||||
if (GraphicsContext.GetCurrentContext == null)
|
|
||||||
GraphicsContext.GetCurrentContext = WinGLContext.GetCurrentContext;
|
|
||||||
|
|
||||||
// Dynamically load the OpenGL32.dll in order to use the extension loading capabilities of Wgl.
|
// Dynamically load the OpenGL32.dll in order to use the extension loading capabilities of Wgl.
|
||||||
if (opengl32Handle == IntPtr.Zero)
|
if (opengl32Handle == IntPtr.Zero)
|
||||||
{
|
{
|
||||||
|
@ -364,15 +359,6 @@ namespace OpenTK.Platform.Windows
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region static ContextHandle GetCurrentContext()
|
|
||||||
|
|
||||||
static ContextHandle GetCurrentContext()
|
|
||||||
{
|
|
||||||
return new ContextHandle(Wgl.GetCurrentContext());
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -30,6 +30,14 @@ namespace OpenTK.Platform.X11
|
||||||
return new X11GLContext(mode, window, shareContext, DirectRendering, major, minor, flags);
|
return new X11GLContext(mode, window, shareContext, DirectRendering, major, minor, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public OpenTK.Graphics.GraphicsContext.GetCurrentContextDelegate CreateGetCurrentGraphicsContext()
|
||||||
|
{
|
||||||
|
return (GraphicsContext.GetCurrentContextDelegate)delegate
|
||||||
|
{
|
||||||
|
return new ContextHandle(Glx.GetCurrentContext());
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public IGraphicsMode CreateGraphicsMode()
|
public IGraphicsMode CreateGraphicsMode()
|
||||||
{
|
{
|
||||||
return new X11GraphicsMode();
|
return new X11GraphicsMode();
|
||||||
|
|
|
@ -31,13 +31,6 @@ namespace OpenTK.Platform.X11
|
||||||
|
|
||||||
#region --- Constructors ---
|
#region --- Constructors ---
|
||||||
|
|
||||||
static X11GLContext()
|
|
||||||
{
|
|
||||||
// Set the GetCurrentContext implementation.
|
|
||||||
if (GraphicsContext.GetCurrentContext == null)
|
|
||||||
GraphicsContext.GetCurrentContext = X11GLContext.GetCurrentContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
public X11GLContext(GraphicsMode mode, IWindowInfo window, IGraphicsContext shared, bool direct,
|
public X11GLContext(GraphicsMode mode, IWindowInfo window, IGraphicsContext shared, bool direct,
|
||||||
int major, int minor, GraphicsContextFlags flags)
|
int major, int minor, GraphicsContextFlags flags)
|
||||||
{
|
{
|
||||||
|
@ -359,15 +352,6 @@ namespace OpenTK.Platform.X11
|
||||||
Destroy(this, EventArgs.Empty);
|
Destroy(this, EventArgs.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region static ContextHandle GetCurrentContext()
|
|
||||||
|
|
||||||
static ContextHandle GetCurrentContext()
|
|
||||||
{
|
|
||||||
return (ContextHandle)Glx.GetCurrentContext();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region --- IDisposable Members ---
|
#region --- IDisposable Members ---
|
||||||
|
|
|
@ -121,7 +121,7 @@ namespace OpenTK.Platform.X11
|
||||||
|
|
||||||
case XEventName.DestroyNotify:
|
case XEventName.DestroyNotify:
|
||||||
Functions.XPutBackEvent(window.Display, ref e);
|
Functions.XPutBackEvent(window.Display, ref e);
|
||||||
//pollingThread.Abort();
|
Functions.XAutoRepeatOn(window.Display);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue