2007-09-02 22:52:00 +00:00
|
|
|
|
#region --- License ---
|
|
|
|
|
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
|
|
|
|
|
* See license.txt for license info
|
|
|
|
|
*/
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
using System;
|
2007-09-02 13:34:44 +00:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
|
|
|
|
using OpenTK;
|
|
|
|
|
using System.Reflection;
|
|
|
|
|
using OpenTK.OpenGL;
|
2007-09-02 23:40:50 +00:00
|
|
|
|
using System.Threading;
|
2007-11-04 15:32:24 +00:00
|
|
|
|
using OpenTK.OpenGL.Enums;
|
2007-09-02 13:34:44 +00:00
|
|
|
|
|
|
|
|
|
namespace Examples.WinForms
|
|
|
|
|
{
|
2007-11-11 18:44:10 +00:00
|
|
|
|
[Example("Extensions", ExampleCategory.WinForms, 3)]
|
|
|
|
|
public partial class W03_Extensions : Form
|
2007-09-02 13:34:44 +00:00
|
|
|
|
{
|
2007-11-11 18:44:10 +00:00
|
|
|
|
//GLControl glControl = new GLControl();
|
|
|
|
|
GLContext context;
|
2007-09-02 13:34:44 +00:00
|
|
|
|
Type glClass;
|
|
|
|
|
Type delegatesClass;
|
|
|
|
|
Type importsClass;
|
2007-09-03 21:47:34 +00:00
|
|
|
|
int supported, all; // Number of supported extensions.
|
|
|
|
|
string driver;
|
2007-09-02 13:34:44 +00:00
|
|
|
|
|
|
|
|
|
public W03_Extensions()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
|
2007-11-11 18:44:10 +00:00
|
|
|
|
glClass = typeof(GL);
|
2007-09-02 13:34:44 +00:00
|
|
|
|
delegatesClass = glClass.GetNestedType("Delegates", BindingFlags.Static | BindingFlags.NonPublic);
|
|
|
|
|
importsClass = glClass.GetNestedType("Imports", BindingFlags.Static | BindingFlags.NonPublic);
|
2007-09-24 19:57:37 +00:00
|
|
|
|
|
2007-11-11 18:44:10 +00:00
|
|
|
|
//glControl.CreateControl();
|
|
|
|
|
Application.Idle += StartAsync;
|
2007-09-02 13:34:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
2007-11-11 18:44:10 +00:00
|
|
|
|
void StartAsync(object sender, EventArgs e)
|
2007-09-02 13:34:44 +00:00
|
|
|
|
{
|
2007-11-11 18:44:10 +00:00
|
|
|
|
Application.Idle -= StartAsync;
|
|
|
|
|
|
|
|
|
|
context = new GLContext(new DisplayMode(), new OpenTK.Platform.WindowInfo(this));
|
|
|
|
|
context.CreateContext();
|
|
|
|
|
|
|
|
|
|
//while (!glControl.Created)
|
2007-09-02 13:34:44 +00:00
|
|
|
|
|
2007-09-03 21:47:34 +00:00
|
|
|
|
driver =
|
2007-11-04 15:32:24 +00:00
|
|
|
|
GL.GetString(StringName.Vendor) + " " +
|
|
|
|
|
GL.GetString(StringName.Renderer) + " " +
|
|
|
|
|
GL.GetString(StringName.Version);
|
2007-09-02 23:26:12 +00:00
|
|
|
|
|
2007-09-03 21:47:34 +00:00
|
|
|
|
all = delegatesClass.GetFields(BindingFlags.Static | BindingFlags.NonPublic).Length;
|
|
|
|
|
this.Text = String.Format("Loading {0} functions...", all);
|
2007-09-02 23:26:12 +00:00
|
|
|
|
|
2007-09-03 21:47:34 +00:00
|
|
|
|
this.backgroundWorker1.RunWorkerAsync();
|
|
|
|
|
}
|
2007-09-02 23:26:12 +00:00
|
|
|
|
|
2007-09-03 21:47:34 +00:00
|
|
|
|
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
|
|
|
|
|
{
|
2007-09-02 13:34:44 +00:00
|
|
|
|
FieldInfo[] v = delegatesClass.GetFields(BindingFlags.Static | BindingFlags.NonPublic);
|
2007-09-03 21:47:34 +00:00
|
|
|
|
int i = 0;
|
|
|
|
|
|
2007-09-02 13:34:44 +00:00
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
foreach (FieldInfo f in v)
|
|
|
|
|
{
|
2007-09-03 21:47:34 +00:00
|
|
|
|
object d = f.GetValue(delegatesClass);
|
2007-09-02 13:34:44 +00:00
|
|
|
|
if (d != null)
|
|
|
|
|
++supported;
|
|
|
|
|
|
2008-01-11 20:18:51 +00:00
|
|
|
|
//if (i % 500 != 0)
|
|
|
|
|
backgroundWorker1.ReportProgress((int)(((float)i / all) * 100.0f),
|
|
|
|
|
String.Format("({0}/{1}) {2}:\t{3}", i.ToString(), all, d != null ? "ok" : "failed", f.Name));
|
|
|
|
|
++i;
|
2007-09-03 21:47:34 +00:00
|
|
|
|
}
|
2007-09-02 13:34:44 +00:00
|
|
|
|
}
|
|
|
|
|
catch (Exception expt)
|
|
|
|
|
{
|
2007-09-03 21:47:34 +00:00
|
|
|
|
MessageBox.Show(expt.ToString(), "An error occured while loading extensions", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
2007-09-02 13:34:44 +00:00
|
|
|
|
throw;
|
|
|
|
|
}
|
|
|
|
|
}
|
2007-11-11 18:44:10 +00:00
|
|
|
|
|
2008-01-11 20:18:51 +00:00
|
|
|
|
List<string> items = new List<string>();
|
2007-09-03 21:47:34 +00:00
|
|
|
|
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
|
|
|
|
|
{
|
2008-01-11 20:18:51 +00:00
|
|
|
|
items.Add(e.UserState as string);
|
|
|
|
|
//listBox1.Items.Add(e.UserState as string);
|
2007-09-03 21:47:34 +00:00
|
|
|
|
/*
|
|
|
|
|
if ((e.UserState as string).Contains("failed"))
|
|
|
|
|
{
|
|
|
|
|
Graphics c = listBox1.CreateGraphics();
|
|
|
|
|
c.
|
|
|
|
|
c.DrawRectangle(new Pen(Color.Gray), listBox1.GetItemRectangle(listBox1.Items.Count - 1));
|
|
|
|
|
c.Dispose();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
}
|
2007-09-02 13:34:44 +00:00
|
|
|
|
|
2007-09-03 21:47:34 +00:00
|
|
|
|
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
|
|
|
|
|
{
|
2008-01-11 20:18:51 +00:00
|
|
|
|
listBox1.Items.AddRange(items.ToArray());
|
2007-09-03 21:47:34 +00:00
|
|
|
|
this.Text = String.Format("{0}: {1}/{2} OpenGL functions supported.",
|
|
|
|
|
driver, supported, all);
|
|
|
|
|
}
|
2007-11-11 18:44:10 +00:00
|
|
|
|
|
|
|
|
|
#region public static void Main()
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Entry point of this example.
|
|
|
|
|
/// </summary>
|
|
|
|
|
[STAThread]
|
|
|
|
|
public static void Main()
|
|
|
|
|
{
|
|
|
|
|
using (W03_Extensions example = new W03_Extensions())
|
|
|
|
|
{
|
|
|
|
|
// 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
|
2007-09-02 13:34:44 +00:00
|
|
|
|
}
|
|
|
|
|
}
|