Updated to follow the new naming conventions. Fonts tutorial is broken.

This commit is contained in:
the_fiddler 2007-11-04 15:32:24 +00:00
parent bb49c1d403
commit e556150d2f
13 changed files with 301 additions and 376 deletions

View file

@ -64,6 +64,8 @@ namespace Examples
#endregion
#region public void ExampleLauncher_Load(object sender, EventArgs e)
public void ExampleLauncher_Load(object sender, EventArgs e)
{
try
@ -119,27 +121,7 @@ namespace Examples
this.listBox1.SelectedIndex = 0;
}
void LaunchGameWindow(object example)
{
Type ex = example as Type;
try
{
using (GameWindow gw = (GameWindow)(ex.GetConstructor(Type.EmptyTypes).Invoke(null)))
{
(gw as IExample).Launch();
}
}
catch (Exception expt)
{
if (expt.InnerException != null)
MessageBox.Show(expt.InnerException.ToString(), "An error has occured: \"" + expt.InnerException.Message + "\"",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
else
MessageBox.Show(expt.ToString(), "An error has occured: \"" + expt.Message + "\"",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
#endregion
private void RunExample()
{
@ -150,36 +132,43 @@ namespace Examples
Debug.Print("Launching example: {0}", example.ToString());
this.Visible = false;
if (example.BaseType == typeof(GameWindow))
try
{
LaunchGameWindow(example);
}
else if (example.BaseType == typeof(Form))
{
try
if (example.BaseType == typeof(GameWindow))
{
using (GameWindow gw = (GameWindow)(example.GetConstructor(Type.EmptyTypes).Invoke(null)))
{
(gw as IExample).Launch();
}
}
else if (example.BaseType == typeof(Form))
{
using (Form f = (Form)example.GetConstructor(Type.EmptyTypes).Invoke(null))
{
f.ShowDialog(this);
}
}
catch (Exception expt)
else
{
MessageBox.Show(
String.Format(
"Stacktrace:{0}{1}{0}{0}Inner exception:{0}{2}",
System.Environment.NewLine,
expt.StackTrace,
expt.InnerException
),
expt.Message);
// Console application.
IExample ex = (IExample)example.GetConstructor(Type.EmptyTypes).Invoke(null);
ex.Launch();
}
}
else
catch (Exception expt)
{
// Console application.
IExample ex = (IExample)example.GetConstructor(Type.EmptyTypes).Invoke(null);
ex.Launch();
#if DEBUG
throw;
#else
if (expt.InnerException != null)
MessageBox.Show(expt.InnerException.ToString(), "An error has occured: \"" +
expt.InnerException.Message + "\"", MessageBoxButtons.OK, MessageBoxIcon.Warning);
else
MessageBox.Show(expt.ToString(), "An error has occured: \"" + expt.Message + "\"",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
#endif
}
GC.Collect();

View file

@ -13,6 +13,7 @@ using System.Windows.Forms;
using OpenTK.OpenGL;
using System.Security;
using OpenTK.OpenGL.Enums;
namespace Examples.Tests
{
@ -92,10 +93,7 @@ namespace Examples.Tests
Trace.Write("Timing OpenTK.OpenGL core functions (void*): ");
timer.Start();
for (int i = 0; ++i < num_calls; )
{
GL.CallLists(v.Length, GL.Enums.ListNameType.FLOAT, v);
}
GL.CallLists(v.Length, ListNameType.Float, v);
timer.Stop();
Trace.WriteLine(String.Format("{0} ns", timer.Elapsed.TotalMilliseconds * (1000000.0 / (double)num_calls)));
timer.Reset();
@ -103,9 +101,8 @@ namespace Examples.Tests
Trace.Write("Timing OpenTK.OpenGL extension functions: ");
timer.Start();
for (int i = 0; ++i < num_calls; )
{
GL.ARB.ActiveTexture(GL.Enums.ARB_multitexture.TEXTURE0_ARB);
}
GL.Arb.ActiveTexture(ArbMultitexture.Texture0Arb);
timer.Stop();
Trace.WriteLine(String.Format("{0} ns", timer.Elapsed.TotalMilliseconds * (1000000.0 / (double)num_calls)));
timer.Reset();
@ -139,7 +136,7 @@ namespace Examples.Tests
timer.Start();
for (int i = 0; ++i < num_calls; )
{
glCallLists(v.Length, GL.Enums.ListNameType.FLOAT, v);
glCallLists(v.Length, ListNameType.Float, v);
}
timer.Stop();
Trace.WriteLine(String.Format("{0} ns", timer.Elapsed.TotalMilliseconds * (1000000.0 / (double)num_calls)));
@ -168,7 +165,7 @@ namespace Examples.Tests
extern static void glVertex2fv(float[] v);
[DllImport("opengl32.dll", EntryPoint = "glCallLists"), SuppressUnmanagedCodeSecurity]
extern static void glCallLists(int count, GL.Enums.ListNameType type, object lists);
extern static void glCallLists(int count, ListNameType type, object lists);
}
}

View file

@ -14,6 +14,7 @@ using OpenTK.Fonts;
using OpenTK.OpenGL;
using OpenTK.Input;
using System.IO;
using OpenTK.OpenGL.Enums;
namespace Examples.Tutorial
{
@ -36,9 +37,9 @@ namespace Examples.Tutorial
public override void OnLoad(EventArgs e)
{
GL.Enable(GL.Enums.EnableCap.TEXTURE_2D);
GL.Enable(GL.Enums.EnableCap.BLEND);
GL.BlendFunc(GL.Enums.BlendingFactorSrc.SRC_ALPHA, GL.Enums.BlendingFactorDest.ONE_MINUS_SRC_ALPHA);
GL.Enable(EnableCap.Texture2d);
GL.Enable(EnableCap.Blend);
GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
//serif.LoadGlyphs("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz,.!?;()\'- ");
serif.LoadGlyphs("A");
@ -92,13 +93,13 @@ namespace Examples.Tutorial
current_position = initial_position;
scroll_position = current_position;
GL.Clear(GL.Enums.ClearBufferMask.COLOR_BUFFER_BIT);
GL.Clear(ClearBufferMask.ColorBufferBit);
GL.MatrixMode(GL.Enums.MatrixMode.PROJECTION);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
GL.Ortho(0.0, Width, Height, 0.0, 0.0, 1.0);
GL.MatrixMode(GL.Enums.MatrixMode.MODELVIEW);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
GL.Translate(0.0f, scroll_position, 0.0f);
@ -110,13 +111,13 @@ namespace Examples.Tutorial
int texture;
serif.GlyphData('A', ref rect, out width, out height, out texture);
GL.BindTexture(GL.Enums.TextureTarget.TEXTURE_2D, texture);
GL.BindTexture(TextureTarget.Texture2d, texture);
GL.Enable(GL.Enums.EnableCap.BLEND);
GL.BlendFunc(GL.Enums.BlendingFactorSrc.SRC_ALPHA, GL.Enums.BlendingFactorDest.ONE_MINUS_SRC_ALPHA);
GL.Enable(EnableCap.Blend);
GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
//GL.Color4(Color.White);
GL.Begin(GL.Enums.BeginMode.QUADS);
GL.Begin(BeginMode.Quads);
GL.TexCoord2(rect.Left, rect.Top);
GL.Vertex2(0.0, 0.0);

View file

@ -13,6 +13,7 @@ using System.Diagnostics;
using OpenTK;
using OpenTK.OpenGL;
using OpenTK.Fonts;
using OpenTK.OpenGL.Enums;
namespace Examples.Tutorial
{
@ -22,10 +23,7 @@ namespace Examples.Tutorial
public class T01_Simple_Window : GameWindow, IExample
{
public T01_Simple_Window() : base(new DisplayMode(800, 600), "OpenTK | Tutorial 1: Simple Window")
{
}
TextureFont sans = new TextureFont(new Font(FontFamily.GenericSansSerif, 16.0f));
{ }
#region OnLoad
@ -51,7 +49,7 @@ namespace Examples.Tutorial
{
GL.Viewport(0, 0, e.Width, e.Height);
GL.MatrixMode(GL.Enums.MatrixMode.PROJECTION);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
GL.Ortho(-1.0, 1.0, -1.0, 1.0, 0.0, 4.0);
@ -86,9 +84,9 @@ namespace Examples.Tutorial
/// <remarks>There is no need to call the base implementation.</remarks>
public override void OnRenderFrame(RenderFrameEventArgs e)
{
GL.Clear(GL.Enums.ClearBufferMask.COLOR_BUFFER_BIT);
/*
GL.Begin(GL.Enums.BeginMode.TRIANGLES);
GL.Clear(ClearBufferMask.ColorBufferBit);
GL.Begin(BeginMode.Triangles);
GL.Color3(Color.SpringGreen);
GL.Vertex2(-1.0f, 1.0f);
@ -99,19 +97,6 @@ namespace Examples.Tutorial
GL.End();
GL.PushMatrix();
*/
GL.MatrixMode(GL.Enums.MatrixMode.MODELVIEW);
GL.LoadIdentity();
GL.Ortho(-1.0, 1.0, -1.0, 1.0, 0.0, 1.0);
GL.MatrixMode(GL.Enums.MatrixMode.PROJECTION);
GL.LoadIdentity();
GL.Translate(0.7f, 1.0f, 0.0f);
//sans.Print(RenderPeriod.ToString());
//GL.PopMatrix();
this.SwapBuffers();
}

View file

@ -15,6 +15,7 @@ using OpenTK.OpenGL;
using System.Diagnostics;
using OpenTK.Input;
using OpenTK.Fonts;
using OpenTK.OpenGL.Enums;
namespace Examples.Tutorial
{
@ -27,7 +28,8 @@ namespace Examples.Tutorial
float angle = 0.0f;
Shapes.Shape shape = new Examples.Shapes.Plane(16, 16, 2.0f, 2.0f);
TextureFont sans = new TextureFont(new Font(FontFamily.GenericSansSerif, 32, FontStyle.Regular, GraphicsUnit.Pixel));
TextureFont sans = new TextureFont(new Font(FontFamily.GenericSansSerif, 32, FontStyle.Regular,
GraphicsUnit.Pixel));
#region Constructor
@ -57,14 +59,14 @@ namespace Examples.Tutorial
public override void OnLoad(EventArgs e)
{
GL.Enable(GL.Enums.EnableCap.TEXTURE_2D);
GL.Enable(EnableCap.Texture2d);
GL.ClearColor(Color.CadetBlue);
GL.Enable(GL.Enums.EnableCap.DEPTH_TEST);
GL.Enable(EnableCap.DepthTest);
GL.EnableClientState(GL.Enums.EnableCap.VERTEX_ARRAY);
GL.EnableClientState(EnableCap.VertexArray);
//GL.EnableClientState(GL.Enums.EnableCap.COLOR_ARRAY);
GL.VertexPointer(3, GL.Enums.VertexPointerType.FLOAT, 0, shape.Vertices);
GL.VertexPointer(3, VertexPointerType.Float, 0, shape.Vertices);
//GL.ColorPointer(4, GL.Enums.ColorPointerType.UNSIGNED_BYTE, 0, shape.Colors);
}
@ -87,7 +89,7 @@ namespace Examples.Tutorial
double ratio = e.Width / (double)e.Height;
GL.MatrixMode(GL.Enums.MatrixMode.PROJECTION);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
Glu.Perspective(45.0, ratio, 1.0, 64.0);
}
@ -139,9 +141,9 @@ namespace Examples.Tutorial
/// </summary>
public override void OnRenderFrame(RenderFrameEventArgs e)
{
GL.Clear(GL.Enums.ClearBufferMask.COLOR_BUFFER_BIT | GL.Enums.ClearBufferMask.DEPTH_BUFFER_BIT);
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.MatrixMode(GL.Enums.MatrixMode.MODELVIEW);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
Glu.LookAt(
0.0, 5.0, 5.0,
@ -155,10 +157,8 @@ namespace Examples.Tutorial
angle -= 360.0f;
GL.Rotate(angle, 0.0f, 1.0f, 0.0f);
GL.DrawElements(GL.Enums.BeginMode.TRIANGLES, shape.Indices.Length,
GL.Enums.All.UNSIGNED_INT, shape.Indices);
// GL.DrawArrays(GL.Enums.BeginMode.LINES, 0, shape.Vertices.Length);
GL.DrawElements(BeginMode.Triangles, shape.Indices.Length,
All.UnsignedInt, shape.Indices);
//GL.Begin(GL.Enums.BeginMode.TRIANGLES);
@ -170,10 +170,10 @@ namespace Examples.Tutorial
GL.PushMatrix();
GL.MatrixMode(GL.Enums.MatrixMode.PROJECTION);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
GL.Ortho(-1.0, 1.0, -1.0, 1.0, 0.0, 1.0);
GL.MatrixMode(GL.Enums.MatrixMode.MODELVIEW);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
//GL.Translate(0.7f, 1.0f, 0.0f);

View file

@ -14,6 +14,7 @@ using System.Drawing;
using OpenTK;
using OpenTK.OpenGL;
using OpenTK.OpenGL.Enums;
using OpenTK.Platform;
#endregion
@ -36,13 +37,11 @@ namespace Examples.Tutorial
#region --- Constructors ---
public T03_Immediate_Mode_Cube()
{
CreateWindow(new DisplayMode(800, 600));
}
#endregion
public T03_Immediate_Mode_Cube() : base(new DisplayMode(800, 600), "OpenTK Tutorial: Immediate mode rendering")
{ }
#endregion
#region OnLoad
public override void OnLoad(EventArgs e)
@ -50,7 +49,7 @@ namespace Examples.Tutorial
base.OnLoad(e);
GL.ClearColor(Color.MidnightBlue);
GL.Enable(GL.Enums.EnableCap.DEPTH_TEST);
GL.Enable(EnableCap.DepthTest);
}
#endregion
@ -72,7 +71,7 @@ namespace Examples.Tutorial
double ratio = e.Width / (double)e.Height;
GL.MatrixMode(GL.Enums.MatrixMode.PROJECTION);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
Glu.Perspective(45.0, ratio, 1.0, 64.0);
}
@ -117,15 +116,14 @@ namespace Examples.Tutorial
/// </summary>
public override void OnRenderFrame(RenderFrameEventArgs e)
{
GL.Clear(GL.Enums.ClearBufferMask.COLOR_BUFFER_BIT | GL.Enums.ClearBufferMask.DEPTH_BUFFER_BIT);
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.MatrixMode(GL.Enums.MatrixMode.MODELVIEW);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
Glu.LookAt(
0.0, 5.0, 5.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0
);
Glu.LookAt(0.0, 5.0, 5.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
GL.Rotate(angle, 0.0f, 1.0f, 0.0f);
DrawCube();
@ -140,7 +138,7 @@ namespace Examples.Tutorial
private void DrawCube()
{
GL.Begin(GL.Enums.BeginMode.QUADS);
GL.Begin(BeginMode.Quads);
GL.Color3(Color.Silver);
GL.Vertex3(-1.0f, -1.0f, -1.0f);

View file

@ -12,6 +12,7 @@ using System.Drawing;
using OpenTK;
using OpenTK.OpenGL;
using Examples.Shapes;
using OpenTK.OpenGL.Enums;
namespace Examples.Tutorial
{
@ -38,31 +39,31 @@ namespace Examples.Tutorial
base.OnLoad(e);
GL.ClearColor(Color.MidnightBlue);
GL.Enable(GL.Enums.EnableCap.DEPTH_TEST);
GL.Enable(EnableCap.DepthTest);
//GL.Enable(GL.Enums.EnableCap.CULL_FACE);
GL.EnableClientState(GL.Enums.EnableCap.VERTEX_ARRAY);
GL.EnableClientState(GL.Enums.EnableCap.NORMAL_ARRAY);
GL.VertexPointer(3, GL.Enums.VertexPointerType.FLOAT, 0, shape.Vertices);
GL.NormalPointer(GL.Enums.NormalPointerType.FLOAT, 0, shape.Normals);
GL.EnableClientState(EnableCap.VertexArray);
GL.EnableClientState(EnableCap.NormalArray);
GL.VertexPointer(3, VertexPointerType.Float, 0, shape.Vertices);
GL.NormalPointer(NormalPointerType.Float, 0, shape.Normals);
// Enable Light 0 and set its parameters.
GL.Lightv(GL.Enums.LightName.LIGHT0, GL.Enums.LightParameter.POSITION, new float[] { 1.0f, 1.0f, -0.5f });
GL.Lightv(GL.Enums.LightName.LIGHT0, GL.Enums.LightParameter.AMBIENT, new float[] { 0.3f, 0.3f, 0.3f, 1.0f });
GL.Lightv(GL.Enums.LightName.LIGHT0, GL.Enums.LightParameter.DIFFUSE, new float[] { 1.0f, 1.0f, 1.0f, 1.0f });
GL.Lightv(GL.Enums.LightName.LIGHT0, GL.Enums.LightParameter.SPECULAR, new float[] { 1.0f, 1.0f, 1.0f, 1.0f });
GL.Lightv(GL.Enums.LightName.LIGHT0, GL.Enums.LightParameter.SPOT_EXPONENT, new float[] { 1.0f, 1.0f, 1.0f, 1.0f });
GL.LightModelv(GL.Enums.LightModelParameter.LIGHT_MODEL_AMBIENT, new float[] { 0.2f, 0.2f, 0.2f, 1.0f });
GL.LightModel(GL.Enums.LightModelParameter.LIGHT_MODEL_TWO_SIDE, 1);
GL.LightModel(GL.Enums.LightModelParameter.LIGHT_MODEL_LOCAL_VIEWER, 1);
GL.Enable(GL.Enums.EnableCap.LIGHTING);
GL.Enable(GL.Enums.EnableCap.LIGHT0);
GL.Lightv(LightName.Light0, LightParameter.Position, new float[] { 1.0f, 1.0f, -0.5f });
GL.Lightv(LightName.Light0, LightParameter.Ambient, new float[] { 0.3f, 0.3f, 0.3f, 1.0f });
GL.Lightv(LightName.Light0, LightParameter.Diffuse, new float[] { 1.0f, 1.0f, 1.0f, 1.0f });
GL.Lightv(LightName.Light0, LightParameter.Specular, new float[] { 1.0f, 1.0f, 1.0f, 1.0f });
GL.Lightv(LightName.Light0, LightParameter.SpotExponent, new float[] { 1.0f, 1.0f, 1.0f, 1.0f });
GL.LightModelv(LightModelParameter.LightModelAmbient, new float[] { 0.2f, 0.2f, 0.2f, 1.0f });
GL.LightModel(LightModelParameter.LightModelTwoSide, 1);
GL.LightModel(LightModelParameter.LightModelLocalViewer, 1);
GL.Enable(EnableCap.Lighting);
GL.Enable(EnableCap.Light0);
// Use GL.Material to set your object's material parameters..
GL.Materialv(GL.Enums.MaterialFace.FRONT, GL.Enums.MaterialParameter.AMBIENT, new float[] { 0.3f, 0.3f, 0.3f, 1.0f });
GL.Materialv(GL.Enums.MaterialFace.FRONT, GL.Enums.MaterialParameter.DIFFUSE, new float[] { 1.0f, 1.0f, 1.0f, 1.0f });
GL.Materialv(GL.Enums.MaterialFace.FRONT, GL.Enums.MaterialParameter.SPECULAR, new float[] { 1.0f, 1.0f, 1.0f, 1.0f });
GL.Materialv(GL.Enums.MaterialFace.FRONT, GL.Enums.MaterialParameter.EMISSION, new float[] { 0.0f, 0.0f, 0.0f, 1.0f });
// Use GL.Material to set your object's material parameters.
GL.Materialv(MaterialFace.Front, MaterialParameter.Ambient, new float[] { 0.3f, 0.3f, 0.3f, 1.0f });
GL.Materialv(MaterialFace.Front, MaterialParameter.Diffuse, new float[] { 1.0f, 1.0f, 1.0f, 1.0f });
GL.Materialv(MaterialFace.Front, MaterialParameter.Specular, new float[] { 1.0f, 1.0f, 1.0f, 1.0f });
GL.Materialv(MaterialFace.Front, MaterialParameter.Emission, new float[] { 0.0f, 0.0f, 0.0f, 1.0f });
}
#endregion
@ -84,7 +85,7 @@ namespace Examples.Tutorial
double ratio = e.Width / (double)e.Height;
GL.MatrixMode(GL.Enums.MatrixMode.PROJECTION);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
Glu.Perspective(45.0, ratio, 1.0, 64.0);
}
@ -139,18 +140,18 @@ namespace Examples.Tutorial
/// </summary>
public override void OnRenderFrame(RenderFrameEventArgs e)
{
GL.Clear(GL.Enums.ClearBufferMask.COLOR_BUFFER_BIT | GL.Enums.ClearBufferMask.DEPTH_BUFFER_BIT);
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.MatrixMode(GL.Enums.MatrixMode.MODELVIEW);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
Glu.LookAt(
0.0, 0.0, -7.5 + zoom,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
Glu.LookAt(0.0, 0.0, -7.5 + zoom,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
GL.Rotate(x_angle, 0.0f, 1.0f, 0.0f);
GL.DrawElements(GL.Enums.BeginMode.TRIANGLES, shape.Indices.Length,
GL.Enums.All.UNSIGNED_INT, shape.Indices);
//GL.DrawElements(GL.Enums.BeginMode.TRIANGLES, shape.Indices.Length,
// GL.Enums.All.UNSIGNED_INT, shape.Indices);
GL.DrawArrays(BeginMode.Points, 0, shape.Vertices.Length);
SwapBuffers();
}

View file

@ -13,12 +13,12 @@ using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using OpenTK.OpenGL;
using Enums = OpenTK.OpenGL.GL.Enums;
using OpenTK;
using System.Threading;
using OpenTK;
using OpenTK.OpenGL;
using OpenTK.OpenGL.Enums;
#endregion --- Using Directives ---
namespace Examples.Tutorial
@ -46,9 +46,9 @@ namespace Examples.Tutorial
public override void OnLoad(EventArgs e)
{
GL.ClearColor(0.1f, 0.1f, 0.5f, 0.0f);
GL.Enable(Enums.EnableCap.DEPTH_TEST);
GL.Enable(EnableCap.DepthTest);
GL.MatrixMode(Enums.MatrixMode.MODELVIEW);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
// Build some display lists.
@ -57,7 +57,7 @@ namespace Examples.Tutorial
for (int i = 0; i < num_lists; i++)
{
lists[i] = first_list + i;
GL.NewList(first_list + i, Enums.ListMode.COMPILE);
GL.NewList(first_list + i, ListMode.Compile);
GL.Color3(1.0, c, 1 - c);
@ -66,7 +66,7 @@ namespace Examples.Tutorial
GL.Rotate(c * 360.0f, 0.0, 0.0, 1.0);
GL.Translate(5.0, 0.0, 0.0);
GL.Begin(Enums.BeginMode.QUADS);
GL.Begin(BeginMode.Quads);
GL.Vertex3(-1.0f, -1.0f, 1.0f);
GL.Vertex3(1.0f, -1.0f, 1.0f);
@ -103,7 +103,7 @@ namespace Examples.Tutorial
double ratio = 0.0;
ratio = this.Width / (double)this.Height;
GL.MatrixMode(Enums.MatrixMode.PROJECTION);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
Glu.Perspective(45.0, ratio, 1.0, 64.0);
}
@ -126,15 +126,15 @@ namespace Examples.Tutorial
public override void OnRenderFrame(RenderFrameEventArgs e)
{
GL.MatrixMode(Enums.MatrixMode.MODELVIEW);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
Glu.LookAt(
0.0, 0.0, 16.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
GL.Clear(Enums.ClearBufferMask.COLOR_BUFFER_BIT | Enums.ClearBufferMask.DEPTH_BUFFER_BIT);
GL.CallLists(num_lists, Enums.ListNameType.INT, lists);
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.CallLists(num_lists, ListNameType.Int, lists);
SwapBuffers();
}

View file

@ -14,71 +14,31 @@ using OpenTK;
using OpenTK.OpenGL;
using OpenTK.Platform;
using System.Threading;
using OpenTK.OpenGL.Enums;
#endregion
namespace Examples.Tutorial
{
public class T08_VBO : OpenTK.GameWindow /*, IExample */
public class T08_VBO : GameWindow, IExample
{
#region --- Private Fields ---
int vbo, ibo, nbo; // vertex, index and normal buffer objects.
Shapes.Shape shape = new Examples.Shapes.Cube();
//new Examples.Shapes.Plane(16, 16, 2.0f, 2.0f);
int handle_vertex_buffer, ibo, nbo; // vertex, index and normal buffer objects.
float angle;
// Cube vertices
float[] vdata =
{
-1.0f, -1.0f, 1.0f ,
1.0f, -1.0f, 1.0f ,
1.0f, 1.0f, 1.0f ,
-1.0f, 1.0f, 1.0f ,
-1.0f, -1.0f, -1.0f ,
1.0f, -1.0f, -1.0f ,
1.0f, 1.0f, -1.0f ,
-1.0f, 1.0f, -1.0f ,
};
// Cube normals
float[,] ndata =
{
{ 1.0f, 0.0f, 0.0f },
{ 0.0f, 1.0f, 0.0f },
{ 0.0f, 0.0f, 1.0f },
{ -1.0f, 0.0f, 0.0f },
{ 0.0f, -1.0f, 0.0f },
{ 0.0f, 0.0f, -1.0f },
};
// Indices
ushort[] idata =
{
// front face
0, 1, 2, 3,
// top face
3, 4, 6, 7,
// back face
7, 6, 5, 4,
// left face
4, 0, 3, 7,
// bottom face
0, 1, 5, 4,
// right face
1, 5, 6, 2,
};
#endregion
#region --- Constructor ---
public T08_VBO()
{
this.CreateWindow(new DisplayMode(800, 600));
}
public T08_VBO() : base(new DisplayMode(800, 600), "OpenTK Tutorial 08: Vertex Buffer Objects") { }
#endregion
#region OnLoad
#region OnLoad override
public override void OnLoad(EventArgs e)
{
@ -92,35 +52,56 @@ namespace Examples.Tutorial
}
GL.ClearColor(0.1f, 0.1f, 0.5f, 0.0f);
GL.Enable(GL.Enums.EnableCap.DEPTH_TEST);
GL.EnableClientState(GL.Enums.EnableCap.VERTEX_ARRAY);
GL.EnableClientState(GL.Enums.EnableCap.INDEX_ARRAY);
GL.Enable(EnableCap.DepthTest);
GL.EnableClientState(EnableCap.VertexArray);
//GL.EnableClientState(GL.Enums.EnableCap.INDEX_ARRAY);
LoadCube();
// Create the Vertex Buffer Object:
// 1) Generate the buffer handles.
// 2) Bind the Vertex Buffer and upload your vertex data. Check that the data was uploaded correctly.
// 3) Bind the Index Buffer and upload your index data. Check that the data was uploaded correctly.
this.OnResize(new ResizeEventArgs(this.Width, this.Height));
int size; // To check whether the buffers were uploaded correctly.
// Generate handles.
GL.GenBuffers(1, out handle_vertex_buffer);
//GL.GenBuffers(1, out ibo);
// Upload the vertex data.
GL.BindBuffer(Version15.ArrayBuffer, handle_vertex_buffer);
GL.BufferData(Version15.ArrayBuffer, (IntPtr)shape.Vertices.Length, shape.Vertices, Version15.StaticDraw);
GL.VertexPointer(3, VertexPointerType.Float, 0, IntPtr.Zero);
GL.GetBufferParameter(Version15.ArrayBuffer, Version15.BufferSize, out size);
if (shape.Vertices.Length != size)
throw new ApplicationException("Vertex array not uploaded correctly");
/*
// Upload the index data.
GL.BindBuffer(GL.Enums.VERSION_1_5.ELEMENT_ARRAY_BUFFER, ibo);
GL.BufferData(GL.Enums.VERSION_1_5.ELEMENT_ARRAY_BUFFER, (IntPtr)shape.Indices.Length, shape.Indices, GL.Enums.VERSION_1_5.STATIC_DRAW);
GL.GetBufferParameter(GL.Enums.VERSION_1_5.ELEMENT_ARRAY_BUFFER, GL.Enums.VERSION_1_5.BUFFER_SIZE, out size);
if (shape.Indices.Length != size)
throw new ApplicationException("Index array not uploaded correctly");
*/
}
#endregion
#region OnResize
#region OnResize override
protected override void OnResize(OpenTK.Platform.ResizeEventArgs e)
protected override void OnResize(ResizeEventArgs e)
{
base.OnResize(e);
GL.Viewport(0, 0, Width, Height);
double ratio = e.Width / (double)e.Height;
GL.MatrixMode(GL.Enums.MatrixMode.PROJECTION);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
Glu.Perspective(45.0, ratio, 1.0, 64.0);
}
#endregion
#region OnUpdateFrame
#region OnUpdateFrame override
/// <summary>
/// Prepares the next frame for rendering.
@ -132,21 +113,7 @@ namespace Examples.Tutorial
public override void OnUpdateFrame(UpdateFrameEventArgs e)
{
if (Keyboard[OpenTK.Input.Key.Escape])
{
this.Exit();
return;
}
GL.MatrixMode(GL.Enums.MatrixMode.MODELVIEW);
GL.LoadIdentity();
Glu.LookAt(
0.0, 5.0, 5.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0
);
//GL.Rotatef(angle, 0.0f, 1.0f, 0.0f);
//angle += 0.5f;
}
#endregion
@ -157,74 +124,21 @@ namespace Examples.Tutorial
{
base.OnRenderFrame(e);
GL.Clear(
GL.Enums.ClearBufferMask.COLOR_BUFFER_BIT |
GL.Enums.ClearBufferMask.DEPTH_BUFFER_BIT);
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.BindBuffer(GL.Enums.VERSION_1_5.ARRAY_BUFFER, vbo);
GL.VertexPointer(3, GL.Enums.VertexPointerType.FLOAT, 0, 0);
GL.BindBuffer(GL.Enums.VERSION_1_5.ELEMENT_ARRAY_BUFFER, ibo);
GL.IndexPointer(GL.Enums.IndexPointerType.FLOAT, 0, 0);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
Glu.LookAt(
0.0, 5.0, 5.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0
);
GL.Color3(1.0f, 1.0f, 1.0f);
GL.DrawElements(
GL.Enums.BeginMode.QUADS,
idata.Length,
GL.Enums.All.UNSIGNED_SHORT,
idata);
GL.BindBuffer(GL.Enums.VERSION_1_5.ARRAY_BUFFER, 0);
GL.BindBuffer(GL.Enums.VERSION_1_5.ELEMENT_ARRAY_BUFFER, 0);
GL.DrawElements(BeginMode.Triangles, shape.Indices.Length,
All.UnsignedInt, shape.Indices);
Context.SwapBuffers();
Thread.Sleep(0);
}
#endregion
#region LoadCube
private void LoadCube()
{
int size; // To check whether the buffers were uploaded correctly.
//GL.
// First, generate the buffer objects
GL.GenBuffers(1, out vbo);
GL.GenBuffers(1, out ibo);
// Upload the vertex data
GL.BindBuffer(GL.Enums.VERSION_1_5.ARRAY_BUFFER, vbo);
GL.BufferData(
GL.Enums.VERSION_1_5.ARRAY_BUFFER,
(IntPtr)(vdata.Length * 4),
vdata,
GL.Enums.VERSION_1_5.STATIC_DRAW);
GL.GetBufferParameter(
GL.Enums.VERSION_1_5.ARRAY_BUFFER,
GL.Enums.VERSION_1_5.BUFFER_SIZE,
out size);
if (vdata.Length * 4 != size)
{
throw new ApplicationException("Vertex array not uploaded correctly");
}
// Upload the index data
GL.BindBuffer(GL.Enums.VERSION_1_5.ELEMENT_ARRAY_BUFFER, ibo);
GL.BufferData(
GL.Enums.VERSION_1_5.ELEMENT_ARRAY_BUFFER,
(IntPtr)(idata.Length * 2),
idata,
GL.Enums.VERSION_1_5.STATIC_DRAW
);
GL.GetBufferParameter(
GL.Enums.VERSION_1_5.ELEMENT_ARRAY_BUFFER,
GL.Enums.VERSION_1_5.BUFFER_SIZE,
out size);
if (idata.Length * 2 != size)
{
throw new ApplicationException("Index array not uploaded correctly");
}
}
#endregion

View file

@ -16,6 +16,9 @@ using System.Threading;
using OpenTK.OpenGL;
using OpenTK;
using System.Diagnostics;
using System.IO;
using OpenTK.OpenGL.Enums;
#endregion --- Using Directives ---
@ -28,31 +31,12 @@ namespace Examples.Tutorial
{
#region --- Fields ---
#region Shaders
string[] vertex_shader_source =
{@"
void main()
{
gl_FrontColor = gl_Color;
gl_Position = ftransform();
}
"};
string[] fragment_shader_source =
{@"
void main()
{
gl_FragColor = gl_Color;
}
"};
#endregion
static float angle;
static float angle = 0.0f, rotation_speed = 3.0f;
int vertex_shader_object, fragment_shader_object, shader_program;
int vertex_buffer_object, color_buffer_object, element_buffer_object;
Shapes.Cube shape = new Examples.Shapes.Cube();
Shapes.Shape shape = //new Examples.Shapes.Plane(8, 8, 4.0f, 4.0f);
new Examples.Shapes.Cube();
#endregion
@ -74,8 +58,6 @@ void main()
/// <param name="e">Not used.</param>
public override void OnLoad(EventArgs e)
{
base.OnLoad(e);
// Check for necessary capabilities:
if (!GL.SupportsExtension("VERSION_2_0"))
{
@ -86,43 +68,58 @@ void main()
}
GL.ClearColor(Color.MidnightBlue);
GL.Enable(GL.Enums.EnableCap.DEPTH_TEST);
GL.Enable(EnableCap.DepthTest);
GL.EnableClientState(GL.Enums.EnableCap.VERTEX_ARRAY);
GL.EnableClientState(GL.Enums.EnableCap.COLOR_ARRAY);
GL.VertexPointer(3, GL.Enums.VertexPointerType.FLOAT, 0, shape.Vertices);
GL.ColorPointer(4, GL.Enums.ColorPointerType.UNSIGNED_BYTE, 0, shape.Colors);
CreateVBO();
int status;
//CreateShader();
vertex_shader_object = GL.CreateShader(GL.Enums.VERSION_2_0.VERTEX_SHADER);
fragment_shader_object = GL.CreateShader(GL.Enums.VERSION_2_0.FRAGMENT_SHADER);
int status_code, status_text_length;
StringBuilder info = new StringBuilder();
unsafe { GL.ShaderSource(vertex_shader_object, vertex_shader_source.Length, vertex_shader_source, (int*)null); }
vertex_shader_object = GL.CreateShader(Version20.VertexShader);
fragment_shader_object = GL.CreateShader(Version20.FragmentShader);
using (StreamReader sr = new StreamReader("Data/Shaders/Simple_VS.glsl"))
{
string[] code = new string[] { sr.ReadToEnd() };
#if MONO
unsafe { GL.ShaderSource(vertex_shader_object, vertex_shader_source.Length, vertex_shader_source, (int*)null); }
#else
GL.ShaderSource(vertex_shader_object, code.Length, code, (int[])null);
#endif
}
GL.CompileShader(vertex_shader_object);
GL.GetShader(vertex_shader_object, GL.Enums.VERSION_2_0.COMPILE_STATUS, out status);
if (status != (int)GL.Enums.Boolean.TRUE)
{
int length = 0;
GL.GetShader(vertex_shader_object, GL.Enums.VERSION_2_0.INFO_LOG_LENGTH, out length);
StringBuilder info = new StringBuilder(length);
GL.GetShaderInfoLog(vertex_shader_object, info.Capacity, out length, info);
GL.GetShader(vertex_shader_object, Version20.CompileStatus, out status_code);
GL.GetShader(vertex_shader_object, Version20.InfoLogLength, out status_text_length);
info.Remove(0, info.Length);
info.EnsureCapacity(status_text_length);
GL.GetShaderInfoLog(vertex_shader_object, info.Capacity, out status_text_length, info);
Trace.WriteLine(info.ToString());
if (status_code != 1)
throw new Exception(info.ToString());
}
unsafe { GL.ShaderSource(fragment_shader_object, fragment_shader_source.Length, fragment_shader_source, (int*)null); }
using (StreamReader sr = new StreamReader("Data/Shaders/Simple_FS.glsl"))
{
string[] code = new string[] { sr.ReadToEnd() };
#if MONO
unsafe { GL.ShaderSource(fragment_shader_object, fragment_shader_source.Length, fragment_shader_source, (int*)null); }
#else
GL.ShaderSource(fragment_shader_object, code.Length, code, (int[])null);
#endif
}
GL.CompileShader(fragment_shader_object);
GL.GetShader(fragment_shader_object, GL.Enums.VERSION_2_0.COMPILE_STATUS, out status);
if (status != (int)GL.Enums.Boolean.TRUE)
{
int length;
GL.GetShader(vertex_shader_object, GL.Enums.VERSION_2_0.INFO_LOG_LENGTH, out length);
StringBuilder info = new StringBuilder(length);
GL.GetShaderInfoLog(fragment_shader_object, info.Capacity, out length, info);
GL.GetShader(fragment_shader_object, Version20.CompileStatus, out status_code);
GL.GetShader(vertex_shader_object, Version20.InfoLogLength, out status_text_length);
info.Remove(0, info.Length);
info.EnsureCapacity(status_text_length);
GL.GetShaderInfoLog(fragment_shader_object, info.Capacity, out status_text_length, info);
Trace.WriteLine(info.ToString());
if (status_code != 1)
throw new Exception(info.ToString());
}
shader_program = GL.CreateProgram();
GL.AttachShader(shader_program, fragment_shader_object);
@ -130,8 +127,37 @@ void main()
GL.LinkProgram(shader_program);
GL.UseProgram(shader_program);
}
private void CreateVBO()
{
int size;
GL.GenBuffers(1, out vertex_buffer_object);
GL.GenBuffers(1, out color_buffer_object);
GL.GenBuffers(1, out element_buffer_object);
// Upload the vertex data.
GL.BindBuffer(Version15.ArrayBuffer, vertex_buffer_object);
GL.BufferData(Version15.ArrayBuffer, (IntPtr)(shape.Vertices.Length * 3 * sizeof(float)), shape.Vertices, Version15.StaticDraw);
GL.GetBufferParameter(Version15.ArrayBuffer, Version15.BufferSize, out size);
if (size != shape.Vertices.Length * 3 * sizeof(Single))
throw new ApplicationException("Problem uploading vertex data to VBO");
// Upload the color data.
GL.BindBuffer(Version15.ArrayBuffer, color_buffer_object);
GL.BufferData(Version15.ArrayBuffer, (IntPtr)(shape.Colors.Length * sizeof(int)), shape.Colors, Version15.StaticDraw);
GL.GetBufferParameter(Version15.ArrayBuffer, Version15.BufferSize, out size);
if (shape.Colors.Length * sizeof(int) != size)
throw new ApplicationException("Problem uploading color data to VBO");
// Upload the index data (elements inside the vertex data, not color indices as per the IndexPointer function!)
GL.BindBuffer(Version15.ElementArrayBuffer, element_buffer_object);
GL.BufferData(Version15.ElementArrayBuffer, (IntPtr)(shape.Indices.Length * sizeof(Int32)), shape.Indices, Version15.StaticDraw);
GL.GetBufferParameter(Version15.ElementArrayBuffer, Version15.BufferSize, out size);
if (shape.Indices.Length * 4 != size)
throw new ApplicationException("Problem uploading index data to VBO");
//OnResize(new OpenTK.Platform.ResizeEventArgs(this.Width, this.Height));
}
#endregion
@ -146,6 +172,10 @@ void main()
GL.DeleteShader(fragment_shader_object);
if (vertex_shader_object != 0)
GL.DeleteShader(vertex_shader_object);
if (vertex_buffer_object != 0)
GL.DeleteBuffers(1, ref vertex_buffer_object);
if (element_buffer_object != 0)
GL.DeleteBuffers(1, ref element_buffer_object);
}
#endregion
@ -161,13 +191,11 @@ void main()
/// </remarks>
protected override void OnResize(OpenTK.Platform.ResizeEventArgs e)
{
base.OnResize(e);
GL.Viewport(0, 0, Width, Height);
double ratio = e.Width / (double)e.Height;
GL.MatrixMode(GL.Enums.MatrixMode.PROJECTION);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
Glu.Perspective(45.0, ratio, 1.0, 64.0);
}
@ -186,21 +214,11 @@ void main()
public override void OnUpdateFrame(UpdateFrameEventArgs e)
{
if (Keyboard[OpenTK.Input.Key.Escape])
{
this.Exit();
return;
}
if ((Keyboard[OpenTK.Input.Key.AltLeft] || Keyboard[OpenTK.Input.Key.AltRight]) &&
Keyboard[OpenTK.Input.Key.Enter])
{
Fullscreen = !Fullscreen;
}
//angle += 180.0f * (float)e.Time;
angle += 3.0f;
if (angle > 720.0f)
angle -= 720.0f;
}
#endregion
@ -212,19 +230,39 @@ void main()
/// </summary>
public override void OnRenderFrame(RenderFrameEventArgs e)
{
GL.Clear(GL.Enums.ClearBufferMask.COLOR_BUFFER_BIT | GL.Enums.ClearBufferMask.DEPTH_BUFFER_BIT);
GL.Clear(ClearBufferMask.ColorBufferBit |
ClearBufferMask.DepthBufferBit);
GL.MatrixMode(GL.Enums.MatrixMode.MODELVIEW);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
Glu.LookAt(
0.0, 5.0, 5.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0
);
Glu.LookAt(0.0, 5.0, 5.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
angle += rotation_speed * (float)e.ScaleFactor;
GL.Rotate(angle, 0.0f, 1.0f, 0.0f);
GL.DrawElements(GL.Enums.BeginMode.TRIANGLES, shape.Indices.Length,
GL.Enums.All.UNSIGNED_SHORT, shape.Indices);
GL.EnableClientState(EnableCap.VertexArray);
GL.EnableClientState(EnableCap.ColorArray);
GL.BindBuffer(Version15.ArrayBuffer, vertex_buffer_object);
GL.VertexPointer(3, VertexPointerType.Float, 0, IntPtr.Zero);
GL.BindBuffer(Version15.ArrayBuffer, color_buffer_object);
GL.ColorPointer(4, ColorPointerType.UnsignedByte, 0, IntPtr.Zero);
GL.BindBuffer(Version15.ElementArrayBuffer, element_buffer_object);
GL.DrawElements(BeginMode.Triangles, shape.Indices.Length,
All.UnsignedInt, IntPtr.Zero);
//GL.DrawArrays(GL.Enums.BeginMode.POINTS, 0, shape.Vertices.Length);
GL.DisableClientState(EnableCap.VertexArray);
GL.DisableClientState(EnableCap.ColorArray);
//int error = GL.GetError();
//if (error != 0)
// Debug.Print(Glu.ErrorString(Glu.Enums.ErrorCode.INVALID_OPERATION));
Context.SwapBuffers();
}
@ -243,8 +281,7 @@ void main()
/// </remarks>
public void Launch()
{
// Lock UpdateFrame and RenderFrame at 60Hz.
Run(60.0, 60.0);
Run(30.0, 0.0);
}
#endregion

View file

@ -16,6 +16,7 @@ using System.Windows.Forms;
using OpenTK;
using OpenTK.OpenGL;
using OpenTK.OpenGL.Enums;
#endregion
@ -64,7 +65,7 @@ namespace Examples.WinForms
private void glControl1_Paint(object sender, PaintEventArgs e)
{
GL.Clear(GL.Enums.ClearBufferMask.COLOR_BUFFER_BIT);
GL.Clear(ClearBufferMask.ColorBufferBit);
glControl1.SwapBuffers();
}

View file

@ -19,6 +19,7 @@ using OpenTK.OpenGL;
//using Enums = OpenTK.OpenGL.GL.Enums;
using OpenTK.Platform;
using System.Threading;
using OpenTK.OpenGL.Enums;
#endregion
@ -48,12 +49,12 @@ namespace Examples.WinForms
glControl.Paint += new PaintEventHandler(glControl_Paint);
Text =
GL.GetString(GL.Enums.StringName.VENDOR) + " " +
GL.GetString(GL.Enums.StringName.RENDERER) + " " +
GL.GetString(GL.Enums.StringName.VERSION);
GL.GetString(StringName.Vendor) + " " +
GL.GetString(StringName.Renderer) + " " +
GL.GetString(StringName.Version);
GL.ClearColor(Color.MidnightBlue);
GL.Enable(GL.Enums.EnableCap.DEPTH_TEST);
GL.Enable(EnableCap.DepthTest);
Application.Idle += Application_Idle;
@ -89,7 +90,7 @@ namespace Examples.WinForms
private void Render()
{
GL.MatrixMode(GL.Enums.MatrixMode.MODELVIEW);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
Glu.LookAt(
0.0, 5.0, 5.0,
@ -99,7 +100,7 @@ namespace Examples.WinForms
GL.Rotate(angle, 0.0f, 1.0f, 0.0f);
angle += 0.5f;
GL.Clear(GL.Enums.ClearBufferMask.COLOR_BUFFER_BIT | GL.Enums.ClearBufferMask.DEPTH_BUFFER_BIT);
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
DrawCube();
@ -122,7 +123,7 @@ namespace Examples.WinForms
double ratio = 0.0;
ratio = c.ClientSize.Width / (double)c.ClientSize.Height;
GL.MatrixMode(GL.Enums.MatrixMode.PROJECTION);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
Glu.Perspective(45.0, ratio, 1.0, 64.0);
}
@ -156,7 +157,7 @@ namespace Examples.WinForms
private void DrawCube()
{
GL.Begin(GL.Enums.BeginMode.QUADS);
GL.Begin(BeginMode.Quads);
GL.Color3(Color.Silver);
GL.Vertex3(-1.0f, -1.0f, -1.0f);

View file

@ -16,6 +16,7 @@ using OpenTK;
using System.Reflection;
using OpenTK.OpenGL;
using System.Threading;
using OpenTK.OpenGL.Enums;
namespace Examples.WinForms
{
@ -47,9 +48,9 @@ namespace Examples.WinForms
Application.Idle += StartAsync;
driver =
GL.GetString(GL.Enums.StringName.VENDOR) + " " +
GL.GetString(GL.Enums.StringName.RENDERER) + " " +
GL.GetString(GL.Enums.StringName.VERSION);
GL.GetString(StringName.Vendor) + " " +
GL.GetString(StringName.Renderer) + " " +
GL.GetString(StringName.Version);
all = delegatesClass.GetFields(BindingFlags.Static | BindingFlags.NonPublic).Length;
this.Text = String.Format("Loading {0} functions...", all);