[GLControl] Use dummy context in design mode
Creating a GraphicsContext with null parameters is not a guarantee that we will get a dummy context that does not call any OpenGL functions. We need to explicitly define and construct a dummy context that is safe to use inside the designer. Affects issue #49
This commit is contained in:
parent
b87b9e0a27
commit
c2e3328f59
1 changed files with 117 additions and 1 deletions
|
@ -37,7 +37,7 @@ namespace OpenTK
|
||||||
|
|
||||||
public IGraphicsContext CreateContext(int major, int minor, GraphicsContextFlags flags)
|
public IGraphicsContext CreateContext(int major, int minor, GraphicsContextFlags flags)
|
||||||
{
|
{
|
||||||
return new GraphicsContext(null, null);
|
return new DummyContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsIdle
|
public bool IsIdle
|
||||||
|
@ -51,5 +51,121 @@ namespace OpenTK
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region class DummyContext
|
||||||
|
|
||||||
|
class DummyContext : IGraphicsContext, IGraphicsContextInternal
|
||||||
|
{
|
||||||
|
static int instance_count;
|
||||||
|
|
||||||
|
readonly ContextHandle handle = new ContextHandle(new IntPtr(
|
||||||
|
System.Threading.Interlocked.Increment(ref instance_count)));
|
||||||
|
|
||||||
|
IWindowInfo current_window;
|
||||||
|
bool is_disposed;
|
||||||
|
int swap_interval;
|
||||||
|
|
||||||
|
#region IGraphicsContext Members
|
||||||
|
|
||||||
|
public void SwapBuffers()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MakeCurrent(IWindowInfo window)
|
||||||
|
{
|
||||||
|
current_window = window;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsCurrent
|
||||||
|
{
|
||||||
|
get { return current_window != null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsDisposed
|
||||||
|
{
|
||||||
|
get { return is_disposed; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool VSync
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return SwapInterval != 0;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SwapInterval = value ? 1 : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int SwapInterval
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return swap_interval;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
swap_interval = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update(IWindowInfo window)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public GraphicsMode GraphicsMode
|
||||||
|
{
|
||||||
|
get { return GraphicsMode.Default; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ErrorChecking
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadAll()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
is_disposed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region IGraphicsContextInternal
|
||||||
|
|
||||||
|
public ContextHandle Context
|
||||||
|
{
|
||||||
|
get { return handle; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public IntPtr GetAddress(IntPtr function)
|
||||||
|
{
|
||||||
|
return IntPtr.Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IntPtr GetAddress(string function)
|
||||||
|
{
|
||||||
|
return IntPtr.Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IGraphicsContext Implementation
|
||||||
|
{
|
||||||
|
get { return this; }
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue