Framework:

Updates to mode switching under windows plus a little refactoring.
This commit is contained in:
the_fiddler 2006-10-17 19:34:49 +00:00
parent 5728bf0aa5
commit fdd693a4f1
12 changed files with 191 additions and 102 deletions

View file

@ -65,6 +65,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Specifications", "Specifica
Source\OpenGL\Specifications\wglext.spec = Source\OpenGL\Specifications\wglext.spec Source\OpenGL\Specifications\wglext.spec = Source\OpenGL\Specifications\wglext.spec
EndProjectSection EndProjectSection
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{91C9E74A-12CE-4770-82F4-C257CC4A4046}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GLSL.Lesson02", "Source\Examples\OpenGL\GLSL\Lesson02\GLSL.Lesson02.csproj", "{8814A9FE-F6B2-4BE1-82D5-1E9F02BD9B4B}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -95,6 +99,10 @@ Global
{26B55626-4EAB-4CAE-82FE-93CD6564D9EA}.Debug|Any CPU.Build.0 = Debug|Any CPU {26B55626-4EAB-4CAE-82FE-93CD6564D9EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{26B55626-4EAB-4CAE-82FE-93CD6564D9EA}.Release|Any CPU.ActiveCfg = Release|Any CPU {26B55626-4EAB-4CAE-82FE-93CD6564D9EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{26B55626-4EAB-4CAE-82FE-93CD6564D9EA}.Release|Any CPU.Build.0 = Release|Any CPU {26B55626-4EAB-4CAE-82FE-93CD6564D9EA}.Release|Any CPU.Build.0 = Release|Any CPU
{8814A9FE-F6B2-4BE1-82D5-1E9F02BD9B4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8814A9FE-F6B2-4BE1-82D5-1E9F02BD9B4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8814A9FE-F6B2-4BE1-82D5-1E9F02BD9B4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8814A9FE-F6B2-4BE1-82D5-1E9F02BD9B4B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -114,7 +122,9 @@ Global
{1EDDE592-3923-4898-9006-3D69579E1745} = {2F3FEAD4-0FBD-48CC-AFA0-29FFF28284C2} {1EDDE592-3923-4898-9006-3D69579E1745} = {2F3FEAD4-0FBD-48CC-AFA0-29FFF28284C2}
{D26F26AC-2154-4900-93EB-66E5A7761D05} = {2F3FEAD4-0FBD-48CC-AFA0-29FFF28284C2} {D26F26AC-2154-4900-93EB-66E5A7761D05} = {2F3FEAD4-0FBD-48CC-AFA0-29FFF28284C2}
{70FA6EE8-62C6-437F-AD82-117F2D9CDE68} = {C6E60A87-12B4-444A-BE03-7E980EAC0172} {70FA6EE8-62C6-437F-AD82-117F2D9CDE68} = {C6E60A87-12B4-444A-BE03-7E980EAC0172}
{91C9E74A-12CE-4770-82F4-C257CC4A4046} = {C6E60A87-12B4-444A-BE03-7E980EAC0172}
{46980D11-67FA-4B33-903F-BC9D8A4FE60F} = {70FA6EE8-62C6-437F-AD82-117F2D9CDE68} {46980D11-67FA-4B33-903F-BC9D8A4FE60F} = {70FA6EE8-62C6-437F-AD82-117F2D9CDE68}
{8814A9FE-F6B2-4BE1-82D5-1E9F02BD9B4B} = {70FA6EE8-62C6-437F-AD82-117F2D9CDE68}
{26B55626-4EAB-4CAE-82FE-93CD6564D9EA} = {508EF114-8C2A-470D-89FE-5AC15B336B4C} {26B55626-4EAB-4CAE-82FE-93CD6564D9EA} = {508EF114-8C2A-470D-89FE-5AC15B336B4C}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

View file

@ -17,9 +17,10 @@ using OpenTK.OpenGL;
namespace OpenTK.Examples.OpenGL.GLSL namespace OpenTK.Examples.OpenGL.GLSL
{ {
public partial class Cube : OpenTK.Frameworks.Framework public class Cube : OpenTK.Frameworks.Framework
{ {
#region Shaders #region Shaders
string[] vertex_shader_source = string[] vertex_shader_source =
{ {
"void main() {", "void main() {",
@ -32,6 +33,7 @@ namespace OpenTK.Examples.OpenGL.GLSL
{ {
"void main() { gl_FragColor = gl_Color; }\0" "void main() { gl_FragColor = gl_Color; }\0"
}; };
#endregion #endregion
static float angle; static float angle;
@ -153,7 +155,7 @@ namespace OpenTK.Examples.OpenGL.GLSL
break; break;
case Keys.F1: case Keys.F1:
//this.Fullscreen = !this.Fullscreen; this.SetResolution(this.Width, this.Height, this.ColorDepth, !this.Fullscreen);
break; break;
} }
} }

View file

@ -28,7 +28,7 @@ namespace OpenTK.Frameworks
public GLContext Context public GLContext Context
{ {
get { return _context; } get { return _context; }
protected set { _context = value; } private set { _context = value; }
} }
#endregion #endregion
@ -52,7 +52,7 @@ namespace OpenTK.Frameworks
public OpenTK.OpenGL.ColorDepth ColorDepth public OpenTK.OpenGL.ColorDepth ColorDepth
{ {
get { return _color_depth; } get { return _color_depth; }
set { _color_depth = value; } private set { _color_depth = value; }
} }
#endregion #endregion
@ -64,7 +64,7 @@ namespace OpenTK.Frameworks
public int ZDepth public int ZDepth
{ {
get { return _z_depth; } get { return _z_depth; }
set { _z_depth = value; } private set { _z_depth = value; }
} }
#endregion #endregion
@ -76,7 +76,7 @@ namespace OpenTK.Frameworks
public int StencilDepth public int StencilDepth
{ {
get { return _stencil_depth; } get { return _stencil_depth; }
set { _stencil_depth = value; } private set { _stencil_depth = value; }
} }
#endregion #endregion
@ -88,7 +88,7 @@ namespace OpenTK.Frameworks
public Size DesktopResolution public Size DesktopResolution
{ {
get { return _desktop_resolution; } get { return _desktop_resolution; }
protected set { _desktop_resolution = value; } private set { _desktop_resolution = value; }
} }
#endregion #endregion
@ -100,7 +100,19 @@ namespace OpenTK.Frameworks
public float DesktopRefreshRate public float DesktopRefreshRate
{ {
get { return _desktop_refresh_rate; } get { return _desktop_refresh_rate; }
protected set { _desktop_refresh_rate = value; } private set { _desktop_refresh_rate = value; }
}
#endregion
#region DesktopColorDepth property
private OpenTK.OpenGL.ColorDepth _desktop_color_depth;
public OpenTK.OpenGL.ColorDepth DesktopColorDepth
{
get { return _desktop_color_depth; }
private set { _desktop_color_depth = value; }
} }
#endregion #endregion
@ -113,7 +125,7 @@ namespace OpenTK.Frameworks
public Framework() public Framework()
{ {
Setup(null, 640, 480, new OpenTK.OpenGL.ColorDepth(8, 8, 8, 8), 16, 0, false); Setup(null, 800, 600, new OpenTK.OpenGL.ColorDepth(8, 8, 8, 8), 16, 0, false);
} }
@ -124,13 +136,10 @@ namespace OpenTK.Frameworks
#endregion #endregion
public void Setup(string title, int width, int height, OpenTK.OpenGL.ColorDepth color, int depth, int stencil, bool fullscreen) #region Setup(string title, int width, int height, OpenTK.OpenGL.ColorDepth color, int depth, int stencil, bool fullscreen)
{
// Initialise components.
ColorDepth = color;
ZDepth = depth;
StencilDepth = stencil;
private void Setup(string title, int width, int height, OpenTK.OpenGL.ColorDepth color, int depth, int stencil, bool fullscreen)
{
// Set platform. // Set platform.
try try
{ {
@ -140,7 +149,8 @@ namespace OpenTK.Frameworks
} }
else if (Environment.OSVersion.Platform == PlatformID.Unix) else if (Environment.OSVersion.Platform == PlatformID.Unix)
{ {
Implementation = new X11Implementation(); //Implementation = new X11Implementation();
throw new PlatformNotSupportedException("The platform on which you are trying to run this program is not currently supported. Sorry for the inconvenience.");
} }
else else
{ {
@ -162,6 +172,11 @@ namespace OpenTK.Frameworks
// //Context.MakeCurrent(); // //Context.MakeCurrent();
//} //}
// Initialise components.
ColorDepth = color;
ZDepth = depth;
StencilDepth = stencil;
Context = GLContext.Create(this, color, depth, stencil); Context = GLContext.Create(this, color, depth, stencil);
// Code taken from NeHe tutorials // Code taken from NeHe tutorials
@ -172,9 +187,7 @@ namespace OpenTK.Frameworks
//this.SetStyle(ControlStyles.ResizeRedraw, true); // Redraw On Resize //this.SetStyle(ControlStyles.ResizeRedraw, true); // Redraw On Resize
this.SetStyle(ControlStyles.UserPaint, true); // We'll Handle Painting Ourselves this.SetStyle(ControlStyles.UserPaint, true); // We'll Handle Painting Ourselves
this.Size = new Size(width, height); Implementation.SetResolution(width, height, color, fullscreen);
Fullscreen = Implementation.SetResolution(fullscreen);
this.Size = new Size(width, height); // Force the window to change to the requested resolution.
if (title == null) if (title == null)
title = "OpenTK Windows application"; title = "OpenTK Windows application";
@ -183,6 +196,8 @@ namespace OpenTK.Frameworks
Application.Idle += new EventHandler(OnIdle); Application.Idle += new EventHandler(OnIdle);
} }
#endregion
#region Event Handlers #region Event Handlers
/// <summary> /// <summary>
@ -194,14 +209,32 @@ namespace OpenTK.Frameworks
{ {
while (Implementation.IsIdle()) while (Implementation.IsIdle())
{ {
if (ActiveForm != this) //if (ActiveForm != this)
Thread.Sleep(100); // Thread.Sleep(100);
OnPaint(null); OnPaint(null);
} }
} }
#endregion #endregion
#region Public member functions
/// <summary>
/// Requests mode change. The parameters are hints for the mode, which may or may not be
/// possible according to the hardware.
/// </summary>
/// <param name="width">The horizontal resolution in pixels.</param>
/// <param name="height">The vertical resolution in pixels.</param>
/// <param name="color">The color depth.</param>
/// <param name="fullscreen">Set to true to set a fullscreen mode or false to set a windowed mode.</param>
/// <returns>True if the mode set was fullscreen, false otherwise.</returns></returns>
public void SetResolution(int width, int height, OpenTK.OpenGL.ColorDepth color, bool fullscreen)
{
Implementation.SetResolution(width, height, color, fullscreen);
}
#endregion
#region IDisposable Members #region IDisposable Members
void IDisposable.Dispose() void IDisposable.Dispose()

View file

@ -19,8 +19,7 @@ namespace OpenTK.Frameworks
public abstract bool IsIdle(); public abstract bool IsIdle();
public abstract void Setup(); public abstract void Setup();
//abstract public void CloseWindow(); //abstract public void CloseWindow();
public abstract bool SetResolution(int width, int height, OpenTK.OpenGL.ColorDepth color, bool fullscreen); public abstract void SetResolution(int width, int height, OpenTK.OpenGL.ColorDepth color, bool fullscreen);
public abstract bool SetResolution(bool fullscreen);
} }
} }
} }

View file

@ -47,9 +47,6 @@
<Compile Include="WindowsImplementation.cs"> <Compile Include="WindowsImplementation.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="X11Implementation.cs">
<SubType>Form</SubType>
</Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\OpenGL\OpenGL\OpenTK.OpenGL.csproj"> <ProjectReference Include="..\OpenGL\OpenGL\OpenTK.OpenGL.csproj">

View file

@ -48,17 +48,38 @@ namespace OpenTK.Frameworks
override public void Setup() override public void Setup()
{ {
Api.DeviceMode device_mode = new Api.DeviceMode();
Api.EnumDisplaySettings(null, Api.Constants.ENUM_REGISTRY_SETTINGS, device_mode);
framework.DesktopResolution = new Size(device_mode.PelsWidth, device_mode.PelsHeight);
framework.DesktopRefreshRate = device_mode.DisplayFrequency;
framework.DesktopColorDepth = new OpenTK.OpenGL.ColorDepth(device_mode.BitsPerPel);
} }
public override bool SetResolution(int width, int height, OpenTK.OpenGL.ColorDepth color, bool fullscreen) public override void SetResolution(int width, int height, OpenTK.OpenGL.ColorDepth color, bool fullscreen)
{ {
if (framework.Size == new Size(width, height) && framework.ColorDepth == color && framework.Fullscreen == fullscreen)
return;
// If we want to change to a fullscreen mode
if (fullscreen) if (fullscreen)
{ {
Application.Idle -= framework.OnIdle; Application.Idle -= framework.OnIdle;
if (framework.WindowState == FormWindowState.Maximized)
{
Rectangle bounds = framework.RestoreBounds;
framework.WindowState = FormWindowState.Normal;
width = bounds.Width;
height = bounds.Height;
//framework.Size = new Size(bounds.Width, bounds.Height);
//framework.Bounds = new Rectangle(0, 0, bounds.Width, bounds.Height);
}
//if (color != framework.ColorDepth)
// framework.Context.Dispose(); // framework.Context.Dispose();
Api.DeviceMode ScreenSettings = new Api.DeviceMode(); // Device Mode Api.DeviceMode ScreenSettings = new Api.DeviceMode();
ScreenSettings.Size = (short)Marshal.SizeOf(ScreenSettings); // Size Of The Devmode Structure
ScreenSettings.PelsWidth = width; // Selected Screen Width ScreenSettings.PelsWidth = width; // Selected Screen Width
ScreenSettings.PelsHeight = height; // Selected Screen Height ScreenSettings.PelsHeight = height; // Selected Screen Height
ScreenSettings.BitsPerPel = color.Alpha + // Selected Bits Per Pixel ScreenSettings.BitsPerPel = color.Alpha + // Selected Bits Per Pixel
@ -71,8 +92,10 @@ namespace OpenTK.Frameworks
Application.Idle += framework.OnIdle; Application.Idle += framework.OnIdle;
// Try To Set Selected Mode And Get Results. NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar. // Try To Set Selected Mode And Get Results. NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar.
if (Api.ChangeDisplaySettings(ref ScreenSettings, Api.Constants.CDS_FULLSCREEN) == Api.Constants.DISP_CHANGE_SUCCESSFUL) if (Api.ChangeDisplaySettings(ScreenSettings, Api.Constants.CDS_FULLSCREEN) == Api.Constants.DISP_CHANGE_SUCCESSFUL)
{ {
framework.Fullscreen = true;
framework.FormBorderStyle = FormBorderStyle.None; framework.FormBorderStyle = FormBorderStyle.None;
framework.StartPosition = FormStartPosition.Manual; framework.StartPosition = FormStartPosition.Manual;
framework.Location = new System.Drawing.Point(0, 0); framework.Location = new System.Drawing.Point(0, 0);
@ -82,60 +105,36 @@ namespace OpenTK.Frameworks
Cursor.Hide(); Cursor.Hide();
framework.Size = new Size(width, height); framework.Size = new Size(width, height);
return true;
} }
else else
{ {
return false; // If mode change wasn't possible.
} framework.Fullscreen = false;
}
framework.Size = new Size(width, height); framework.Size = new Size(width, height);
return false;
} }
}
public override bool SetResolution(bool fullscreen) else
{ {
if (fullscreen) // If we already are in fullscreen mode and we want to change to windowed mode.
if (framework.Fullscreen)
{ {
Application.Idle -= framework.OnIdle; Application.Idle -= framework.OnIdle;
//framework.Context.Dispose();
Api.DeviceMode ScreenSettings = new Api.DeviceMode(); // Device Mode // Restore display settings
ScreenSettings.Size = (short)Marshal.SizeOf(ScreenSettings); // Size Of The Devmode Structure Api.ChangeDisplaySettings(null, 0);
ScreenSettings.PelsWidth = framework.Width; // Selected Screen Width framework.FormBorderStyle = FormBorderStyle.Sizable;
ScreenSettings.PelsHeight = framework.Height; // Selected Screen Height framework.StartPosition = FormStartPosition.WindowsDefaultLocation;
ScreenSettings.BitsPerPel = framework.ColorDepth.Alpha + // Selected Bits Per Pixel framework.Capture = false;
framework.ColorDepth.Red +
framework.ColorDepth.Green +
framework.ColorDepth.Blue;
ScreenSettings.Fields = Api.Constants.DM_BITSPERPEL | Api.Constants.DM_PELSWIDTH | Api.Constants.DM_PELSHEIGHT;
//framework.Context = GLContext.Create(framework, framework.ColorDepth, 16, 0);
Application.Idle += framework.OnIdle;
// Try To Set Selected Mode And Get Results. NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar.
if (Api.ChangeDisplaySettings(ref ScreenSettings, Api.Constants.CDS_FULLSCREEN) == Api.Constants.DISP_CHANGE_SUCCESSFUL)
{
framework.FormBorderStyle = FormBorderStyle.None;
framework.StartPosition = FormStartPosition.Manual;
framework.Location = new System.Drawing.Point(0, 0);
//framework.Region = new Region(new Rectangle(0, 0, width, height));
framework.Capture = true;
framework.SetTopLevel(true); framework.SetTopLevel(true);
Cursor.Hide(); Cursor.Show();
return true; Application.Idle += framework.OnIdle;
}
else
{
return false;
}
} }
return false; framework.Fullscreen = false;
framework.Size = new Size(width, height);
}
} }
} }
} }

View file

@ -48,11 +48,6 @@ namespace OpenTK.Frameworks
{ {
throw new Exception("The method or operation is not implemented."); throw new Exception("The method or operation is not implemented.");
} }
public override bool SetResolution(bool fullscreen)
{
throw new Exception("The method or operation is not implemented.");
}
} }
} }
} }

View file

@ -17888,4 +17888,3 @@ namespace OpenTK.OpenGL
#endregion static Constructor #endregion static Constructor
} }
} }

View file

@ -12,6 +12,28 @@ namespace OpenTK.OpenGL
public struct ColorDepth public struct ColorDepth
{ {
public ColorDepth(int bpp)
{
Red = Green = Blue = Alpha = 0;
switch (bpp)
{
case 32:
Red = Green = Blue = Alpha = 8;
break;
case 24:
Red = Green = Blue = 8;
break;
case 16:
Red = Blue = 5;
Green = 6;
break;
case 15:
Red = Green = Blue = 5;
break;
}
}
public ColorDepth(byte red, byte green, byte blue, byte alpha) public ColorDepth(byte red, byte green, byte blue, byte alpha)
{ {
Red = red; Red = red;
@ -21,6 +43,19 @@ namespace OpenTK.OpenGL
} }
public byte Red, Green, Blue, Alpha; public byte Red, Green, Blue, Alpha;
public static bool operator ==(ColorDepth left, ColorDepth right)
{
return left.Red == right.Red &&
left.Green == right.Green &&
left.Blue == right.Blue &&
left.Alpha == right.Alpha;
}
public static bool operator !=(ColorDepth left, ColorDepth right)
{
return !(left == right);
}
} }
#endregion #endregion

View file

@ -56,6 +56,7 @@ namespace OpenTK.Platform.Windows
public const int DISP_CHANGE_FAILED = -1; public const int DISP_CHANGE_FAILED = -1;
// (found in WinUSER.h) // (found in WinUSER.h)
public const int ENUM_REGISTRY_SETTINGS = -2;
public const int ENUM_CURRENT_SETTINGS = -1; public const int ENUM_CURRENT_SETTINGS = -1;
} }
#endregion #endregion
@ -400,9 +401,16 @@ namespace OpenTK.Platform.Windows
/// <param name="flags"></param> /// <param name="flags"></param>
/// <returns></returns> /// <returns></returns>
[DllImport("user32.dll", SetLastError = true)] [DllImport("user32.dll", SetLastError = true)]
public static extern int ChangeDisplaySettings(ref DeviceMode device_mode, int flags); public static extern int ChangeDisplaySettings(DeviceMode device_mode, int flags);
#endregion int ChangeDisplaySettings(ref Gdi.DEVMODE devMode, int flags) #endregion int ChangeDisplaySettings(ref Gdi.DEVMODE devMode, int flags)
#region EnumDisplaySettings
[DllImport("user32.dll", SetLastError = true)]
public static extern int EnumDisplaySettings([MarshalAs(UnmanagedType.LPTStr)] string device_name, int graphics_mode, DeviceMode device_mode);
#endregion
// *********** Never use GetLastError! ************ // *********** Never use GetLastError! ************
@ -579,15 +587,21 @@ namespace OpenTK.Platform.Windows
} }
#endregion #endregion
#region DeviceMode struct #region DeviceMode class
[StructLayout(LayoutKind.Sequential)] [StructLayout(LayoutKind.Sequential)]
public struct DeviceMode public class DeviceMode
{ {
public DeviceMode()
{
Size = (short)Marshal.SizeOf(this);
}
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=32)] [MarshalAs(UnmanagedType.ByValTStr, SizeConst=32)]
public string DeviceName; public string DeviceName;
public short SpecVersion; public short SpecVersion;
public short DriverVersion; public short DriverVersion;
public short Size; private short Size;
public short DriverExtra; public short DriverExtra;
public int Fields; public int Fields;
public short Orientation; public short Orientation;
@ -620,16 +634,21 @@ namespace OpenTK.Platform.Windows
public int PanningWidth; public int PanningWidth;
public int PanningHeight; public int PanningHeight;
} }
#endregion
#endregion DeviceMode class
#endregion #endregion
#region Callbacks
[UnmanagedFunctionPointerAttribute(CallingConvention.Winapi)] [UnmanagedFunctionPointerAttribute(CallingConvention.Winapi)]
public delegate void WindowProcedureEventHandler(object sender, WindowProcedureEventArgs e); public delegate void WindowProcedureEventHandler(object sender, WindowProcedureEventArgs e);
public class WindowProcedureEventArgs : EventArgs public class WindowProcedureEventArgs : EventArgs
{ {
public System.Windows.Forms.Message Msg; public Message Msg;
} }
#endregion
} }
} }

View file

@ -3,10 +3,16 @@ OpenTK 0.3.6
OpenTK 0.3.5 -> 0.3.6 OpenTK 0.3.5 -> 0.3.6
+ Updates to OpenTK.OpenGL.Bind (see that changelog for more info). + Updates to OpenTK.OpenGL.Bind (see that changelog for more info).
+ Revamped GL class (is self contained) + Revamped GL class (it is self contained now).
+ Revamped GLContext class (it is no longer bound to the GL class initialisation). + Revamped GLContext class (it is no longer bound to the GL class initialisation).
+ Directory structure updates (Documentation folder for each project, plus main Documentation folder) + Directory structure updates.
+ Framework updates (cleaner implementation, new namespace). + Now every project has its own documentation.
+ The spec files for OpenGL now reside in the Source/OpenTK/OpenGL directory.
+ Framework updates:
+ Cleaner implementation.
+ New namespace.
+ Supports basic mode sswitching under windows (the code is not robust enough, yet).
+ Added very basic GLX and X bindings, just enough to create a basic OpenGL window.
OpenTK 0.3.4 -> 0.3.5 OpenTK 0.3.4 -> 0.3.5

View file

@ -1,18 +1,13 @@
Todo: Todo:
+ + + Update directory structure (specs shouldn't reside in the top directory) + + + Restore the Extensions.
+ + + Fully implement Framework class. + + + Fully implement Framework class.
+ + + Correct the Dispose methods to correctly clean resources (they should also call GC.SupressFinalize(true)) + + + Correct the Dispose methods to correctly clean resources (they should also call GC.SupressFinalize(true))
+ + + Add basic GLX bindings (in progress) + + + Fix X support in the framework.
+ + + Add basic X bindings (in progress)
+ + + Add context creation support for X (needs fixing)
+ + + Test X support.
+ + + Add the CLS compliant attribute to the GL class. + + + Add the CLS compliant attribute to the GL class.
+ + + Clean up the build system for windows .Net, and add build system for linux Mono and windows Mono. + + + Clean up the build system for windows .Net, and add build system for linux Mono and windows Mono.
+ + Add docs to each project. + Probably something like Nant?
+ + Add cross-platform way for defining the Application.Idle handler (needs testing) + + Document projects (source and manuals).
+ + Add more constructors to the Context classes. + + Add more constructors to the Context classes.
+ + Add comments and documentation (faqs, pitfalls, best practices).
+ + Add a cross-platform build system (probably NAnt?)
+ Add more examples. + Add more examples.
+ Find out what is needed for the MacOS platform (how to do function loading and window management without X11). + Find out what is needed for the MacOS platform (how to do function loading and window management without X11).
+ Add full bindings for glu, wgl, glx and agl (probably generated automatically). + Add full bindings for glu, wgl, glx and agl (probably generated automatically).