From 8a3ad855b0ee6ff2d46c0871cb5f3ddb1bbebde4 Mon Sep 17 00:00:00 2001 From: the_fiddler Date: Wed, 26 Sep 2007 11:47:30 +0000 Subject: [PATCH] Updated all examples. Added documentation and generally cleaned them up. --- Source/Examples/Tests/S02_RawInput_Logger.cs | 17 +-- Source/Examples/Tests/S04_Input_Logger.cs | 124 +++++++----------- Source/Examples/Tutorial/T01_Simple_Window.cs | 68 +++++++--- .../Tutorial/T02_Vertex_Array_Cube.cs | 6 +- .../Tutorial/T03_Immediate_Mode_Cube.cs | 6 +- Source/Examples/Tutorial/T04_Lit_Cube.cs | 38 +++--- .../Tutorial/T07_Display_Lists_Flower.cs | 2 +- Source/Examples/Tutorial/T08_VBO.cs | 2 +- Source/Examples/Tutorial/T10_GLSL_Cube.cs | 13 +- 9 files changed, 138 insertions(+), 138 deletions(-) diff --git a/Source/Examples/Tests/S02_RawInput_Logger.cs b/Source/Examples/Tests/S02_RawInput_Logger.cs index 9f8b5568..322a00fd 100644 --- a/Source/Examples/Tests/S02_RawInput_Logger.cs +++ b/Source/Examples/Tests/S02_RawInput_Logger.cs @@ -8,14 +8,14 @@ using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; - -using OpenTK; -using OpenTK.OpenGL; using System.Threading; using System.Runtime.Serialization; using System.IO; using System.Diagnostics; +using OpenTK; +using OpenTK.OpenGL; + namespace Examples.Tests { public class S02_RawInput_Logger : GameWindow//, IExample @@ -61,23 +61,20 @@ namespace Examples.Tests { this.CreateWindow(new DisplayMode(100, 100)); - foreach (OpenTK.Input.Keyboard k in this.Keyboard) - { - k.KeyDown += new OpenTK.Input.KeyDownEvent(LogKeyDown); - k.KeyUp += new OpenTK.Input.KeyUpEvent(LogKeyUp); - } + Keyboard.KeyDown += new OpenTK.Input.KeyDownEvent(LogKeyDown); + Keyboard.KeyUp += new OpenTK.Input.KeyUpEvent(LogKeyUp); } void LogKeyDown(object sender, OpenTK.Input.Key key) { Trace.WriteLine(String.Format("OpenTK key {0} pressed on Keyboard: ({1}).", - key, sender as OpenTK.Input.Keyboard)); + key, sender as OpenTK.Input.KeyboardDevice)); } void LogKeyUp(object sender, OpenTK.Input.Key key) { Trace.WriteLine(String.Format("OpenTK key {0} released on Keyboard: ({1}).", - key, sender as OpenTK.Input.Keyboard)); + key, sender as OpenTK.Input.KeyboardDevice)); } public override void OnLoad(EventArgs e) diff --git a/Source/Examples/Tests/S04_Input_Logger.cs b/Source/Examples/Tests/S04_Input_Logger.cs index 5931c348..586c65d3 100644 --- a/Source/Examples/Tests/S04_Input_Logger.cs +++ b/Source/Examples/Tests/S04_Input_Logger.cs @@ -22,119 +22,95 @@ namespace Examples.Tests { public partial class S04_Input_Logger : Form//, IExample { - InputDriver driver; + Thread thread; + GameWindow hidden; + bool start; Dictionary keyboardListBoxes = new Dictionary(4); public S04_Input_Logger() { InitializeComponent(); + + thread = new Thread(LaunchGameWindow); + thread.Start(); + } + + void LaunchGameWindow() + { + hidden = new GameWindow(); + hidden.Load += hidden_Load; + hidden.CreateWindow(new DisplayMode(30, 30), "OpenTK | Hidden input window"); + hidden.Run(60.0, 1.0); + } + + void hidden_Load(object sender, EventArgs e) + { + start = true; } protected override void OnLoad(EventArgs e) { base.OnLoad(e); - WindowInfo info = new WindowInfo(this); - driver = new InputDriver(info); - Trace.WriteLine(String.Format("Keyboard count: {0}", driver.Keyboard.Count)); - Trace.WriteLine(String.Format("Mouse count: {0}", driver.Mouse.Count)); - - switch (driver.Keyboard.Count) + while (!start) { - case 0: - Debug.Print("No keyboard present, or keyboard driver failed to load"); - break; - - case 1: - keyboardListBoxes.Add(driver.Keyboard[0].DeviceID, listBox1); - break; - - case 2: - keyboardListBoxes.Add(driver.Keyboard[0].DeviceID, listBox1); - keyboardListBoxes.Add(driver.Keyboard[1].DeviceID, listBox2); - break; - - case 3: - keyboardListBoxes.Add(driver.Keyboard[0].DeviceID, listBox1); - keyboardListBoxes.Add(driver.Keyboard[1].DeviceID, listBox2); - keyboardListBoxes.Add(driver.Keyboard[2].DeviceID, listBox3); - break; - - case 4: - keyboardListBoxes.Add(driver.Keyboard[0].DeviceID, listBox1); - keyboardListBoxes.Add(driver.Keyboard[1].DeviceID, listBox2); - keyboardListBoxes.Add(driver.Keyboard[2].DeviceID, listBox3); - keyboardListBoxes.Add(driver.Keyboard[3].DeviceID, listBox4); - break; - - default: - Debug.Print("Only the first 4 keyboards will be shown in the keyboard logger."); - keyboardListBoxes.Add(driver.Keyboard[0].DeviceID, listBox1); - keyboardListBoxes.Add(driver.Keyboard[1].DeviceID, listBox2); - keyboardListBoxes.Add(driver.Keyboard[2].DeviceID, listBox3); - keyboardListBoxes.Add(driver.Keyboard[3].DeviceID, listBox4); - break; + Thread.Sleep(100); } + WindowInfo info = new WindowInfo(this); + + keyboardListBoxes.Add(hidden.Keyboard.DeviceID, listBox1); + // Add available mice to the mouse input logger. - if (driver.Mouse.Count > 0) - { - int i = 0; - foreach (Mouse m in driver.Mouse) - { - ChooseMouse.Items.Add(String.Format("Mouse {0} ({1})", ++i, m.Description)); - m.ButtonDown += LogMouseButtonDown; - m.ButtonUp += LogMouseButtonUp; - } - ChooseMouse.SelectedIndex = 0; - } + ChooseMouse.Items.Add(String.Format("Mouse {0} ({1})", 0, hidden.Mouse.Description)); + hidden.Mouse.ButtonDown += LogMouseButtonDown; + hidden.Mouse.ButtonUp += LogMouseButtonUp; - foreach (OpenTK.Input.Keyboard k in driver.Keyboard) - { - k.KeyDown += new KeyDownEvent(LogKeyDown); - k.KeyUp += new KeyUpEvent(LogKeyUp); - } + hidden.Keyboard.KeyDown += LogKeyDown; + hidden.Keyboard.KeyUp += LogKeyUp; + + //Application.Idle += new EventHandler(UpdateDevices); + hidden.UpdateFrame += hidden_UpdateFrame; - Application.Idle += new EventHandler(UpdateDevices); } - void UpdateDevices(object sender, EventArgs e) + void hidden_UpdateFrame(object sender, UpdateFrameEventArgs e) { - driver.Poll(); + //hidden.Poll(); // Update mouse coordinates. - MouseXText.Text = driver.Mouse[ChooseMouse.SelectedIndex].X.ToString(); - MouseYText.Text = driver.Mouse[ChooseMouse.SelectedIndex].Y.ToString(); - MouseDXText.Text = driver.Mouse[ChooseMouse.SelectedIndex].XDelta.ToString(); - MouseDYText.Text = driver.Mouse[ChooseMouse.SelectedIndex].YDelta.ToString(); - MouseWheelText.Text = driver.Mouse[ChooseMouse.SelectedIndex].Wheel.ToString(); + MouseXText.Text = hidden.Mouse.X.ToString(); + MouseYText.Text = hidden.Mouse.Y.ToString(); + MouseDXText.Text = hidden.Mouse.XDelta.ToString(); + MouseDYText.Text = hidden.Mouse.YDelta.ToString(); + MouseWheelText.Text = hidden.Mouse.Wheel.ToString(); //MouseWheelDelta.Text = driver.Mouse[ChooseMouse.SelectedIndex].WheelDelta.ToString(); } - void LogMouseButtonDown(IMouse sender, MouseButton button) + void LogMouseButtonDown(MouseDevice sender, MouseButton button) { //Trace.WriteLine(String.Format("Mouse button down: {0} on device: {1}", button, sender.DeviceID)); - if (sender.DeviceID == driver.Mouse[ChooseMouse.SelectedIndex].DeviceID) + if (sender.DeviceID == hidden.Mouse.DeviceID) MouseButtons.Items.Add(button); } - void LogMouseButtonUp(IMouse sender, MouseButton button) + void LogMouseButtonUp(MouseDevice sender, MouseButton button) { //Trace.WriteLine(String.Format("Mouse button up: {0} on device: {1}", button, sender.DeviceID)); - if (sender.DeviceID == driver.Mouse[ChooseMouse.SelectedIndex].DeviceID) + if (sender.DeviceID == hidden.Mouse.DeviceID) MouseButtons.Items.Remove(button); } - void LogKeyDown(object sender, Key key) + void LogKeyDown(KeyboardDevice sender, Key key) { - Trace.WriteLine(String.Format("Key down: {0} on device: {1}", key, (sender as Keyboard).DeviceID)); - keyboardListBoxes[(sender as Keyboard).DeviceID].Items.Add(key); + Trace.WriteLine(String.Format("Key down: {0} on device: {1}", key, (sender as KeyboardDevice).DeviceID)); + keyboardListBoxes[(sender as KeyboardDevice).DeviceID].Items.Add(key); } - void LogKeyUp(object sender, Key key) + void LogKeyUp(KeyboardDevice sender, Key key) { - Trace.WriteLine(String.Format("Key up: {0} on device: {1}", key, (sender as Keyboard).DeviceID)); - keyboardListBoxes[(sender as Keyboard).DeviceID].Items.Remove(key); + Trace.WriteLine(String.Format("Key up: {0} on device: {1}", key, (sender as KeyboardDevice).DeviceID)); + keyboardListBoxes[(sender as KeyboardDevice).DeviceID].Items.Remove(key); } #region IExample Members diff --git a/Source/Examples/Tutorial/T01_Simple_Window.cs b/Source/Examples/Tutorial/T01_Simple_Window.cs index 05d32902..aa83257d 100644 --- a/Source/Examples/Tutorial/T01_Simple_Window.cs +++ b/Source/Examples/Tutorial/T01_Simple_Window.cs @@ -15,21 +15,39 @@ using OpenTK.OpenGL; namespace Examples.Tutorial { + /// + /// Demonstrates the GameWindow class. + /// public class T01_Simple_Window : GameWindow, IExample { public T01_Simple_Window() { - this.CreateWindow(new DisplayMode(800, 600)); + this.CreateWindow(new DisplayMode(800, 600), "OpenTK | Tutorial 1: Simple Window"); } + #region OnLoad + + /// + /// Load resources here. + /// + /// Not used. + public override void OnLoad(EventArgs e) + { + Trace.WriteLine(String.Format("OpenGL driver information: {0}, {1}, {2}", + GL.GetString(GL.Enums.StringName.RENDERER), + GL.GetString(GL.Enums.StringName.VENDOR), + GL.GetString(GL.Enums.StringName.VERSION))); + } + + #endregion + #region OnResize /// - /// Override the OnResize method to respond to window resize events. - /// Do not forget to call base.OnResize() so that event listeners - /// will be notified of window resize events! + /// Respond to resize events here. /// - /// + /// Contains information on the new GameWindow size. + /// There is no need to call the base implementation. protected override void OnResize(OpenTK.Platform.ResizeEventArgs e) { GL.Viewport(0, 0, e.Width, e.Height); @@ -43,14 +61,30 @@ namespace Examples.Tutorial #endregion + #region OnUpdateFrame + + /// + /// Add your game logic here. + /// + /// Contains timing information. + /// There is no need to call the base implementation. + public override void OnUpdateFrame(UpdateFrameEventArgs e) + { + base.OnUpdateFrame(e); + + if (Keyboard[OpenTK.Input.Key.Escape]) + this.Exit(); + } + + #endregion + #region OnRenderFrame /// - /// Override the OnRenderFrame method to add your drawing code. - /// Do not forget to call base.OnRenderFrame() so that event listeners - /// will be notified of frame rendering events! + /// Add your game rendering code here. /// - /// Not used. + /// Contains timing information. + /// There is no need to call the base implementation. public override void OnRenderFrame(RenderFrameEventArgs e) { GL.Clear(GL.Enums.ClearBufferMask.COLOR_BUFFER_BIT); @@ -66,23 +100,17 @@ namespace Examples.Tutorial GL.End(); - Context.SwapBuffers(); - - base.OnRenderFrame(e); + this.SwapBuffers(); } #endregion - public override void OnUpdateFrame(UpdateFrameEventArgs e) - { - base.OnUpdateFrame(e); - - if (Keyboard[0][OpenTK.Input.Key.Escape]) - this.Exit(); - } - #region IExample Members + /// + /// Only used by the ExampleLauncher application, no need to add a Launch() method in your code. + /// Add a call to Run() in your Main() function instead. + /// public void Launch() { this.Run(30.0, 5.0); diff --git a/Source/Examples/Tutorial/T02_Vertex_Array_Cube.cs b/Source/Examples/Tutorial/T02_Vertex_Array_Cube.cs index 368c0bf5..17c5ed05 100644 --- a/Source/Examples/Tutorial/T02_Vertex_Array_Cube.cs +++ b/Source/Examples/Tutorial/T02_Vertex_Array_Cube.cs @@ -80,14 +80,14 @@ namespace Examples.Tutorial /// public override void OnUpdateFrame(UpdateFrameEventArgs e) { - if (Keyboard[0][OpenTK.Input.Key.Escape]) + if (Keyboard[OpenTK.Input.Key.Escape]) { this.Exit(); return; } - if ((Keyboard[0][OpenTK.Input.Key.AltLeft] || Keyboard[0][OpenTK.Input.Key.AltRight]) && - Keyboard[0][OpenTK.Input.Key.Enter]) + if ((Keyboard[OpenTK.Input.Key.AltLeft] || Keyboard[OpenTK.Input.Key.AltRight]) && + Keyboard[OpenTK.Input.Key.Enter]) { Fullscreen = !Fullscreen; } diff --git a/Source/Examples/Tutorial/T03_Immediate_Mode_Cube.cs b/Source/Examples/Tutorial/T03_Immediate_Mode_Cube.cs index 701af134..3b204532 100644 --- a/Source/Examples/Tutorial/T03_Immediate_Mode_Cube.cs +++ b/Source/Examples/Tutorial/T03_Immediate_Mode_Cube.cs @@ -87,14 +87,14 @@ namespace Examples.Tutorial /// public override void OnUpdateFrame(UpdateFrameEventArgs e) { - if (Keyboard[0][OpenTK.Input.Key.Escape]) + if (Keyboard[OpenTK.Input.Key.Escape]) { this.Exit(); return; } - if ((Keyboard[0][OpenTK.Input.Key.AltLeft] || Keyboard[0][OpenTK.Input.Key.AltRight]) && - Keyboard[0][OpenTK.Input.Key.Enter]) + if ((Keyboard[OpenTK.Input.Key.AltLeft] || Keyboard[OpenTK.Input.Key.AltRight]) && + Keyboard[OpenTK.Input.Key.Enter]) { Fullscreen = !Fullscreen; } diff --git a/Source/Examples/Tutorial/T04_Lit_Cube.cs b/Source/Examples/Tutorial/T04_Lit_Cube.cs index 16cc82f0..7c08ae4f 100644 --- a/Source/Examples/Tutorial/T04_Lit_Cube.cs +++ b/Source/Examples/Tutorial/T04_Lit_Cube.cs @@ -15,6 +15,9 @@ using Examples.Shapes; namespace Examples.Tutorial { + /// + /// Demonstrates fixed-function OpenGL lighting. Tutorial is incomplete! + /// class T04_Lit_Cube : GameWindow, IExample { float x_angle, zoom; @@ -24,7 +27,7 @@ namespace Examples.Tutorial public T04_Lit_Cube() { - this.CreateWindow(new DisplayMode(800, 600)); + this.CreateWindow(new DisplayMode(800, 600), "OpenTK | Vertex Lighting example"); } #endregion @@ -37,7 +40,7 @@ namespace Examples.Tutorial GL.ClearColor(Color.MidnightBlue); GL.Enable(GL.Enums.EnableCap.DEPTH_TEST); - GL.Enable(GL.Enums.EnableCap.CULL_FACE); + //GL.Enable(GL.Enums.EnableCap.CULL_FACE); GL.EnableClientState(GL.Enums.EnableCap.VERTEX_ARRAY); GL.EnableClientState(GL.Enums.EnableCap.NORMAL_ARRAY); @@ -50,8 +53,8 @@ namespace Examples.Tutorial 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.LightModelv(GL.Enums.LightModelParameter.LIGHT_MODEL_AMBIENT, new float[] { 0.2f, 0.2f, 0.2f, 1.0f }); - GL.Enable(GL.Enums.EnableCap.LIGHTING); - GL.Enable(GL.Enums.EnableCap.LIGHT0); + //GL.Enable(GL.Enums.EnableCap.LIGHTING); + //GL.Enable(GL.Enums.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 }); @@ -97,25 +100,25 @@ namespace Examples.Tutorial /// public override void OnUpdateFrame(UpdateFrameEventArgs e) { - if (Keyboard[0][OpenTK.Input.Key.Escape]) + if (Keyboard[OpenTK.Input.Key.Escape]) { this.Exit(); return; } - if ((Keyboard[0][OpenTK.Input.Key.AltLeft] || Keyboard[0][OpenTK.Input.Key.AltRight]) && - Keyboard[0][OpenTK.Input.Key.Enter]) + if ((Keyboard[OpenTK.Input.Key.AltLeft] || Keyboard[OpenTK.Input.Key.AltRight]) && + Keyboard[OpenTK.Input.Key.Enter]) { Fullscreen = !Fullscreen; } - if (Mouse[0][OpenTK.Input.MouseButton.Left]) - x_angle += Mouse[0].XDelta * 2; + if (Mouse[OpenTK.Input.MouseButton.Left]) + x_angle += Mouse.XDelta * 2; else x_angle += 0.5f; - if (Mouse[0][OpenTK.Input.MouseButton.Right]) - zoom += Mouse[0].YDelta * 0.5f; + if (Mouse[OpenTK.Input.MouseButton.Right]) + zoom += Mouse.YDelta * 0.5f; if (x_angle > 720.0f) x_angle -= 720.0f; @@ -142,17 +145,10 @@ namespace Examples.Tutorial 0.0, 1.0, 0.0); GL.Rotate(x_angle, 0.0f, 1.0f, 0.0f); - unsafe - { - fixed (int* ptr = shape.Indices) - { - GL.DrawElements(GL.Enums.BeginMode.TRIANGLES, shape.Indices.Length, - GL.Enums.All.UNSIGNED_INT, ptr); - } - } - GL.DrawArrays(GL.Enums.BeginMode.POINTS, 0, shape.Vertices.Length); + GL.DrawElements(GL.Enums.BeginMode.TRIANGLES, shape.Indices.Length, + GL.Enums.All.UNSIGNED_INT, shape.Indices); - Context.SwapBuffers(); + SwapBuffers(); } #endregion diff --git a/Source/Examples/Tutorial/T07_Display_Lists_Flower.cs b/Source/Examples/Tutorial/T07_Display_Lists_Flower.cs index 571441e9..c73a0fcc 100644 --- a/Source/Examples/Tutorial/T07_Display_Lists_Flower.cs +++ b/Source/Examples/Tutorial/T07_Display_Lists_Flower.cs @@ -112,7 +112,7 @@ namespace Examples.Tutorial { base.OnUpdateFrame(e); - if (Keyboard[0][OpenTK.Input.Key.Escape]) + if (Keyboard[OpenTK.Input.Key.Escape]) { this.Exit(); } diff --git a/Source/Examples/Tutorial/T08_VBO.cs b/Source/Examples/Tutorial/T08_VBO.cs index c8bdcf60..e13b4fc8 100644 --- a/Source/Examples/Tutorial/T08_VBO.cs +++ b/Source/Examples/Tutorial/T08_VBO.cs @@ -131,7 +131,7 @@ namespace Examples.Tutorial /// public override void OnUpdateFrame(UpdateFrameEventArgs e) { - if (Keyboard[0][OpenTK.Input.Key.Escape]) + if (Keyboard[OpenTK.Input.Key.Escape]) { this.Exit(); return; diff --git a/Source/Examples/Tutorial/T10_GLSL_Cube.cs b/Source/Examples/Tutorial/T10_GLSL_Cube.cs index 728aad71..dd76eaa4 100644 --- a/Source/Examples/Tutorial/T10_GLSL_Cube.cs +++ b/Source/Examples/Tutorial/T10_GLSL_Cube.cs @@ -21,6 +21,9 @@ using OpenTK; namespace Examples.Tutorial { + /// + /// Demonstrates how to load and use a simple OpenGL shader program. + /// public class T10_GLSL_Cube : GameWindow, IExample { #region --- Fields --- @@ -55,7 +58,7 @@ void main() public T10_GLSL_Cube() { - this.CreateWindow(new DisplayMode(800, 600)); + this.CreateWindow(new DisplayMode(800, 600), "OpenTK | GLSL Example 1"); } #endregion @@ -127,7 +130,7 @@ void main() GL.LinkProgram(shader_program); GL.UseProgram(shader_program); - OnResize(new OpenTK.Platform.ResizeEventArgs(this.Width, this.Height)); + //OnResize(new OpenTK.Platform.ResizeEventArgs(this.Width, this.Height)); } #endregion @@ -167,14 +170,14 @@ void main() /// public override void OnUpdateFrame(UpdateFrameEventArgs e) { - if (Keyboard[0][OpenTK.Input.Key.Escape]) + if (Keyboard[OpenTK.Input.Key.Escape]) { this.Exit(); return; } - if ((Keyboard[0][OpenTK.Input.Key.AltLeft] || Keyboard[0][OpenTK.Input.Key.AltRight]) && - Keyboard[0][OpenTK.Input.Key.Enter]) + if ((Keyboard[OpenTK.Input.Key.AltLeft] || Keyboard[OpenTK.Input.Key.AltRight]) && + Keyboard[OpenTK.Input.Key.Enter]) { Fullscreen = !Fullscreen; }