mirror of
https://github.com/Ryujinx/Opentk.git
synced 2025-01-14 05:25:37 +00:00
4ceea208ac
WinRawInput now correctly subclasses WinGLNative or WinGLControl. WinRawKeyboard now correctly responds to events. Removed T10_GLSL_Cube.cs which was erroneously moved outside the Examples/Tutorial directory. Updated INativeWindow, IGameWindow and IGLControl interfaces. Updated examples to use the new GameWindow interface. Added documentation to GameWindow. Improved GameWindow error handling. More defensive programming.
219 lines
5.5 KiB
C#
219 lines
5.5 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 OpenTK.OpenGL;
|
|
using Enums = OpenTK.OpenGL.GL.Enums;
|
|
using OpenTK.Platform;
|
|
|
|
#endregion
|
|
|
|
namespace Examples.WinForms
|
|
{
|
|
public partial class Cube : Form, IExample
|
|
{
|
|
static float angle;
|
|
|
|
#region --- Constructor ---
|
|
|
|
public Cube()
|
|
{
|
|
InitializeComponent();
|
|
|
|
Application.Idle += Application_Idle;
|
|
|
|
this.ShowDialog();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Closing event
|
|
|
|
protected override void OnClosing(CancelEventArgs e)
|
|
{
|
|
base.OnClosing(e);
|
|
|
|
Application.Idle -= Application_Idle;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Application_Idle event
|
|
|
|
void Application_Idle(object sender, EventArgs e)
|
|
{
|
|
while (glControl.IsIdle)
|
|
{
|
|
Render();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region private void Render()
|
|
|
|
private void Render()
|
|
{
|
|
GL.MatrixMode(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;
|
|
|
|
GL.Clear(Enums.ClearBufferMask.COLOR_BUFFER_BIT | Enums.ClearBufferMask.DEPTH_BUFFER_BIT);
|
|
|
|
DrawCube();
|
|
|
|
glControl.Context.SwapBuffers();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Load event handler
|
|
|
|
protected override void OnLoad(EventArgs e)
|
|
{
|
|
base.OnLoad(e);
|
|
|
|
Text =
|
|
GL.GetString(Enums.StringName.VENDOR) + " " +
|
|
GL.GetString(Enums.StringName.RENDERER) + " " +
|
|
GL.GetString(Enums.StringName.VERSION);
|
|
|
|
GL.ClearColor(0.1f, 0.1f, 0.5f, 0.0f);
|
|
GL.Enable(Enums.EnableCap.DEPTH_TEST);
|
|
|
|
glControl.KeyDown += new KeyEventHandler(Cube_KeyDown);
|
|
|
|
OnResize(e);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Resize event handler
|
|
|
|
protected override void OnResize(EventArgs e)
|
|
{
|
|
base.OnResize(e);
|
|
|
|
if (ClientSize.Height == 0)
|
|
ClientSize = new System.Drawing.Size(ClientSize.Width, 1);
|
|
|
|
GL.Viewport(0, 0, ClientSize.Width, ClientSize.Height);
|
|
|
|
double ratio = 0.0;
|
|
ratio = ClientSize.Width / (double)ClientSize.Height;
|
|
//if (ClientSize.Width > ClientSize.Height)
|
|
// ratio = ClientSize.Width / (double)ClientSize.Height;
|
|
//else
|
|
// ratio = ClientSize.Height / (double)ClientSize.Width;
|
|
|
|
GL.MatrixMode(Enums.MatrixMode.PROJECTION);
|
|
GL.LoadIdentity();
|
|
Glu.Perspective(45.0, ratio, 1.0, 64.0);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Paint event handler
|
|
|
|
protected override void OnPaint(PaintEventArgs e)
|
|
{
|
|
base.OnPaint(e);
|
|
|
|
Render();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region KeyDown event handler
|
|
|
|
void Cube_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.Alt && e.Shift)
|
|
{
|
|
//this.SetResolution(this.Width, this.Height, this.ColorDepth, !this.IsFullscreen);
|
|
glControl.Fullscreen = !glControl.Fullscreen;
|
|
}
|
|
|
|
switch (e.KeyData)
|
|
{
|
|
case Keys.Escape:
|
|
this.Close();
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region DrawCube
|
|
public void DrawCube()
|
|
{
|
|
GL.Begin(Enums.BeginMode.QUADS);
|
|
|
|
GL.Color3(1, 0, 0);
|
|
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(1, 1, 0);
|
|
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(1, 0, 1);
|
|
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(0, 1, 0);
|
|
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(0, 0, 1);
|
|
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(0, 1, 1);
|
|
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 IExample Members
|
|
|
|
public void Launch()
|
|
{
|
|
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |