mirror of
https://github.com/Ryujinx/Opentk.git
synced 2024-12-29 17:45:39 +00:00
6bbaad8bfb
Made example source code visible for all examples in example browser. Updated Prebuild.exe to newest SVN version (resolves issues with resources). Added .rtf and .resx files to Examples project in Prebuild.xml.
231 lines
6 KiB
C#
231 lines
6 KiB
C#
#region --- License ---
|
|
/* This source file is released under the MIT license. See License.txt for more information.
|
|
* Coded by Erik Ylvisaker and Stefanos Apostolopoulos.
|
|
*/
|
|
#endregion
|
|
|
|
#region --- Using directives ---
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.Diagnostics;
|
|
using System.Threading;
|
|
|
|
using OpenTK.Graphics;
|
|
using OpenTK.Platform;
|
|
|
|
#endregion
|
|
|
|
namespace Examples.WinForms
|
|
{
|
|
[Example("Simple GLControl Game Loop", ExampleCategory.OpenTK, "GLControl", 2, Documentation="GLControlGameLoop")]
|
|
public partial class GameLoopForm : Form
|
|
{
|
|
static float angle = 0.0f;
|
|
|
|
#region --- Constructor ---
|
|
|
|
public GameLoopForm()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OnLoad
|
|
|
|
protected override void OnLoad(EventArgs e)
|
|
{
|
|
base.OnLoad(e);
|
|
|
|
glControl.KeyDown += new KeyEventHandler(glControl_KeyDown);
|
|
glControl.KeyUp += new KeyEventHandler(glControl_KeyUp);
|
|
glControl.Resize += new EventHandler(glControl_Resize);
|
|
glControl.Paint += new PaintEventHandler(glControl_Paint);
|
|
|
|
Text =
|
|
GL.GetString(StringName.Vendor) + " " +
|
|
GL.GetString(StringName.Renderer) + " " +
|
|
GL.GetString(StringName.Version);
|
|
|
|
GL.ClearColor(Color.MidnightBlue);
|
|
GL.Enable(EnableCap.DepthTest);
|
|
|
|
Application.Idle += Application_Idle;
|
|
|
|
// Ensure that the viewport and projection matrix are set correctly.
|
|
glControl_Resize(glControl, EventArgs.Empty);
|
|
}
|
|
|
|
void glControl_KeyUp(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.F12)
|
|
glControl.GrabScreenshot().Save("screenshot.png");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OnClosing
|
|
|
|
protected override void OnClosing(CancelEventArgs e)
|
|
{
|
|
Application.Idle -= Application_Idle;
|
|
|
|
base.OnClosing(e);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Application_Idle event
|
|
|
|
void Application_Idle(object sender, EventArgs e)
|
|
{
|
|
while (glControl.IsIdle)
|
|
{
|
|
Render();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region GLControl.Resize event handler
|
|
|
|
void glControl_Resize(object sender, EventArgs e)
|
|
{
|
|
OpenTK.GLControl c = sender as OpenTK.GLControl;
|
|
|
|
if (c.ClientSize.Height == 0)
|
|
c.ClientSize = new System.Drawing.Size(c.ClientSize.Width, 1);
|
|
|
|
GL.Viewport(0, 0, c.ClientSize.Width, c.ClientSize.Height);
|
|
|
|
double ratio = 0.0;
|
|
ratio = c.ClientSize.Width / (double)c.ClientSize.Height;
|
|
|
|
GL.MatrixMode(MatrixMode.Projection);
|
|
GL.LoadIdentity();
|
|
Glu.Perspective(45.0, ratio, 1.0, 64.0);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region GLControl.KeyDown event handler
|
|
|
|
void glControl_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
switch (e.KeyData)
|
|
{
|
|
case Keys.Escape:
|
|
this.Close();
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region GLControl.Paint event handler
|
|
|
|
void glControl_Paint(object sender, PaintEventArgs e)
|
|
{
|
|
Render();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region private void Render()
|
|
|
|
private void Render()
|
|
{
|
|
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.Rotate(angle, 0.0f, 1.0f, 0.0f);
|
|
angle += 0.5f;
|
|
|
|
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
|
|
|
|
DrawCube();
|
|
|
|
glControl.SwapBuffers();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region private void DrawCube()
|
|
|
|
private void DrawCube()
|
|
{
|
|
GL.Begin(BeginMode.Quads);
|
|
|
|
GL.Color3(Color.Silver);
|
|
GL.Vertex3(-1.0f, -1.0f, -1.0f);
|
|
GL.Vertex3(-1.0f, 1.0f, -1.0f);
|
|
GL.Vertex3(1.0f, 1.0f, -1.0f);
|
|
GL.Vertex3(1.0f, -1.0f, -1.0f);
|
|
|
|
GL.Color3(Color.Honeydew);
|
|
GL.Vertex3(-1.0f, -1.0f, -1.0f);
|
|
GL.Vertex3(1.0f, -1.0f, -1.0f);
|
|
GL.Vertex3(1.0f, -1.0f, 1.0f);
|
|
GL.Vertex3(-1.0f, -1.0f, 1.0f);
|
|
|
|
GL.Color3(Color.Moccasin);
|
|
|
|
GL.Vertex3(-1.0f, -1.0f, -1.0f);
|
|
GL.Vertex3(-1.0f, -1.0f, 1.0f);
|
|
GL.Vertex3(-1.0f, 1.0f, 1.0f);
|
|
GL.Vertex3(-1.0f, 1.0f, -1.0f);
|
|
|
|
GL.Color3(Color.IndianRed);
|
|
GL.Vertex3(-1.0f, -1.0f, 1.0f);
|
|
GL.Vertex3(1.0f, -1.0f, 1.0f);
|
|
GL.Vertex3(1.0f, 1.0f, 1.0f);
|
|
GL.Vertex3(-1.0f, 1.0f, 1.0f);
|
|
|
|
GL.Color3(Color.PaleVioletRed);
|
|
GL.Vertex3(-1.0f, 1.0f, -1.0f);
|
|
GL.Vertex3(-1.0f, 1.0f, 1.0f);
|
|
GL.Vertex3(1.0f, 1.0f, 1.0f);
|
|
GL.Vertex3(1.0f, 1.0f, -1.0f);
|
|
|
|
GL.Color3(Color.ForestGreen);
|
|
GL.Vertex3(1.0f, -1.0f, -1.0f);
|
|
GL.Vertex3(1.0f, 1.0f, -1.0f);
|
|
GL.Vertex3(1.0f, 1.0f, 1.0f);
|
|
GL.Vertex3(1.0f, -1.0f, 1.0f);
|
|
|
|
GL.End();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region public static void Main()
|
|
|
|
/// <summary>
|
|
/// Entry point of this example.
|
|
/// </summary>
|
|
[STAThread]
|
|
public static void Main()
|
|
{
|
|
using (GameLoopForm example = new GameLoopForm())
|
|
{
|
|
// Get the title and category of this example using reflection.
|
|
ExampleAttribute info = ((ExampleAttribute)example.GetType().GetCustomAttributes(false)[0]);
|
|
example.Text = String.Format("OpenTK | {0} {1}: {2}", info.Category, info.Difficulty, info.Title);
|
|
example.ShowDialog();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|