-
-
Save ddevault/b20667511717d49eba1c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Released to the public domain. Use, modify and relicense at will. | |
using System; | |
using OpenTK; | |
using OpenTK.Graphics; | |
using OpenTK.Graphics.OpenGL; | |
using OpenTK.Audio; | |
using OpenTK.Audio.OpenAL; | |
using OpenTK.Input; | |
namespace StarterKit | |
{ | |
class Game : GameWindow | |
{ | |
/// <summary>Creates a 800x600 window with the specified title.</summary> | |
public Game() | |
: base(800, 600, GraphicsMode.Default, "OpenTK Quick Start Sample") | |
{ | |
VSync = VSyncMode.On; | |
} | |
/// <summary>Load resources here.</summary> | |
/// <param name="e">Not used.</param> | |
protected override void OnLoad(EventArgs e) | |
{ | |
base.OnLoad(e); | |
GL.ClearColor(0.1f, 0.2f, 0.5f, 0.0f); | |
GL.Enable(EnableCap.DepthTest); | |
} | |
/// <summary> | |
/// Called when your window is resized. Set your viewport here. It is also | |
/// a good place to set up your projection matrix (which probably changes | |
/// along when the aspect ratio of your window). | |
/// </summary> | |
/// <param name="e">Not used.</param> | |
protected override void OnResize(EventArgs e) | |
{ | |
base.OnResize(e); | |
GL.Viewport(ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width, ClientRectangle.Height); | |
GL.ClearColor(Color4.Black); | |
Matrix4 projection = Matrix4.CreatePerspectiveFieldOfView((float)Math.PI / 4, Width / (float)Height, 1.0f, 64.0f); | |
GL.MatrixMode(MatrixMode.Projection); | |
GL.LoadMatrix(ref projection); | |
} | |
/// <summary> | |
/// Called when it is time to setup the next frame. Add you game logic here. | |
/// </summary> | |
/// <param name="e">Contains timing information for framerate independent logic.</param> | |
protected override void OnUpdateFrame(FrameEventArgs e) | |
{ | |
base.OnUpdateFrame(e); | |
if (Keyboard[Key.Escape]) | |
Exit(); | |
} | |
/// <summary> | |
/// Called when it is time to render the next frame. Add your rendering code here. | |
/// </summary> | |
/// <param name="e">Contains timing information.</param> | |
protected override void OnRenderFrame(FrameEventArgs e) | |
{ | |
base.OnRenderFrame(e); | |
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); | |
Matrix4 modelview = Matrix4.LookAt(Vector3.Zero, Vector3.UnitZ, Vector3.UnitY); | |
GL.MatrixMode(MatrixMode.Modelview); | |
GL.LoadMatrix(ref modelview); | |
GL.Translate(new Vector3(0, 0, 4.0f)); | |
GL.Rotate(MathHelper.DegreesToRadians(90), Vector3.UnitY); | |
GL.Begin(BeginMode.LineStrip); | |
GL.Color3(0.0f, 1.0f, 0.0f); GL.Vertex3(-1.0f, -1.0f, 0f); | |
GL.Color3(0.0f, 1.0f, 0.0f); GL.Vertex3(1.0f, -1.0f, 0f); | |
GL.Color3(0.0f, 1.0f, 0.0f); GL.Vertex3(0.0f, 1.0f, 0f); | |
GL.Color3(0.0f, 1.0f, 0.0f); GL.Vertex3(-1.0f, -1.0f, 0f); | |
GL.End(); | |
SwapBuffers(); | |
} | |
/// <summary> | |
/// The main entry point for the application. | |
/// </summary> | |
[STAThread] | |
static void Main() | |
{ | |
// The 'using' idiom guarantees proper resource cleanup. | |
// We request 30 UpdateFrame events per second, and unlimited | |
// RenderFrame events (as fast as the computer can handle). | |
using (Game game = new Game()) | |
{ | |
game.Run(30.0); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment