Merged with bind branch.

This commit is contained in:
the_fiddler 2007-08-20 12:25:48 +00:00
parent 7efeeda3ca
commit 2254388903
40 changed files with 15458 additions and 11298 deletions

View file

@ -29,20 +29,23 @@ namespace Bind.GL2
protected static string enumsFile = "GLEnums.cs";
protected static string wrappersFile = "GL.cs";
protected static string className = Settings.GLClass;
protected static string loadAllFuncName = "LoadAll";
protected static string functionPrefix = "gl";
public string FunctionPrefix { get { return functionPrefix; } }
protected string specFolder;
#endregion
#region --- Constructors ---
public Generator(string folder)
public Generator()
{
specFolder = folder;
if (Settings.Compatibility == Settings.Legacy.Tao)
{
Settings.OutputNamespace = "Tao.OpenGl";
Settings.OutputClass = "Gl";
}
else
{
// Defaults
}
}
#endregion
@ -146,6 +149,8 @@ namespace Bind.GL2
#region ISpecReader Members
#region public virtual DelegateCollection ReadDelegates(StreamReader specFile)
public virtual DelegateCollection ReadDelegates(StreamReader specFile)
{
Console.WriteLine("Reading function specs.");
@ -168,7 +173,7 @@ namespace Bind.GL2
// Get function name:
d.Name = line.Split(Utilities.Separators, StringSplitOptions.RemoveEmptyEntries)[0];
if (d.Name.Contains("MultiTexCoord1"))
if (d.Name.Contains("UseFontOutlinesA"))
{
}
@ -196,7 +201,7 @@ namespace Bind.GL2
p.Name = Utilities.Keywords.Contains(words[1]) ? "@" + words[1] : words[1];
p.CurrentType = words[2];
p.Pointer = words[4] == "array" ? true : false;
p.Pointer = words[4] == "array" ? true : words[4] == "reference" ? true : false;
p.Flow = words[3] == "in" ? Parameter.FlowDirection.In : Parameter.FlowDirection.Out;
d.Parameters.Add(p);
@ -224,17 +229,21 @@ namespace Bind.GL2
return delegates;
}
#endregion
#region public virtual EnumCollection ReadEnums(StreamReader specFile)
public virtual EnumCollection ReadEnums(StreamReader specFile)
{
Trace.WriteLine("Reading opengl enumerant specs.");
Trace.Indent();
EnumCollection enums = new EnumCollection();
// complete_enum contains all opengl enumerants.
Bind.Structures.Enum complete_enum = new Bind.Structures.Enum();
complete_enum.Name = Settings.CompleteEnumName;
Trace.WriteLine(String.Format("Reading opengl enumerant specs"));
Trace.Indent();
do
{
string line = NextValidLine(specFile);
@ -252,7 +261,7 @@ namespace Bind.GL2
// Declare a new enumerant
Bind.Structures.Enum e = new Bind.Structures.Enum();
e.Name = Char.IsDigit(words[0][0]) ? "GL_" + words[0] : words[0];
e.Name = Char.IsDigit(words[0][0]) ? Settings.ConstantPrefix + words[0] : words[0];
// And fill in the values for this enumerant
do
@ -275,12 +284,18 @@ namespace Bind.GL2
Constant c = new Constant();
if (line.Contains("="))
{
// Trim the "GL_" from the start of the string.
if (words[0].StartsWith("GL_"))
words[0] = words[0].Substring(3);
// Trim the name's prefix, but only if not in Tao compat mode.
if (Settings.Compatibility == Settings.Legacy.Tao)
{
}
else
{
if (words[0].StartsWith(Settings.ConstantPrefix))
words[0] = words[0].Substring(Settings.ConstantPrefix.Length);
if (Char.IsDigit(words[0][0]))
words[0] = "GL_" + words[0];
if (Char.IsDigit(words[0][0]))
words[0] = Settings.ConstantPrefix + words[0];
}
c.Name = words[0];
@ -295,30 +310,29 @@ namespace Bind.GL2
}
else
{
// The value is not a number.
// Strip the "GL_" from the start of the string.
if (words[2].StartsWith("GL_"))
words[2] = words[2].Substring(3);
// The value is not a number. Strip the prefix.
if (words[2].StartsWith(Settings.ConstantPrefix))
words[2] = words[2].Substring(Settings.ConstantPrefix.Length);
// If the name now starts with a digit (doesn't matter whether we
// stripped "GL_" above), add a "GL_" prefix.
// (e.g. GL_4_BYTES).
if (Char.IsDigit(words[2][0]))
words[2] = "GL_" + words[2];
words[2] = Settings.ConstantPrefix + words[2];
}
c.Value = words[2];
}
else if (words[0] == "use")
{
// Trim the "GL_" from the start of the string.
if (words[2].StartsWith("GL_"))
words[2] = words[2].Substring(3);
// Trim the prefix.
if (words[2].StartsWith(Settings.ConstantPrefix))
words[2] = words[2].Substring(Settings.ConstantPrefix.Length);
// If the remaining string starts with a digit, we were wrong above.
// Re-add the "GL_"
if (Char.IsDigit(words[2][0]))
words[2] = "GL_" + words[2];
words[2] = Settings.ConstantPrefix + words[2];
c.Name = words[2];
@ -395,6 +409,10 @@ namespace Bind.GL2
return enums;
}
#endregion
#region public virtual Dictionary<string, string> ReadTypeMap(StreamReader specFile)
public virtual Dictionary<string, string> ReadTypeMap(StreamReader specFile)
{
Console.WriteLine("Reading opengl types.");
@ -441,6 +459,10 @@ namespace Bind.GL2
return GLTypes;
}
#endregion
#region public virtual Dictionary<string, string> ReadCSTypeMap(StreamReader specFile)
public virtual Dictionary<string, string> ReadCSTypeMap(StreamReader specFile)
{
Dictionary<string, string> CSTypes = new Dictionary<string, string>();
@ -461,7 +483,9 @@ namespace Bind.GL2
return CSTypes;
}
#endregion
#region private string NextValidLine(StreamReader sr)
private string NextValidLine(System.IO.StreamReader sr)
@ -510,18 +534,18 @@ namespace Bind.GL2
#region void WriteBindings
public void WriteBindings(
DelegateCollection delegates, FunctionCollection functions,
EnumCollection enums)
public void WriteBindings(DelegateCollection delegates, FunctionCollection functions, EnumCollection enums)
{
// Write
if (!Directory.Exists(Settings.OutputPath))
Directory.CreateDirectory(Settings.OutputPath);
using (BindStreamWriter sw = new BindStreamWriter(Path.Combine(Settings.OutputPath, enumsFile)))
{
sw.WriteLine("namespace {0}", Settings.OutputNamespace);
sw.WriteLine("{");
sw.Indent();
sw.WriteLine("public static partial class {0}", className);
sw.WriteLine("public static partial class {0}", Settings.OutputClass);
sw.WriteLine("{");
sw.Indent();
@ -586,7 +610,7 @@ namespace Bind.GL2
Trace.WriteLine(String.Format("Writing delegates to {0}.{1}", Settings.OutputNamespace, Settings.DelegatesClass));
sw.WriteLine();
sw.WriteLine("partial class {0}", className);
sw.WriteLine("partial class {0}", Settings.OutputClass);
sw.WriteLine("{");
sw.Indent();
sw.WriteLine();
@ -598,9 +622,9 @@ namespace Bind.GL2
sw.WriteLine("static {0}()", Settings.DelegatesClass);
sw.WriteLine("{");
// --- Workaround for mono gmcs 1.2.4 issue, where static initalization fails. ---
sw.Indent();
sw.WriteLine("{0}.{1}();", className, loadAllFuncName);
sw.Unindent();
//sw.Indent();
//sw.WriteLine("{0}.{1}();", Settings.OutputClass, loadAllFuncName);
//sw.Unindent();
// --- End workaround ---
sw.WriteLine("}");
sw.WriteLine();
@ -613,7 +637,7 @@ namespace Bind.GL2
"internal {0}static {1} {2}{1} = null;",
d.Unsafe ? "unsafe " : "",
d.Name,
functionPrefix);
Settings.FunctionPrefix);
// --- End workaround ---s
}
sw.Unindent();
@ -631,7 +655,7 @@ namespace Bind.GL2
Trace.WriteLine(String.Format("Writing imports to {0}.{1}", Settings.OutputNamespace, Settings.ImportsClass));
sw.WriteLine();
sw.WriteLine("partial class {0}", className);
sw.WriteLine("partial class {0}", Settings.OutputClass);
sw.WriteLine("{");
sw.Indent();
sw.WriteLine();
@ -647,10 +671,11 @@ namespace Bind.GL2
{
sw.WriteLine("[System.Security.SuppressUnmanagedCodeSecurity()]");
sw.WriteLine(
"[System.Runtime.InteropServices.DllImport({0}.Library, EntryPoint = \"{1}{2}\", ExactSpelling = true)]",
className,
functionPrefix,
d.Name
"[System.Runtime.InteropServices.DllImport({0}.Library, EntryPoint = \"{1}{2}\"{3})]",
Settings.OutputClass,
Settings.FunctionPrefix,
d.Name,
d.Name.EndsWith("W") || d.Name.EndsWith("A") ? ", CharSet = CharSet.Auto" : ", ExactSpelling = true"
);
sw.WriteLine("internal extern static {0};", d.DeclarationString());
}
@ -667,10 +692,10 @@ namespace Bind.GL2
public void WriteWrappers(BindStreamWriter sw, FunctionCollection wrappers, Dictionary<string, string> CSTypes)
{
Trace.WriteLine(String.Format("Writing wrappers to {0}.{1}", Settings.OutputNamespace, className));
Trace.WriteLine(String.Format("Writing wrappers to {0}.{1}", Settings.OutputNamespace, Settings.OutputClass));
sw.WriteLine();
sw.WriteLine("public static partial class {0}", className);
sw.WriteLine("public static partial class {0}", Settings.OutputClass);
sw.WriteLine("{");
sw.Indent();
@ -687,7 +712,7 @@ namespace Bind.GL2
else
{
// Identifiers cannot start with a number:
sw.WriteLine("public static class GL_{0}", key);
sw.WriteLine("public static class {0}{1}", Settings.FunctionPrefix, key);
}
sw.WriteLine("{");
sw.Indent();
@ -735,7 +760,7 @@ namespace Bind.GL2
public void WriteEnums(BindStreamWriter sw, EnumCollection enums)
{
Trace.WriteLine(String.Format("Writing enums to {0}.{1}", Settings.OutputNamespace, className));
Trace.WriteLine(String.Format("Writing enums to {0}.{1}", Settings.OutputNamespace, Settings.OutputClass));
if (Settings.Compatibility == Settings.Legacy.None)
{
@ -762,8 +787,8 @@ namespace Bind.GL2
{
sw.WriteLine(String.Format(
"public const int {0} = {2}((int){1});",
c.Name.StartsWith("GL_") ? c.Name : "GL_" + c.Name,
Char.IsDigit(c.Value[0]) ? c.Value : c.Value.StartsWith("GL_") ? c.Value : "GL_" + c.Value,
c.Name.StartsWith(Settings.ConstantPrefix) ? c.Name : Settings.ConstantPrefix + c.Name,
Char.IsDigit(c.Value[0]) ? c.Value : c.Value.StartsWith(Settings.ConstantPrefix) ? c.Value : Settings.ConstantPrefix + c.Value,
c.Unchecked ? "unchecked" : ""));
}
else

View file

@ -12,9 +12,6 @@ namespace Bind
{
interface IBind : ISpecReader, ISpecWriter
{
//ISpecReader SpecReader { get; }
void Process();
string FunctionPrefix { get; }
}
}

View file

@ -46,8 +46,6 @@ namespace Bind
//Console.WriteLine(" - the OpenTK team ;-)");
Console.WriteLine();
#region Handle Arguments
try
{
foreach (string a in arguments)
@ -80,19 +78,17 @@ namespace Bind
case "ns":
Settings.OutputNamespace = b[1];
break;
case "gl":
Settings.GLClass = b[1];
break;
case "glu":
Settings.GluClass = b[1];
break;
//case "gl":
// Settings.OutputClass = b[1];
// break;
//case "glu":
// Settings.OutputClass = b[1];
// break;
case "legacy":
Settings.Compatibility = b[1].ToLower() == "tao" ? Settings.Legacy.Tao : Settings.Legacy.None;
Settings.OutputNamespace = "Tao.OpenGl";
Settings.GLClass = "Gl";
break;
case "class":
Settings.GLClass = b[1];
Settings.OutputClass = b[1];
break;
default:
throw new ArgumentException(
@ -113,8 +109,6 @@ namespace Bind
return;
}
#endregion
try
{
long ticks = System.DateTime.Now.Ticks;
@ -122,7 +116,7 @@ namespace Bind
switch (mode)
{
case GeneratorMode.GL2:
Generator = new Bind.GL2.Generator(Settings.InputPath);
Generator = new Bind.GL2.Generator();
break;
case GeneratorMode.Wgl:
@ -134,7 +128,7 @@ namespace Bind
{
Settings.OutputNamespace = "OpenTK.Platform.Windows";
}
Generator = new Bind.Wgl.Generator(Settings.InputPath);
Generator = new Bind.Wgl.Generator();
break;
default:

View file

@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.9.7.3")]
[assembly: AssemblyFileVersion("0.9.7.3")]
[assembly: AssemblyVersion("0.9.7.4")]
[assembly: AssemblyFileVersion("0.9.7.4")]

View file

@ -20,19 +20,20 @@ namespace Bind
public readonly static string DefaultOutputPath = "..\\..\\..\\Source\\OpenTK\\OpenGL\\Bindings";
public readonly static string DefaultOutputNamespace = "OpenTK.OpenGL";
public static string GLClass = "GL";
public static string OutputClass = "GL";
public static string FunctionPrefix = "gl";
public static string ConstantPrefix = "GL_";
private static string enumsClass = "Enums";
public static string GLEnumsClass
{
get { return GLClass + "." + enumsClass; }
get { return OutputClass + "." + enumsClass; }
set { enumsClass = value; }
}
public static string DelegatesClass = "Delegates";
public static string ImportsClass = "Imports";
public static string WglClass = "Wgl";
public static string GlxClass = "Glx";
public static string GluClass = "Glu";
public static Legacy Compatibility = Legacy.None;
public readonly static string DefaultWglOutputPath = "..\\..\\..\\Source\\OpenTK\\Platform\\Windows\\Bindings";
@ -48,6 +49,6 @@ namespace Bind
Tao,
}
public static string WindowsPlatform = "OpenTK.Platform.Windows.API";
public static string WindowsGDI = "OpenTK.Platform.Windows.API";
}
}

View file

@ -185,3 +185,53 @@ UseFontBitmapsW( hDC, first, count, listBase )
category wgl
dlflags notlistable
# Added by hand. Where can we find an updated spec?
#UseFontBitmaps( hDC, first, count, listBase )
# return BOOL
# param hDC HDC in value
# param first DWORD in value
# param count DWORD in value
# param listBase DWORD in value
# category wgl
# dlflags notlistable
UseFontOutlinesA( hDC, first, count, listBase )
return BOOL
param hDC HDC in value
param first DWORD in value
param count DWORD in value
param listBase DWORD in value
param thickness float in value
param deviation float in value
param fontMode DWORD in value
param glyphMetrics GLYPHMETRICSFLOAT in array
category wgl
dlflags notlistable
UseFontOutlinesW( hDC, first, count, listBase )
return BOOL
param hDC HDC in value
param first DWORD in value
param count DWORD in value
param listBase DWORD in value
param thickness float in value
param deviation float in value
param fontMode DWORD in value
param glyphMetrics GLYPHMETRICSFLOAT in array
category wgl
dlflags notlistable
#UseFontOutlines( hDC, first, count, listBase )
# return BOOL
# param hDC HDC in value
# param first DWORD in value
# param count DWORD in value
# param listBase DWORD in value
# param thickness float in value
# param deviation float in value
# param fontMode DWORD in value
# param glyphMetrics GLYPHMETRICSFLOAT in array
# category wgl
# dlflags notlistable

View file

@ -22,3 +22,8 @@ VoidPointer,*,*, void*,*,*
float,*,*, float,*,*
int,*,*, int,*,*
#void,*,*, *,*,*
PIXELFORMATDESCRIPTOR PIXELFORMATDESCRIPTOR
LAYERPLANEDESCRIPTOR LAYERPLANEDESCRIPTOR
GLYPHMETRICSFLOAT GLYPHMETRICSFLOAT
COLORREF Int32
LPCSTR String

View file

@ -357,3 +357,8 @@ WGL_ATI_pixel_format_float enum:
###############################################################################
# Any_vendor_future_use: 0x21C0-0xFFFF
# Added by hand:
WGL_font_type enum:
WGL_FONT_LINES = 0
WGL_FONT_POLYGONS = 1

View file

@ -270,9 +270,9 @@ namespace Bind.Structures
sb.Append(Settings.DelegatesClass);
sb.Append(".");
sb.Append(Bind.MainClass.Generator.FunctionPrefix);
sb.Append(Settings.FunctionPrefix);
sb.Append(Name);
sb.Append(Parameters.CallString());
sb.Append(Parameters.CallString(Settings.Compatibility == Settings.Legacy.Tao));
return sb.ToString();
}
@ -338,9 +338,9 @@ namespace Bind.Structures
#region public IEnumerable<Function> CreateWrappers()
public IEnumerable<Function> CreateWrappers()
public void CreateWrappers()
{
if (this.Name.Contains("GetString"))
if (this.Name.Contains("GenBuffers"))
{
}
@ -361,11 +361,44 @@ namespace Bind.Structures
{
Function f = WrapReturnType();
WrapParameters(new Function((Function)f ?? this), wrappers);
}
return wrappers;
// If the function is not CLS-compliant (e.g. it contains unsigned parameters)
// we need to create a CLS-Compliant overload. However, we should only do this
// iff the opengl function does not contain unsigned/signed overloads itself
// to avoid redefinitions.
foreach (Function f in wrappers)
{
Bind.Structures.Function.Wrappers.AddChecked(f);
//Bind.Structures.Function.Wrappers.Add(f);
if (!f.CLSCompliant)
{
Function cls = new Function(f);
cls.Body.Clear();
if (!cls.NeedsWrapper)
{
cls.Body.Add((f.ReturnType.CurrentType != "void" ? "return " + this.CallString() : this.CallString()) + ";");
}
else
{
cls.Body.AddRange(this.CreateBody(cls, true));
}
bool somethingChanged = false;
for (int i = 0; i < f.Parameters.Count; i++)
{
cls.Parameters[i].CurrentType = cls.Parameters[i].GetCLSCompliantType();
if (cls.Parameters[i].CurrentType != f.Parameters[i].CurrentType)
somethingChanged = true;
}
if (somethingChanged)
Bind.Structures.Function.Wrappers.AddChecked(cls);
}
}
}
#endregion
@ -432,13 +465,9 @@ namespace Bind.Structures
/// </summary>
protected void WrapParameters(Function function, List<Function> wrappers)
{
if (function.Name == "GetString")
{
}
if (index == 0)
{
bool containsPointerParameters = false;
bool containsPointerParameters = false, containsReferenceParameters = false;
// Check if there are any IntPtr parameters (we may have come here from a ReturnType wrapper
// such as glGetString, which contains no IntPtr parameters)
foreach (Parameter p in function.Parameters)
@ -448,12 +477,20 @@ namespace Bind.Structures
containsPointerParameters = true;
break;
}
else if (p.Reference)
{
containsReferenceParameters = true;
break;
}
}
if (containsPointerParameters)
{
wrappers.Add(DefaultWrapper(function));
}
else if (containsReferenceParameters)
{
}
else
{
if (function.Body.Count == 0)
@ -485,8 +522,17 @@ namespace Bind.Structures
WrapParameters(function, wrappers);
--index;
if (function.Name == "UseFontOutlinesA")
{
}
// On stack rewind, create array wrappers
f = ArrayWrapper(new Function(function), index);
f = new Function(function);
f.Parameters[index].Reference = false;
f.Parameters[index].Array = 1;
f.Parameters[index].Pointer = false;
f.Body = CreateBody(f, false);
//f = ReferenceWrapper(new Function(function), index);
wrappers.Add(f);
// Recurse to the last parameter again, keeping the Array wrappers
@ -494,8 +540,12 @@ namespace Bind.Structures
WrapParameters(f, wrappers);
--index;
// On stack rewind, create Ref wrappers.
f = ReferenceWrapper(new Function(function), index);
f = new Function(function);
f.Parameters[index].Reference = true;
f.Parameters[index].Array = 0;
f.Parameters[index].Pointer = false;
f.Body = CreateBody(f, false);
//f = ReferenceWrapper(new Function(function), index);
wrappers.Add(f);
// Keeping the current Ref wrapper, visit all other parameters once more
@ -512,7 +562,36 @@ namespace Bind.Structures
--index;
// On stack rewind, create array wrappers
f = GenericWrapper(new Function(function), index);
f = new Function(function);
f.Parameters[index].Reference = false;
f.Parameters[index].Array = 0;
f.Parameters[index].Pointer = false;
f.Parameters[index].CurrentType = "object";
f.Parameters[index].Flow = Parameter.FlowDirection.Undefined;
f.Body = CreateBody(f, false);
wrappers.Add(f);
// Keeping the current Object wrapper, visit all other parameters once more
++index;
WrapParameters(f, wrappers);
--index;
break;
case WrapperTypes.ReferenceParameter:
// Recurse to the last parameter
++index;
WrapParameters(function, wrappers);
--index;
// On stack rewind, create reference wrappers
f = new Function(function);
f.Parameters[index].Reference = true;
f.Parameters[index].Array = 0;
f.Parameters[index].Pointer = false;
f.Body = CreateBody(f, false);
//f = ReferenceWrapper(new Function(function), index);
wrappers.Add(f);
// Keeping the current Object wrapper, visit all other parameters once more
@ -528,66 +607,6 @@ namespace Bind.Structures
#endregion
#region protected Function GenericWrapper(Function function, int index)
protected Function GenericWrapper(Function function, int index)
{
// Search and replace IntPtr parameters with the known parameter types:
function.Parameters[index].Reference = false;
function.Parameters[index].Array = 0;
function.Parameters[index].Pointer = false;
function.Parameters[index].CurrentType = "object";
function.Parameters[index].Flow = Parameter.FlowDirection.Undefined;
// In the function body we should pin all objects in memory before calling the
// low-level function.
function.Body.Clear();
//function.Body.AddRange(GetBodyWithFixedPins(function));
function.Body.AddRange(function.GetBodyWithPins(false));
return function;
}
#endregion
#region protected Function ReferenceWrapper(Function function, int index)
protected Function ReferenceWrapper(Function function, int index)
{
// Search and replace IntPtr parameters with the known parameter types:
function.Parameters[index].Reference = true;
function.Parameters[index].Array = 0;
function.Parameters[index].Pointer = false;
// In the function body we should pin all objects in memory before calling the
// low-level function.
function.Body.Clear();
function.Body.AddRange(function.GetBodyWithPins(false));
return function;
}
#endregion
#region protected Function ArrayWrapper(Function function, int index)
protected Function ArrayWrapper(Function function, int index)
{
// Search and replace IntPtr parameters with the known parameter types:
function.Parameters[index].Array = 1;
function.Parameters[index].Pointer = false;
function.Parameters[index].Flow = Parameter.FlowDirection.Undefined;
// In the function body we should pin all objects in memory before calling the
// low-level function.
function.Body.Clear();
function.Body.AddRange(function.GetBodyWithPins(false));
return function;
}
#endregion
#region protected Function DefaultWrapper(Function f)
protected Function DefaultWrapper(Function f)
@ -607,53 +626,28 @@ namespace Bind.Structures
#endregion
#region protected FunctionBody GetBodyWithPins(bool wantCLSCompliance)
#region protected FunctionBody CreateBody(Function fun, bool wantCLSCompliance)
/// <summary>
/// Generates a body which calls the specified function, pinning all needed parameters.
/// </summary>
/// <param name="function"></param>
protected FunctionBody GetBodyWithPins(bool wantCLSCompliance)
static List<string> handle_statements = new List<string>();
static List<string> fixed_statements = new List<string>();
static List<string> assign_statements = new List<string>();
static string function_call_statement;
protected FunctionBody CreateBody(Function fun, bool wantCLSCompliance)
{
// We'll make changes, but we want the original intact.
//Function function = this as Function ?? new Function(this);
//Function f = new Function(function);
Function f = new Function(this);
Function f = new Function(fun);
f.Body.Clear();
// Unsafe only if
//function.Unsafe = false;
handle_statements.Clear();
fixed_statements.Clear();
assign_statements.Clear();
// Add default initliazers for out parameters:
foreach (Parameter p in this.Parameters)
{
if (p.Flow == Parameter.FlowDirection.Out)
{
f.Body.Add(
String.Format(
"{0} = default({1});",
p.Name,
p.GetFullType(Bind.Structures.Type.CSTypes, wantCLSCompliance)
)
);
}
if (f.Name == "LoadDisplayColorTableEXT")
{
}
// All GCHandles statements will go here. This will allow to place only one opening '{'
// on fixed statements.
int handleStart = f.Body.Count;
// Indicates the index where the last GCHandle statement is. Used to add an unsafe stamement
// (if needed) at exactl that spot, i.e. after the GCHandles but before the fixed statements.
int handleEnd = f.Body.Count;
// True if at least on GCHandle is allocated. Used to remove the try { } finally { }
// block if no handle has been allocated.
bool handleAllocated = false;
// True if function body contains at least one fixed statement. Add a statement-level
// unsafe block if true (and the function is not unsafe at the function-level).
bool fixedAllocated = false;
// Obtain pointers by pinning the parameters
int param = 0;
foreach (Parameter p in f.Parameters)
{
if (p.NeedsPin)
@ -662,119 +656,114 @@ namespace Bind.Structures
// This is because fixed can only take the address of fields, not managed objects.
if (p.WrapperType == WrapperTypes.GenericParameter)
{
f.Body.Insert(
handleStart,
String.Format(
"{0} {1} = {0}.Alloc({2}, System.Runtime.InteropServices.GCHandleType.Pinned);",
"System.Runtime.InteropServices.GCHandle",
p.Name + "_ptr",
p.Name
)
);
handle_statements.Add(String.Format(
"{0} {1} = {0}.Alloc({2}, System.Runtime.InteropServices.GCHandleType.Pinned);",
"System.Runtime.InteropServices.GCHandle", p.Name + "_ptr", p.Name));
if (p.Flow == Parameter.FlowDirection.Out)
{
assign_statements.Add(String.Format(
" {0} = ({1}){2}.Target;",
p.Name, p.CurrentType, p.Name + "_ptr"));
}
// Note! The following line modifies f.Parameters, *not* function.Parameters
p.Name = "(void*)" + p.Name + "_ptr.AddrOfPinnedObject()";
}
else if (p.WrapperType == WrapperTypes.PointerParameter ||
p.WrapperType == WrapperTypes.ArrayParameter ||
p.WrapperType == WrapperTypes.ReferenceParameter)
{
fixed_statements.Add(String.Format(
"fixed ({0}* {1} = {2})",
wantCLSCompliance && !p.CLSCompliant ? p.GetCLSCompliantType() : p.CurrentType,
p.Name + "_ptr",
p.Array > 0 ? p.Name : "&" + p.Name));
handleAllocated = true;
if (p.Flow == Parameter.FlowDirection.Out && p.Array == 0) // Fixed Arrays of blittable types don't need explicit assignment.
{
assign_statements.Add(String.Format(" {0} = *{0}_ptr;", p.Name));
}
handleEnd++;
p.Name = p.Name + "_ptr";
}
else
{
f.Body.Add(
String.Format(
" fixed ({0}* {1} = {2})",
wantCLSCompliance && !p.CLSCompliant ?
p.GetCLSCompliantType() :
p.CurrentType,
p.Name + "_ptr",
p.Array > 0 ? p.Name : "&" + p.Name
)
);
p.Name = p.Name + "_ptr";
fixedAllocated = true;
throw new ApplicationException("Unknown parameter type");
}
}
}
if (!this.Unsafe)
//if (!f.Unsafe && (fixed_statements.Count > 0 || fixed_statements.Count > 0))
{
f.Body.Insert(handleEnd, "unsafe");
f.Body.Insert(handleEnd + 1, "{");
f.Body.Add("unsafe");
f.Body.Add("{");
f.Body.Indent();
}
if (handleAllocated)
if (fixed_statements.Count > 0)
{
f.Body.Add(" try");
f.Body.AddRange(fixed_statements);
f.Body.Add("{");
f.Body.Indent();
}
if (handle_statements.Count > 0)
{
f.Body.AddRange(handle_statements);
f.Body.Add("try");
f.Body.Add("{");
f.Body.Indent();
}
f.Body.Add(" {");
// Add delegate call:
if (f.ReturnType.CurrentType.ToLower().Contains("void"))
f.Body.Add(String.Format(" {0};", f.CallString()));
else
f.Body.Add(String.Format(" {0} {1} = {2};", f.ReturnType.CurrentType, "retval", f.CallString()));
// Assign out parameters:
foreach (Parameter p in this.Parameters)
{
if (p.Flow == Parameter.FlowDirection.Out)
{
// Check each out parameter. If it has been pinned, get the Target of the GCHandle.
// Otherwise, nothing needs be done.
if (p.NeedsPin)
{
if (p.WrapperType == WrapperTypes.GenericParameter)
{
f.Body.Add(
String.Format(
" {0} = ({1}){2}.Target;",
p.Name,
p.CurrentType,
p.Name + "_ptr"
)
);
}
else
{
f.Body.Add(
String.Format(
" {0} = *{0}_ptr;",
p.Name
)
);
}
}
}
f.Body.Add(String.Format("{0};", f.CallString()));
}
else
{
f.Body.Add(String.Format("{0} {1} = {2};", f.ReturnType.CurrentType, "retval", f.CallString()));
}
if (assign_statements.Count > 0)
{
f.Body.AddRange(assign_statements);
}
// Return:
if (!f.ReturnType.CurrentType.ToLower().Contains("void"))
{
f.Body.Add(" return retval;");
f.Body.Add("return retval;");
}
if (handleAllocated)
if (handle_statements.Count > 0)
{
f.Body.Add(" }");
f.Body.Add(" finally");
f.Body.Add(" {");
f.Body.Unindent();
f.Body.Add("}");
f.Body.Add("finally");
f.Body.Add("{");
f.Body.Indent();
// Free all allocated GCHandles
foreach (Parameter p in this.Parameters)
{
// Free all allocated GCHandles
if (p.NeedsPin)
if (p.NeedsPin && p.WrapperType == WrapperTypes.GenericParameter)
{
if (p.WrapperType == WrapperTypes.GenericParameter)
f.Body.Add(String.Format(" {0}_ptr.Free();", p.Name));
//else
// f.Body.Add("}");
f.Body.Add(String.Format(" {0}_ptr.Free();", p.Name));
}
}
f.Body.Unindent();
f.Body.Add("}");
}
f.Body.Add(" }");
if (!this.Unsafe)
if (fixed_statements.Count > 0)
{
f.Body.Unindent();
f.Body.Add("}");
}
//if (!f.Unsafe && (fixed_statements.Count > 0 || fixed_statements.Count > 0))
{
f.Body.Unindent();
f.Body.Add("}");
}
@ -785,6 +774,8 @@ namespace Bind.Structures
#endregion
#region Translate
/// <summary>
/// Translates the opengl return type to the equivalent C# type.
/// </summary>
@ -836,11 +827,16 @@ namespace Bind.Structures
if (ReturnType.CurrentType.ToLower().Contains("bool"))
{
// TODO: Is the translation to 'int' needed 100%? It breaks WGL.
/*
if (Settings.Compatibility == Settings.Legacy.Tao)
{
ReturnType.CurrentType = "int";
}
else
{
}
*/
//ReturnType.WrapperType = WrapperTypes.ReturnsBool;
}
@ -871,24 +867,6 @@ namespace Bind.Structures
//IsPointer = true;
Parameters[i].Array = 1;
}
if (Parameters[i].CurrentType == "PIXELFORMATDESCRIPTOR")
{
Parameters[i].CurrentType = Settings.WindowsPlatform + ".PixelFormatDescriptor";
}
else if (Parameters[i].CurrentType == "LAYERPLANEDESCRIPTOR")
{
Parameters[i].CurrentType = Settings.WindowsPlatform + ".LayerPlaneDescriptor";
}
else if (Parameters[i].CurrentType == "LPCSTR")
{
// TODO: Why doesn't the cs typemap work for LPCSTR and COLORREF?
Parameters[i].CurrentType = "String";
}
else if (Parameters[i].CurrentType == "COLORREF")
{
Parameters[i].CurrentType = "Int32";
}
}
}
@ -897,36 +875,10 @@ namespace Bind.Structures
TranslateReturnType();
TranslateParameters();
List<Function> wrappers = (List<Function>)CreateWrappers();
// If the function is not CLS-compliant (e.g. it contains unsigned parameters)
// we need to create a CLS-Compliant overload. However, we should only do this
// iff the opengl function does not contain unsigned/signed overloads itself
// to avoid redefinitions.
foreach (Function f in wrappers)
{
Bind.Structures.Function.Wrappers.AddChecked(f);
if (this.Name.Contains("Bitmap"))
{
}
bool createCLS = !f.CLSCompliant;
/*string nameWithoutExtension = Utilities.StripGL2Extension(f.Name).TrimEnd('v');
createCLS &=
String.IsNullOrEmpty(f.TrimmedName) ||
nameWithoutExtension.Substring(nameWithoutExtension.Length - 3).Contains("u") &&
!nameWithoutExtension.Substring(nameWithoutExtension.Length - 3).Contains("b");*/
if (createCLS)
{
Function clsFunction = f.GetCLSCompliantFunction();
if (clsFunction != null)
Bind.Structures.Function.Wrappers.AddChecked(clsFunction);
}
}
CreateWrappers();
}
#endregion
}
#region class DelegateCollection : Dictionary<string, Delegate>

View file

@ -12,7 +12,7 @@ using System.Diagnostics;
namespace Bind.Structures
{
public class Function : Delegate
public class Function : Delegate, IEquatable<Function>
{
internal static FunctionCollection Wrappers;
@ -138,9 +138,13 @@ namespace Bind.Structures
// remove the Extension and the overload information from the name
// (Extension == "ARB", "EXT", etc, overload == [u][bsidf][v])
// TODO: Use some regex's here, to reduce clutter.
if (Settings.Compatibility != Settings.Legacy.Tao)
TrimmedName = value;
if (Settings.Compatibility == Settings.Legacy.Tao)
{
}
else
{
TrimmedName = value;
TrimmedName = Utilities.StripGL2Extension(value);
//if (TrimmedName.Contains("Uniform2iv"))
@ -194,7 +198,7 @@ namespace Bind.Structures
sb.Append(" ");
if (Settings.Compatibility == Settings.Legacy.Tao)
{
sb.Append("gl");
sb.Append(Settings.FunctionPrefix);
}
sb.Append(!String.IsNullOrEmpty(TrimmedName) ? TrimmedName : Name);
sb.Append(Parameters.ToString(true));
@ -209,38 +213,13 @@ namespace Bind.Structures
#endregion
#region public Function GetCLSCompliantFunction(Dictionary<string, string> CSTypes)
#region IEquatable<Function> Members
public Function GetCLSCompliantFunction()
public bool Equals(Function other)
{
Function f = new Function(this);
bool somethingChanged = false;
for (int i = 0; i < f.Parameters.Count; i++)
{
f.Parameters[i].CurrentType = f.Parameters[i].GetCLSCompliantType();
if (f.Parameters[i].CurrentType != this.Parameters[i].CurrentType)
somethingChanged = true;
}
if (!somethingChanged)
return null;
f.Body.Clear();
if (!f.NeedsWrapper)
{
f.Body.Add((f.ReturnType.CurrentType != "void" ? "return " + this.CallString() : this.CallString()) + ";");
}
else
{
f.Body.AddRange(this.GetBodyWithPins(true));
}
// The type system cannot differentiate between functions with the same parameters
// but different return types. Tough, only CLS-Compliant function in that case.
//f.ReturnType.Type = f.ReturnType.GetCLSCompliantType(CSTypes);
return f;
return !String.IsNullOrEmpty(this.TrimmedName) && !String.IsNullOrEmpty(other.TrimmedName) &&
this.TrimmedName == other.TrimmedName &&
this.Parameters.ToString(true) == other.Parameters.ToString(true);
}
#endregion
@ -262,6 +241,32 @@ namespace Bind.Structures
}
}
private string indent = "";
public void Indent()
{
indent += " ";
}
public void Unindent()
{
if (indent.Length >= 4)
indent = indent.Substring(4);
}
new public void Add(string s)
{
base.Add(indent + s);
}
new public void AddRange(IEnumerable<string> collection)
{
foreach (string t in collection)
{
this.Add(t);
}
}
public override string ToString()
{
if (this.Count == 0)
@ -286,6 +291,8 @@ namespace Bind.Structures
class FunctionCollection : Dictionary<string, List<Function>>
{
Regex unsignedFunctions = new Regex(@".+(u[dfisb]v?)", RegexOptions.Compiled);
public void Add(Function f)
{
if (!this.ContainsKey(f.Extension))
@ -314,28 +321,28 @@ namespace Bind.Structures
/// <param name="f">The Function to add.</param>
public void AddChecked(Function f)
{
bool exists = false;
if (Bind.Structures.Function.Wrappers.ContainsKey(f.Extension))
{
Function fun = Bind.Structures.Function.Wrappers[f.Extension]
.Find(delegate(Function target)
{
return
!String.IsNullOrEmpty(target.TrimmedName) &&
target.TrimmedName == f.TrimmedName &&
target.Parameters.ToString(true) == f.Parameters.ToString(true);
});
if (fun != null)
int index = Bind.Structures.Function.Wrappers[f.Extension].IndexOf(f);
if (index == -1)
{
exists = true;
/*Debug.WriteLine("Function redefinition:");
Debug.WriteLine(fun.ToString());
Debug.WriteLine(f.ToString());*/
Bind.Structures.Function.Wrappers.Add(f);
}
else
{
if (unsignedFunctions.IsMatch(Utilities.StripGL2Extension(f.Name)))// &&
//!unsignedFunctions.IsMatch(
// Utilities.StripGL2Extension(Bind.Structures.Function.Wrappers[f.Extension][index].Name)))
{
Bind.Structures.Function.Wrappers[f.Extension].RemoveAt(index);
Bind.Structures.Function.Wrappers[f.Extension].Add(f);
}
}
}
if (!exists)
else
{
Bind.Structures.Function.Wrappers.Add(f);
}
}
}

View file

@ -104,10 +104,11 @@ namespace Bind.Structures
public bool NeedsPin
{
get { return
(Array > 0 || Reference || CurrentType == "object") &&
!CurrentType.ToLower().Contains("string");
}
get
{
return (Array > 0 || Reference || CurrentType == "object") &&
!CurrentType.ToLower().Contains("string");
}
}
#endregion
@ -235,7 +236,27 @@ namespace Bind.Structures
else
{
// This is not enum, default translation:
p.CurrentType = s;
if (p.CurrentType == "PIXELFORMATDESCRIPTOR" || p.CurrentType == "LAYERPLANEDESCRIPTOR" ||
p.CurrentType == "GLYPHMETRICSFLOAT")
{
if (Settings.Compatibility == Settings.Legacy.Tao)
{
p.CurrentType = p.CurrentType.Insert(0, "Gdi.");
}
else
{
if (p.CurrentType == "PIXELFORMATDESCRIPTOR")
p.CurrentType ="API.PixelFormatDescriptor";
else if (p.CurrentType == "LAYERPLANEDESCRIPTOR")
p.CurrentType = "API.LayerPlaneDescriptor";
else if (p.CurrentType == "GLYPHMETRICSFLOAT")
p.CurrentType = "API.GlyphMetricsFloat";
}
}
else
{
p.CurrentType = s;
}
p.CurrentType =
Bind.Structures.Type.CSTypes.ContainsKey(p.CurrentType) ?
Bind.Structures.Type.CSTypes[p.CurrentType] : p.CurrentType;
@ -267,6 +288,11 @@ namespace Bind.Structures
}
}
if (p.Reference)
{
p.WrapperType = WrapperTypes.ReferenceParameter;
}
if (p.CurrentType.ToLower().Contains("bool"))
{
// Is this actually used anywhere?
@ -375,18 +401,23 @@ namespace Bind.Structures
{
if (p.CurrentType.ToLower().Contains("string"))
{
sb.Append(String.Format(
"({0}{1})",
p.CurrentType,
(p.Array > 0) ? "[]" : ""));
sb.Append(String.Format("({0}{1})",
p.CurrentType, (p.Array > 0) ? "[]" : ""));
}
else if (p.Pointer || p.Array > 0 || p.Reference)
{
sb.Append(String.Format("({0}*)",
p.CurrentType /*, (p.Pointer || p.Array > 0) ? "*" : ""*/));
}
//else if (p.Reference)
//{
// sb.Append(String.Format("{0} ({1})",
// p.Flow == Parameter.FlowDirection.Out ? "out" : "ref", p.CurrentType));
//}
else
{
sb.Append(String.Format(
"({0}{1})",
p.CurrentType,
(p.Pointer || p.Array > 0 || p.Reference) ? "*" : ""));
sb.Append(String.Format("({0})", p.CurrentType));
}
}

View file

@ -216,12 +216,16 @@ namespace Bind.Structures
switch (CurrentType)
{
case "UInt16":
case "ushort":
return "Int16";
case "UInt32":
case "uint":
return "Int32";
case "UInt64":
case "ulong":
return "Int64";
case "SByte":
case "sbyte":
return "Byte";
}
}

View file

@ -44,6 +44,10 @@ namespace Bind
/// </summary>
PointerParameter,
/// <summary>
/// Function that takes a reference to a struct.
/// </summary>
ReferenceParameter,
/// <summary>
/// Function returns string - needs manual marshalling through IntPtr to prevent the managed GC
/// from freeing memory allocated on the unmanaged side (e.g. glGetString).
/// </summary>

View file

@ -15,8 +15,8 @@ namespace Bind.Wgl
{
#region --- Constructors ---
public Generator(string path)
: base(path)
public Generator()
: base()
{
glTypemap = "Wgl\\wgl.tm";
csTypemap = "csharp.tm";
@ -29,10 +29,20 @@ namespace Bind.Wgl
delegatesFile = "WglDelegates.cs";
enumsFile = "WglEnums.cs";
wrappersFile = "Wgl.cs";
className = "Wgl";
functionPrefix = "wgl";
Settings.OutputClass = "Wgl";
Settings.FunctionPrefix = "wgl";
Settings.ConstantPrefix = "WGL_";
if (Settings.Compatibility == Settings.Legacy.Tao)
{
Settings.OutputNamespace = "Tao.Platform.Windows";
Settings.WindowsGDI = "Tao.Platform.Windows.Gdi";
}
else
{
Settings.OutputNamespace = "OpenTK.Platform.Windows";
}
}
#endregion

View file

@ -28,26 +28,44 @@
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.listBox1 = new System.Windows.Forms.ListBox();
this.runButton = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// listBox1
//
this.listBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.listBox1.FormattingEnabled = true;
this.listBox1.Location = new System.Drawing.Point(0, 0);
this.listBox1.Margin = new System.Windows.Forms.Padding(1);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(284, 264);
this.listBox1.TabIndex = 0;
this.listBox1.DoubleClick += new System.EventHandler(this.listBox1_DoubleClick);
this.listBox1.KeyUp += new System.Windows.Forms.KeyEventHandler(this.listBox1_KeyUp);
//
// runButton
//
this.runButton.Dock = System.Windows.Forms.DockStyle.Bottom;
this.runButton.Location = new System.Drawing.Point(0, 220);
this.runButton.Margin = new System.Windows.Forms.Padding(1);
this.runButton.Name = "runButton";
this.runButton.Size = new System.Drawing.Size(284, 44);
this.runButton.TabIndex = 0;
this.runButton.Text = "Run Example";
this.runButton.UseVisualStyleBackColor = true;
this.runButton.Click += new System.EventHandler(this.runButton_Click);
//
// ExampleLauncher
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 264);
this.Controls.Add(this.runButton);
this.Controls.Add(this.listBox1);
this.MinimumSize = new System.Drawing.Size(300, 300);
this.Name = "ExampleLauncher";
this.Text = "OpenTK Example Launcher";
this.Load += new System.EventHandler(this.ExampleLauncher_Load);
@ -58,5 +76,7 @@
#endregion
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.Button runButton;
}
}

View file

@ -45,8 +45,10 @@ namespace Examples
MessageBox.Show("Could not access debug.log", e.ToString());
}
Debug.Listeners.Clear();
Debug.Listeners.Add(new TextWriterTraceListener("debug.log"));
Debug.Listeners.Add(new ConsoleTraceListener());
Debug.AutoFlush = true;
try
{
@ -70,7 +72,45 @@ namespace Examples
InitializeComponent();
}
private void listBox1_DoubleClick(object sender, EventArgs e)
void Launch(object example)
{
Type ex = example as Type;
try
{
(ex.GetConstructor(Type.EmptyTypes).Invoke(null) as IExample).Launch();
}
catch (Exception expt)
{
MessageBox.Show(String.Format("Stacktrace:{0}{1}{0}{0}Inner exception:{0}{2}",
System.Environment.NewLine, expt.StackTrace, expt.InnerException), expt.Message);
}
}
public void ExampleLauncher_Load(object sender, EventArgs e)
{
SortedList<string, string> sl = new SortedList<string, string>();
// Get all examples
Type[] types = Assembly.GetExecutingAssembly().GetTypes();
foreach (Type type in types)
{
if (type.GetInterface("IExample") != null)
{
sl.Add((type.Namespace.Replace("Examples.", String.Empty) + ": " + type.Name).Replace('_', ' '), null);
}
}
foreach (string s in sl.Keys)
listBox1.Items.Add(s);
// Select first item
if (listBox1.Items.Count > 0)
{
this.listBox1.SelectedIndex = 0;
}
}
private void RunExample()
{
if (listBox1.SelectedItem != null)
{
@ -79,7 +119,7 @@ namespace Examples
"Examples." + listBox1.SelectedItem.ToString().Replace(": ", ".").Replace(' ', '_'),
true,
true);
Debug.Print("Launching example: {0}", example.ToString());
if (example.BaseType == typeof(GameWindow))
@ -111,51 +151,24 @@ namespace Examples
}
}
void Launch(object example)
private void listBox1_DoubleClick(object sender, EventArgs e)
{
Type ex = example as Type;
try
RunExample();
}
private void listBox1_KeyUp(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
(ex.GetConstructor(Type.EmptyTypes).Invoke(null) as IExample).Launch();
}
catch (Exception expt)
{
MessageBox.Show(
String.Format(
"Stacktrace:{0}{1}{0}{0}Inner exception:{0}{2}",
System.Environment.NewLine,
expt.StackTrace,
expt.InnerException
),
expt.Message);
case Keys.Enter:
RunExample();
break;
}
}
public void ExampleLauncher_Load(object sender, EventArgs e)
private void runButton_Click(object sender, EventArgs e)
{
SortedList<string, string> sl = new SortedList<string, string>();
// Get all examples
Type[] types = Assembly.GetExecutingAssembly().GetTypes();
foreach (Type type in types)
{
if (type.GetInterface("IExample") != null)
{
sl.Add(
(type.Namespace.Replace("Examples.", String.Empty) + ": " + type.Name).Replace('_', ' '),
null
);
}
}
foreach (string s in sl.Keys)
listBox1.Items.Add(s);
// Select first item
if (listBox1.Items.Count > 0)
{
this.listBox1.SelectedIndex = 0;
}
RunExample();
}
}
}

View file

@ -117,10 +117,4 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="exampleLauncherBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="exampleLauncherBindingSource1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>243, 17</value>
</metadata>
</root>

View file

@ -67,7 +67,7 @@ namespace Examples.WinForms
#region private void Render()
private void Render()
{
{
GL.MatrixMode(GL.Enums.MatrixMode.MODELVIEW);
GL.LoadIdentity();
Glu.LookAt(
@ -171,37 +171,38 @@ namespace Examples.WinForms
{
GL.Begin(GL.Enums.BeginMode.QUADS);
GL.Color3(1.0f, 0.0f, 0.0f);
GL.Color3((byte)Color.Silver.R, (byte)Color.Silver.G, (byte)Color.Silver.B);
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.0f, 1.0f, 0.0f);
GL.Color3((byte)Color.Honeydew.R, (byte)Color.Honeydew.G, (byte)Color.Honeydew.B);
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.0f, 0.0f, 1.0f);
GL.Color3((byte)Color.Moccasin.R, (byte)Color.Moccasin.G, (byte)Color.Moccasin.B);
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.0f, 1.0f, 0.0f);
GL.Color3((byte)Color.IndianRed.R, (byte)Color.IndianRed.G, (byte)Color.IndianRed.B);
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.0f, 0.0f, 1.0f);
GL.Color3((byte)Color.PaleVioletRed.R, (byte)Color.PaleVioletRed.G, (byte)Color.PaleVioletRed.B);
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.0f, 1.0f, 1.0f);
GL.Color3((byte)Color.ForestGreen.R, (byte)Color.ForestGreen.G, (byte)Color.ForestGreen.B);
GL.Vertex3(1.0f, -1.0f, -1.0f);
GL.Vertex3(1.0f, 1.0f, -1.0f);
GL.Vertex3(1.0f, 1.0f, 1.0f);

View file

@ -30,41 +30,43 @@ namespace Examples.WinForms
this.ShowDialog();
}
protected override void OnHandleCreated(EventArgs e)
protected override void OnLoad(EventArgs e)
{
base.OnHandleCreated(e);
base.OnLoad(e);
glControl1.CreateContext();
}
private void redButton_Click(object sender, EventArgs e)
{
GL.ClearColor(0.7f, 0.0f, 0.0f, 0.0f);
glControl1.Invalidate();
//GL.ClearColor(0.7f, 0.0f, 0.0f, 0.0f);
//glControl1.Invalidate();
}
private void greenButton_Click(object sender, EventArgs e)
{
GL.ClearColor(0.0f, 0.5f, 0.0f, 0.0f);
glControl1.Invalidate();
//GL.ClearColor(0.0f, 0.5f, 0.0f, 0.0f);
//glControl1.Invalidate();
}
private void blueButton_Click(object sender, EventArgs e)
{
GL.ClearColor(0.0f, 0.0f, 0.7f, 0.0f);
glControl1.Invalidate();
//GL.ClearColor(0.0f, 0.0f, 0.7f, 0.0f);
//glControl1.Invalidate();
}
private void glControl1_Paint(object sender, PaintEventArgs e)
{
GL.Clear(GL.Enums.ClearBufferMask.COLOR_BUFFER_BIT);
glControl1.Context.SwapBuffers();
//GL.Clear(GL.Enums.ClearBufferMask.COLOR_BUFFER_BIT);
//glControl1.SwapBuffers();
}
private void glControl1_Resize(object sender, OpenTK.Platform.ResizeEventArgs e)
{
if (glControl1.ClientSize.Height == 0)
glControl1.ClientSize = new System.Drawing.Size(glControl1.ClientSize.Width, 1);
//if (glControl1.ClientSize.Height == 0)
// glControl1.ClientSize = new System.Drawing.Size(glControl1.ClientSize.Width, 1);
GL.Viewport(0, 0, glControl1.ClientSize.Width, glControl1.ClientSize.Height);
//GL.Viewport(0, 0, glControl1.ClientSize.Width, glControl1.ClientSize.Height);
}
private void glControl1_KeyDown(object sender, KeyEventArgs e)

View file

@ -47,6 +47,7 @@ namespace OpenTK
{
InitializeComponent();
this.Visible = false;
this.Fullscreen = mode.Fullscreen;
this.SetStyle(ControlStyles.UserPaint, true);

View file

@ -204,6 +204,7 @@ namespace OpenTK
if (!Exists)
{
glWindow.CreateWindow(mode);
OpenTK.OpenGL.GL.LoadAll();
}
else
{

File diff suppressed because it is too large Load diff

View file

@ -10,7 +10,6 @@ namespace OpenTK.OpenGL
{
static Delegates()
{
GL.LoadAll();
}
[System.Security.SuppressUnmanagedCodeSecurity()]

View file

@ -77,7 +77,7 @@ namespace OpenTK.OpenGL
#region --- Fields ---
internal const string Library = "OPENGL32.DLL";
internal const string Library = "opengl32.dll";
private static System.Collections.Generic.Dictionary<string, bool> AvailableExtensions = new Dictionary<string, bool>();
private static bool rebuildExtensionList;

View file

@ -14,7 +14,6 @@ namespace OpenTK.Platform
{
public interface IGLControl : IDisposable
{
bool IsIdle { get; }
bool Fullscreen { get; set; }
IGLContext Context { get; }

View file

@ -64,9 +64,11 @@ namespace OpenTK.Platform.Windows
RawInputDeviceSize = Marshal.SizeOf(typeof(RawInputDevice));
RawInputDeviceListSize = Marshal.SizeOf(typeof(RawInputDeviceList));
RawInputDeviceInfoSize = Marshal.SizeOf(typeof(RawInputDeviceInfo));
PixelFormatDescriptorVersion = 1;
PixelFormatDescriptorSize = (short)Marshal.SizeOf(typeof(PixelFormatDescriptor));
}
#region Constants
#region --- Constants ---
public struct Constants
{
@ -401,7 +403,7 @@ namespace OpenTK.Platform.Windows
/// <param name="pfd"></param>
/// <returns></returns>
[DllImport("gdi32.dll")]
public static extern int ChoosePixelFormat(IntPtr dc, [In, MarshalAs(UnmanagedType.LPStruct)]PixelFormatDescriptor pfd);
public static extern int ChoosePixelFormat(IntPtr dc, ref PixelFormatDescriptor pfd);
#endregion
@ -416,12 +418,7 @@ namespace OpenTK.Platform.Windows
/// <returns></returns>
[DllImport("gdi32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetPixelFormat(
IntPtr dc,
int format,
[In, MarshalAs(UnmanagedType.LPStruct)]PixelFormatDescriptor pfd
);
public static extern bool SetPixelFormat(IntPtr dc, int format, ref PixelFormatDescriptor pfd);
#endregion
@ -1275,54 +1272,56 @@ namespace OpenTK.Platform.Windows
#endregion
#region PixelFormatDescriptor
internal static short PixelFormatDescriptorSize;
internal static short PixelFormatDescriptorVersion;
/// <summary>
/// Describes a pixel format. It is used when interfacing with the WINAPI to create a new Context.
/// Found in WinGDI.h
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public class PixelFormatDescriptor
public struct PixelFormatDescriptor
{
public readonly short Size = (short)Marshal.SizeOf(typeof(PixelFormatDescriptor)); // No need for the user to set the size, since it is predefined.
public short Version = 1;
public PixelFormatDescriptorFlags Flags =
//PixelFormatDescriptorFlags.DOUBLEBUFFER |
PixelFormatDescriptorFlags.DRAW_TO_WINDOW |
PixelFormatDescriptorFlags.SUPPORT_OPENGL;
public byte PixelType = Constants.PFD_TYPE_RGBA;
public byte ColorBits = 0;
public byte RedBits = 0;
public byte RedShift = 0;
public byte GreenBits = 0;
public byte GreenShift = 0;
public byte BlueBits = 0;
public byte BlueShift = 0;
public byte AlphaBits = 8;
public byte AlphaShift = 0;
public byte AccumBits = 0;
public byte AccumRedBits = 0;
public byte AccumGreenBits = 0;
public byte AccumBlueBits = 0;
public byte AccumAlphaBits = 0;
public byte DepthBits = 0;
public byte StencilBits = 0;
public byte AuxBuffers = 0;
public byte LayerType = unchecked((byte)Constants.PFD_MAIN_PLANE);
byte Reserved = 0;
public int LayerMask = 0;
public int VisibleMask = 0;
public int DamageMask = 0;
internal short Size;
internal short Version;
public PixelFormatDescriptorFlags Flags;
public PixelType PixelType;
public byte ColorBits;
public byte RedBits;
public byte RedShift;
public byte GreenBits;
public byte GreenShift;
public byte BlueBits;
public byte BlueShift;
public byte AlphaBits;
public byte AlphaShift;
public byte AccumBits;
public byte AccumRedBits;
public byte AccumGreenBits;
public byte AccumBlueBits;
public byte AccumAlphaBits;
public byte DepthBits;
public byte StencilBits;
public byte AuxBuffers;
public byte LayerType;
private byte Reserved;
public int LayerMask;
public int VisibleMask;
public int DamageMask;
}
#endregion
#region public class LayerPlaneDescriptor
/// <summary>
/// Describes the pixel format of a drawing surface.
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public class LayerPlaneDescriptor
public struct LayerPlaneDescriptor
{
public readonly WORD Size = (WORD)Marshal.SizeOf(typeof(PixelFormatDescriptor));
public static readonly WORD Size = (WORD)Marshal.SizeOf(typeof(LayerPlaneDescriptor));
public WORD Version;
public DWORD Flags;
public BYTE PixelType;
@ -1350,6 +1349,63 @@ namespace OpenTK.Platform.Windows
#endregion
#region GlyphMetricsFloat
/// <summary>
/// The <b>GlyphMetricsFloat</b> structure contains information about the placement and orientation of a glyph in a
/// character cell.
/// </summary>
/// <remarks>The values of <b>GlyphMetricsFloat</b> are specified as notional units.</remarks>
/// <seealso cref="POINTFLOAT" />
/// <seealso cref="Wgl.wglUseFontOutlines" />
[StructLayout(LayoutKind.Sequential)]
public struct GlyphMetricsFloat
{
/// <summary>
/// Specifies the width of the smallest rectangle (the glyph's black box) that completely encloses the glyph.
/// </summary>
public float BlackBoxX;
/// <summary>
/// Specifies the height of the smallest rectangle (the glyph's black box) that completely encloses the glyph.
/// </summary>
public float BlackBoxY;
/// <summary>
/// Specifies the x and y coordinates of the upper-left corner of the smallest rectangle that completely encloses the glyph.
/// </summary>
public PointFloat GlyphOrigin;
/// <summary>
/// Specifies the horizontal distance from the origin of the current character cell to the origin of the next character cell.
/// </summary>
public float CellIncX;
/// <summary>
/// Specifies the vertical distance from the origin of the current character cell to the origin of the next character cell.
/// </summary>
public float CellIncY;
}
#endregion
#region PointFloat
/// <summary>
/// The <b>POINTFLOAT</b> structure contains the x and y coordinates of a point.
/// </summary>
/// <seealso cref="GLYPHMETRICSFLOAT" />
[StructLayout(LayoutKind.Sequential)]
public struct PointFloat
{
/// <summary>
/// Specifies the horizontal (x) coordinate of a point.
/// </summary>
public float X;
/// <summary>
/// Specifies the vertical (y) coordinate of a point.
/// </summary>
public float Y;
};
#endregion
#region DeviceMode
/*
typedef struct _devicemode {
@ -2108,6 +2164,16 @@ namespace OpenTK.Platform.Windows
}
#endregion
#region PixelType
public enum PixelType : byte
{
RGBA = 0,
INDEXED = 1
}
#endregion
#region WindowPlacementOptions enum
public enum WindowPlacementOptions

File diff suppressed because it is too large Load diff

View file

@ -27,10 +27,10 @@ namespace OpenTK.Platform.Windows
internal extern static Boolean CopyContext(IntPtr hglrcSrc, IntPtr hglrcDst, UInt32 mask);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglChoosePixelFormat", ExactSpelling = true)]
internal extern static int ChoosePixelFormat(IntPtr hDc, OpenTK.Platform.Windows.API.PixelFormatDescriptor pPfd);
internal extern static unsafe int ChoosePixelFormat(IntPtr hDc, API.PixelFormatDescriptor* pPfd);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglDescribePixelFormat", ExactSpelling = true)]
internal extern static int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, OpenTK.Platform.Windows.API.PixelFormatDescriptor ppfd);
internal extern static unsafe int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, API.PixelFormatDescriptor* ppfd);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglGetCurrentDC", ExactSpelling = true)]
internal extern static IntPtr GetCurrentDC();
@ -45,7 +45,7 @@ namespace OpenTK.Platform.Windows
internal extern static int GetPixelFormat(IntPtr hdc);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglSetPixelFormat", ExactSpelling = true)]
internal extern static Boolean SetPixelFormat(IntPtr hdc, int ipfd, OpenTK.Platform.Windows.API.PixelFormatDescriptor ppfd);
internal extern static unsafe Boolean SetPixelFormat(IntPtr hdc, int ipfd, API.PixelFormatDescriptor* ppfd);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglSwapBuffers", ExactSpelling = true)]
internal extern static Boolean SwapBuffers(IntPtr hdc);
@ -57,13 +57,13 @@ namespace OpenTK.Platform.Windows
internal extern static IntPtr CreateLayerContext(IntPtr hDc, int level);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglDescribeLayerPlane", ExactSpelling = true)]
internal extern static Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, UInt32 nBytes, OpenTK.Platform.Windows.API.LayerPlaneDescriptor plpd);
internal extern static unsafe Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, UInt32 nBytes, API.LayerPlaneDescriptor* plpd);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglSetLayerPaletteEntries", ExactSpelling = true)]
internal extern static int SetLayerPaletteEntries(IntPtr hdc, int iLayerPlane, int iStart, int cEntries, Int32 pcr);
internal extern static unsafe int SetLayerPaletteEntries(IntPtr hdc, int iLayerPlane, int iStart, int cEntries, Int32* pcr);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglGetLayerPaletteEntries", ExactSpelling = true)]
internal extern static int GetLayerPaletteEntries(IntPtr hdc, int iLayerPlane, int iStart, int cEntries, Int32 pcr);
internal extern static unsafe int GetLayerPaletteEntries(IntPtr hdc, int iLayerPlane, int iStart, int cEntries, Int32* pcr);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglRealizeLayerPalette", ExactSpelling = true)]
internal extern static Boolean RealizeLayerPalette(IntPtr hdc, int iLayerPlane, Boolean bRealize);
@ -71,11 +71,17 @@ namespace OpenTK.Platform.Windows
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglSwapLayerBuffers", ExactSpelling = true)]
internal extern static Boolean SwapLayerBuffers(IntPtr hdc, UInt32 fuFlags);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglUseFontBitmapsA", ExactSpelling = true)]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglUseFontBitmapsA", CharSet = CharSet.Auto)]
internal extern static Boolean UseFontBitmapsA(IntPtr hDC, Int32 first, Int32 count, Int32 listBase);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglUseFontBitmapsW", ExactSpelling = true)]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglUseFontBitmapsW", CharSet = CharSet.Auto)]
internal extern static Boolean UseFontBitmapsW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglUseFontOutlinesA", CharSet = CharSet.Auto)]
internal extern static unsafe Boolean UseFontOutlinesA(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, API.GlyphMetricsFloat* glyphMetrics);
[System.Security.SuppressUnmanagedCodeSecurity()]
[System.Runtime.InteropServices.DllImport(Wgl.Library, EntryPoint = "wglUseFontOutlinesW", CharSet = CharSet.Auto)]
internal extern static unsafe Boolean UseFontOutlinesW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, API.GlyphMetricsFloat* glyphMetrics);
}
}
}

View file

@ -10,7 +10,6 @@ namespace OpenTK.Platform.Windows
{
static Delegates()
{
Wgl.LoadAll();
}
[System.Security.SuppressUnmanagedCodeSecurity()]
@ -29,11 +28,11 @@ namespace OpenTK.Platform.Windows
internal delegate Boolean CopyContext(IntPtr hglrcSrc, IntPtr hglrcDst, UInt32 mask);
internal static CopyContext wglCopyContext = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate int ChoosePixelFormat(IntPtr hDc, OpenTK.Platform.Windows.API.PixelFormatDescriptor pPfd);
internal static ChoosePixelFormat wglChoosePixelFormat = null;
internal unsafe delegate int ChoosePixelFormat(IntPtr hDc, API.PixelFormatDescriptor* pPfd);
internal unsafe static ChoosePixelFormat wglChoosePixelFormat = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, OpenTK.Platform.Windows.API.PixelFormatDescriptor ppfd);
internal static DescribePixelFormat wglDescribePixelFormat = null;
internal unsafe delegate int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, API.PixelFormatDescriptor* ppfd);
internal unsafe static DescribePixelFormat wglDescribePixelFormat = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate IntPtr GetCurrentDC();
internal static GetCurrentDC wglGetCurrentDC = null;
@ -47,8 +46,8 @@ namespace OpenTK.Platform.Windows
internal delegate int GetPixelFormat(IntPtr hdc);
internal static GetPixelFormat wglGetPixelFormat = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean SetPixelFormat(IntPtr hdc, int ipfd, OpenTK.Platform.Windows.API.PixelFormatDescriptor ppfd);
internal static SetPixelFormat wglSetPixelFormat = null;
internal unsafe delegate Boolean SetPixelFormat(IntPtr hdc, int ipfd, API.PixelFormatDescriptor* ppfd);
internal unsafe static SetPixelFormat wglSetPixelFormat = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean SwapBuffers(IntPtr hdc);
internal static SwapBuffers wglSwapBuffers = null;
@ -59,14 +58,14 @@ namespace OpenTK.Platform.Windows
internal delegate IntPtr CreateLayerContext(IntPtr hDc, int level);
internal static CreateLayerContext wglCreateLayerContext = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, UInt32 nBytes, OpenTK.Platform.Windows.API.LayerPlaneDescriptor plpd);
internal static DescribeLayerPlane wglDescribeLayerPlane = null;
internal unsafe delegate Boolean DescribeLayerPlane(IntPtr hDc, int pixelFormat, int layerPlane, UInt32 nBytes, API.LayerPlaneDescriptor* plpd);
internal unsafe static DescribeLayerPlane wglDescribeLayerPlane = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate int SetLayerPaletteEntries(IntPtr hdc, int iLayerPlane, int iStart, int cEntries, Int32 pcr);
internal static SetLayerPaletteEntries wglSetLayerPaletteEntries = null;
internal unsafe delegate int SetLayerPaletteEntries(IntPtr hdc, int iLayerPlane, int iStart, int cEntries, Int32* pcr);
internal unsafe static SetLayerPaletteEntries wglSetLayerPaletteEntries = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate int GetLayerPaletteEntries(IntPtr hdc, int iLayerPlane, int iStart, int cEntries, Int32 pcr);
internal static GetLayerPaletteEntries wglGetLayerPaletteEntries = null;
internal unsafe delegate int GetLayerPaletteEntries(IntPtr hdc, int iLayerPlane, int iStart, int cEntries, Int32* pcr);
internal unsafe static GetLayerPaletteEntries wglGetLayerPaletteEntries = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean RealizeLayerPalette(IntPtr hdc, int iLayerPlane, Boolean bRealize);
internal static RealizeLayerPalette wglRealizeLayerPalette = null;
@ -80,6 +79,12 @@ namespace OpenTK.Platform.Windows
internal delegate Boolean UseFontBitmapsW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase);
internal static UseFontBitmapsW wglUseFontBitmapsW = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal unsafe delegate Boolean UseFontOutlinesA(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, API.GlyphMetricsFloat* glyphMetrics);
internal unsafe static UseFontOutlinesA wglUseFontOutlinesA = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal unsafe delegate Boolean UseFontOutlinesW(IntPtr hDC, Int32 first, Int32 count, Int32 listBase, float thickness, float deviation, Int32 fontMode, API.GlyphMetricsFloat* glyphMetrics);
internal unsafe static UseFontOutlinesW wglUseFontOutlinesW = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate IntPtr CreateBufferRegionARB(IntPtr hDC, int iLayerPlane, UInt32 uType);
internal static CreateBufferRegionARB wglCreateBufferRegionARB = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
@ -101,7 +106,7 @@ namespace OpenTK.Platform.Windows
internal unsafe delegate Boolean GetPixelFormatAttribfvARB(IntPtr hdc, int iPixelFormat, int iLayerPlane, UInt32 nAttributes, int* piAttributes, [Out] Single* pfValues);
internal unsafe static GetPixelFormatAttribfvARB wglGetPixelFormatAttribfvARB = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal unsafe delegate Boolean ChoosePixelFormatARB(IntPtr hdc, int* piAttribIList, Single* pfAttribFList, UInt32 nMaxFormats, [Out] int* piFormats, [Out] UInt32 nNumFormats);
internal unsafe delegate Boolean ChoosePixelFormatARB(IntPtr hdc, int* piAttribIList, Single* pfAttribFList, UInt32 nMaxFormats, [Out] int* piFormats, [Out] UInt32* nNumFormats);
internal unsafe static ChoosePixelFormatARB wglChoosePixelFormatARB = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean MakeContextCurrentARB(IntPtr hDrawDC, IntPtr hReadDC, IntPtr hglrc);
@ -122,8 +127,8 @@ namespace OpenTK.Platform.Windows
internal delegate Boolean DestroyPbufferARB(IntPtr hPbuffer);
internal static DestroyPbufferARB wglDestroyPbufferARB = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean QueryPbufferARB(IntPtr hPbuffer, int iAttribute, [Out] int piValue);
internal static QueryPbufferARB wglQueryPbufferARB = null;
internal unsafe delegate Boolean QueryPbufferARB(IntPtr hPbuffer, int iAttribute, [Out] int* piValue);
internal unsafe static QueryPbufferARB wglQueryPbufferARB = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean BindTexImageARB(IntPtr hPbuffer, int iBuffer);
internal static BindTexImageARB wglBindTexImageARB = null;
@ -167,8 +172,8 @@ namespace OpenTK.Platform.Windows
internal delegate Boolean DestroyPbufferEXT(IntPtr hPbuffer);
internal static DestroyPbufferEXT wglDestroyPbufferEXT = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean QueryPbufferEXT(IntPtr hPbuffer, int iAttribute, [Out] int piValue);
internal static QueryPbufferEXT wglQueryPbufferEXT = null;
internal unsafe delegate Boolean QueryPbufferEXT(IntPtr hPbuffer, int iAttribute, [Out] int* piValue);
internal unsafe static QueryPbufferEXT wglQueryPbufferEXT = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal unsafe delegate Boolean GetPixelFormatAttribivEXT(IntPtr hdc, int iPixelFormat, int iLayerPlane, UInt32 nAttributes, [Out] int* piAttributes, [Out] int* piValues);
internal unsafe static GetPixelFormatAttribivEXT wglGetPixelFormatAttribivEXT = null;
@ -176,7 +181,7 @@ namespace OpenTK.Platform.Windows
internal unsafe delegate Boolean GetPixelFormatAttribfvEXT(IntPtr hdc, int iPixelFormat, int iLayerPlane, UInt32 nAttributes, [Out] int* piAttributes, [Out] Single* pfValues);
internal unsafe static GetPixelFormatAttribfvEXT wglGetPixelFormatAttribfvEXT = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal unsafe delegate Boolean ChoosePixelFormatEXT(IntPtr hdc, int* piAttribIList, Single* pfAttribFList, UInt32 nMaxFormats, [Out] int* piFormats, [Out] UInt32 nNumFormats);
internal unsafe delegate Boolean ChoosePixelFormatEXT(IntPtr hdc, int* piAttribIList, Single* pfAttribFList, UInt32 nMaxFormats, [Out] int* piFormats, [Out] UInt32* nNumFormats);
internal unsafe static ChoosePixelFormatEXT wglChoosePixelFormatEXT = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean SwapIntervalEXT(int interval);
@ -233,35 +238,35 @@ namespace OpenTK.Platform.Windows
internal delegate Boolean DisableGenlockI3D(IntPtr hDC);
internal static DisableGenlockI3D wglDisableGenlockI3D = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean IsEnabledGenlockI3D(IntPtr hDC, [Out] Boolean pFlag);
internal static IsEnabledGenlockI3D wglIsEnabledGenlockI3D = null;
internal unsafe delegate Boolean IsEnabledGenlockI3D(IntPtr hDC, [Out] Boolean* pFlag);
internal unsafe static IsEnabledGenlockI3D wglIsEnabledGenlockI3D = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean GenlockSourceI3D(IntPtr hDC, UInt32 uSource);
internal static GenlockSourceI3D wglGenlockSourceI3D = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean GetGenlockSourceI3D(IntPtr hDC, [Out] UInt32 uSource);
internal static GetGenlockSourceI3D wglGetGenlockSourceI3D = null;
internal unsafe delegate Boolean GetGenlockSourceI3D(IntPtr hDC, [Out] UInt32* uSource);
internal unsafe static GetGenlockSourceI3D wglGetGenlockSourceI3D = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean GenlockSourceEdgeI3D(IntPtr hDC, UInt32 uEdge);
internal static GenlockSourceEdgeI3D wglGenlockSourceEdgeI3D = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean GetGenlockSourceEdgeI3D(IntPtr hDC, [Out] UInt32 uEdge);
internal static GetGenlockSourceEdgeI3D wglGetGenlockSourceEdgeI3D = null;
internal unsafe delegate Boolean GetGenlockSourceEdgeI3D(IntPtr hDC, [Out] UInt32* uEdge);
internal unsafe static GetGenlockSourceEdgeI3D wglGetGenlockSourceEdgeI3D = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean GenlockSampleRateI3D(IntPtr hDC, UInt32 uRate);
internal static GenlockSampleRateI3D wglGenlockSampleRateI3D = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean GetGenlockSampleRateI3D(IntPtr hDC, [Out] UInt32 uRate);
internal static GetGenlockSampleRateI3D wglGetGenlockSampleRateI3D = null;
internal unsafe delegate Boolean GetGenlockSampleRateI3D(IntPtr hDC, [Out] UInt32* uRate);
internal unsafe static GetGenlockSampleRateI3D wglGetGenlockSampleRateI3D = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean GenlockSourceDelayI3D(IntPtr hDC, UInt32 uDelay);
internal static GenlockSourceDelayI3D wglGenlockSourceDelayI3D = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean GetGenlockSourceDelayI3D(IntPtr hDC, [Out] UInt32 uDelay);
internal static GetGenlockSourceDelayI3D wglGetGenlockSourceDelayI3D = null;
internal unsafe delegate Boolean GetGenlockSourceDelayI3D(IntPtr hDC, [Out] UInt32* uDelay);
internal unsafe static GetGenlockSourceDelayI3D wglGetGenlockSourceDelayI3D = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean QueryGenlockMaxSourceDelayI3D(IntPtr hDC, [Out] UInt32 uMaxLineDelay, [Out] UInt32 uMaxPixelDelay);
internal static QueryGenlockMaxSourceDelayI3D wglQueryGenlockMaxSourceDelayI3D = null;
internal unsafe delegate Boolean QueryGenlockMaxSourceDelayI3D(IntPtr hDC, [Out] UInt32* uMaxLineDelay, [Out] UInt32* uMaxPixelDelay);
internal unsafe static QueryGenlockMaxSourceDelayI3D wglQueryGenlockMaxSourceDelayI3D = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate IntPtr CreateImageBufferI3D(IntPtr hDC, Int32 dwSize, UInt32 uFlags);
internal static CreateImageBufferI3D wglCreateImageBufferI3D = null;
@ -281,14 +286,14 @@ namespace OpenTK.Platform.Windows
internal delegate Boolean DisableFrameLockI3D();
internal static DisableFrameLockI3D wglDisableFrameLockI3D = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean IsEnabledFrameLockI3D([Out] Boolean pFlag);
internal static IsEnabledFrameLockI3D wglIsEnabledFrameLockI3D = null;
internal unsafe delegate Boolean IsEnabledFrameLockI3D([Out] Boolean* pFlag);
internal unsafe static IsEnabledFrameLockI3D wglIsEnabledFrameLockI3D = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean QueryFrameLockMasterI3D([Out] Boolean pFlag);
internal static QueryFrameLockMasterI3D wglQueryFrameLockMasterI3D = null;
internal unsafe delegate Boolean QueryFrameLockMasterI3D([Out] Boolean* pFlag);
internal unsafe static QueryFrameLockMasterI3D wglQueryFrameLockMasterI3D = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean GetFrameUsageI3D([Out] float pUsage);
internal static GetFrameUsageI3D wglGetFrameUsageI3D = null;
internal unsafe delegate Boolean GetFrameUsageI3D([Out] float* pUsage);
internal unsafe static GetFrameUsageI3D wglGetFrameUsageI3D = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean BeginFrameTrackingI3D();
internal static BeginFrameTrackingI3D wglBeginFrameTrackingI3D = null;
@ -296,8 +301,8 @@ namespace OpenTK.Platform.Windows
internal delegate Boolean EndFrameTrackingI3D();
internal static EndFrameTrackingI3D wglEndFrameTrackingI3D = null;
[System.Security.SuppressUnmanagedCodeSecurity()]
internal delegate Boolean QueryFrameTrackingI3D([Out] Int32 pFrameCount, [Out] Int32 pMissedFrames, [Out] float pLastMissedUsage);
internal static QueryFrameTrackingI3D wglQueryFrameTrackingI3D = null;
internal unsafe delegate Boolean QueryFrameTrackingI3D([Out] Int32* pFrameCount, [Out] Int32* pMissedFrames, [Out] float* pLastMissedUsage);
internal unsafe static QueryFrameTrackingI3D wglQueryFrameTrackingI3D = null;
}
}
}

View file

@ -6,166 +6,166 @@ namespace OpenTK.Platform.Windows
{
public enum WGL_ARB_buffer_region
{
WGL_DEPTH_BUFFER_BIT_ARB = ((int)0x00000004),
WGL_BACK_COLOR_BUFFER_BIT_ARB = ((int)0x00000002),
WGL_STENCIL_BUFFER_BIT_ARB = ((int)0x00000008),
WGL_FRONT_COLOR_BUFFER_BIT_ARB = ((int)0x00000001),
STENCIL_BUFFER_BIT_ARB = ((int)0x00000008),
DEPTH_BUFFER_BIT_ARB = ((int)0x00000004),
BACK_COLOR_BUFFER_BIT_ARB = ((int)0x00000002),
FRONT_COLOR_BUFFER_BIT_ARB = ((int)0x00000001),
}
public enum WGL_EXT_pixel_format
{
WGL_RED_BITS_EXT = ((int)0x2015),
WGL_GENERIC_ACCELERATION_EXT = ((int)0x2026),
WGL_FULL_ACCELERATION_EXT = ((int)0x2027),
WGL_ACCUM_RED_BITS_EXT = ((int)0x201E),
WGL_SUPPORT_OPENGL_EXT = ((int)0x2010),
WGL_DEPTH_BITS_EXT = ((int)0x2022),
WGL_SHARE_STENCIL_EXT = ((int)0x200D),
WGL_SWAP_LAYER_BUFFERS_EXT = ((int)0x2006),
WGL_GREEN_BITS_EXT = ((int)0x2017),
WGL_STENCIL_BITS_EXT = ((int)0x2023),
WGL_NEED_PALETTE_EXT = ((int)0x2004),
WGL_ACCELERATION_EXT = ((int)0x2003),
WGL_TYPE_RGBA_EXT = ((int)0x202B),
WGL_TYPE_COLORINDEX_EXT = ((int)0x202C),
WGL_NUMBER_PIXEL_FORMATS_EXT = ((int)0x2000),
WGL_ACCUM_GREEN_BITS_EXT = ((int)0x201F),
WGL_NEED_SYSTEM_PALETTE_EXT = ((int)0x2005),
WGL_ACCUM_BITS_EXT = ((int)0x201D),
WGL_TRANSPARENT_EXT = ((int)0x200A),
WGL_NUMBER_UNDERLAYS_EXT = ((int)0x2009),
WGL_RED_SHIFT_EXT = ((int)0x2016),
WGL_DRAW_TO_WINDOW_EXT = ((int)0x2001),
WGL_BLUE_BITS_EXT = ((int)0x2019),
WGL_SWAP_EXCHANGE_EXT = ((int)0x2028),
WGL_SHARE_ACCUM_EXT = ((int)0x200E),
WGL_DOUBLE_BUFFER_EXT = ((int)0x2011),
WGL_BLUE_SHIFT_EXT = ((int)0x201A),
WGL_PIXEL_TYPE_EXT = ((int)0x2013),
WGL_AUX_BUFFERS_EXT = ((int)0x2024),
WGL_DRAW_TO_BITMAP_EXT = ((int)0x2002),
WGL_ACCUM_BLUE_BITS_EXT = ((int)0x2020),
WGL_STEREO_EXT = ((int)0x2012),
WGL_TRANSPARENT_VALUE_EXT = ((int)0x200B),
WGL_SWAP_METHOD_EXT = ((int)0x2007),
WGL_SWAP_COPY_EXT = ((int)0x2029),
WGL_ACCUM_ALPHA_BITS_EXT = ((int)0x2021),
WGL_ALPHA_BITS_EXT = ((int)0x201B),
WGL_SUPPORT_GDI_EXT = ((int)0x200F),
WGL_COLOR_BITS_EXT = ((int)0x2014),
WGL_NUMBER_OVERLAYS_EXT = ((int)0x2008),
WGL_ALPHA_SHIFT_EXT = ((int)0x201C),
WGL_GREEN_SHIFT_EXT = ((int)0x2018),
WGL_NO_ACCELERATION_EXT = ((int)0x2025),
WGL_SWAP_UNDEFINED_EXT = ((int)0x202A),
WGL_SHARE_DEPTH_EXT = ((int)0x200C),
SWAP_LAYER_BUFFERS_EXT = ((int)0x2006),
NUMBER_UNDERLAYS_EXT = ((int)0x2009),
SHARE_STENCIL_EXT = ((int)0x200D),
ACCELERATION_EXT = ((int)0x2003),
GREEN_SHIFT_EXT = ((int)0x2018),
TRANSPARENT_EXT = ((int)0x200A),
DRAW_TO_WINDOW_EXT = ((int)0x2001),
TYPE_COLORINDEX_EXT = ((int)0x202C),
PIXEL_TYPE_EXT = ((int)0x2013),
ACCUM_ALPHA_BITS_EXT = ((int)0x2021),
STEREO_EXT = ((int)0x2012),
BLUE_SHIFT_EXT = ((int)0x201A),
GENERIC_ACCELERATION_EXT = ((int)0x2026),
ACCUM_RED_BITS_EXT = ((int)0x201E),
STENCIL_BITS_EXT = ((int)0x2023),
FULL_ACCELERATION_EXT = ((int)0x2027),
NO_ACCELERATION_EXT = ((int)0x2025),
ALPHA_BITS_EXT = ((int)0x201B),
DRAW_TO_BITMAP_EXT = ((int)0x2002),
DEPTH_BITS_EXT = ((int)0x2022),
SWAP_METHOD_EXT = ((int)0x2007),
BLUE_BITS_EXT = ((int)0x2019),
SWAP_UNDEFINED_EXT = ((int)0x202A),
SUPPORT_OPENGL_EXT = ((int)0x2010),
NUMBER_OVERLAYS_EXT = ((int)0x2008),
AUX_BUFFERS_EXT = ((int)0x2024),
SHARE_DEPTH_EXT = ((int)0x200C),
TRANSPARENT_VALUE_EXT = ((int)0x200B),
SUPPORT_GDI_EXT = ((int)0x200F),
SWAP_COPY_EXT = ((int)0x2029),
TYPE_RGBA_EXT = ((int)0x202B),
SWAP_EXCHANGE_EXT = ((int)0x2028),
NEED_SYSTEM_PALETTE_EXT = ((int)0x2005),
DOUBLE_BUFFER_EXT = ((int)0x2011),
ACCUM_GREEN_BITS_EXT = ((int)0x201F),
RED_SHIFT_EXT = ((int)0x2016),
COLOR_BITS_EXT = ((int)0x2014),
ALPHA_SHIFT_EXT = ((int)0x201C),
SHARE_ACCUM_EXT = ((int)0x200E),
NUMBER_PIXEL_FORMATS_EXT = ((int)0x2000),
RED_BITS_EXT = ((int)0x2015),
GREEN_BITS_EXT = ((int)0x2017),
ACCUM_BITS_EXT = ((int)0x201D),
ACCUM_BLUE_BITS_EXT = ((int)0x2020),
NEED_PALETTE_EXT = ((int)0x2004),
}
public enum WGL_ARB_pixel_format
{
WGL_RED_BITS_ARB = ((int)0x2015),
WGL_NEED_PALETTE_ARB = ((int)0x2004),
WGL_ACCUM_ALPHA_BITS_ARB = ((int)0x2021),
WGL_ALPHA_BITS_ARB = ((int)0x201B),
WGL_DRAW_TO_BITMAP_ARB = ((int)0x2002),
WGL_NUMBER_UNDERLAYS_ARB = ((int)0x2009),
WGL_GREEN_SHIFT_ARB = ((int)0x2018),
WGL_NUMBER_PIXEL_FORMATS_ARB = ((int)0x2000),
WGL_GENERIC_ACCELERATION_ARB = ((int)0x2026),
WGL_SWAP_UNDEFINED_ARB = ((int)0x202A),
WGL_NUMBER_OVERLAYS_ARB = ((int)0x2008),
WGL_BLUE_SHIFT_ARB = ((int)0x201A),
WGL_ACCUM_BITS_ARB = ((int)0x201D),
WGL_SWAP_LAYER_BUFFERS_ARB = ((int)0x2006),
WGL_PBUFFER_HEIGHT_ARB = ((int)0x2035),
WGL_TRANSPARENT_INDEX_VALUE_ARB = ((int)0x203B),
WGL_ALPHA_SHIFT_ARB = ((int)0x201C),
WGL_DEPTH_BITS_ARB = ((int)0x2022),
WGL_SHARE_DEPTH_ARB = ((int)0x200C),
WGL_TYPE_COLORINDEX_ARB = ((int)0x202C),
WGL_FULL_ACCELERATION_ARB = ((int)0x2027),
WGL_ACCUM_BLUE_BITS_ARB = ((int)0x2020),
WGL_SWAP_COPY_ARB = ((int)0x2029),
WGL_SHARE_ACCUM_ARB = ((int)0x200E),
WGL_SUPPORT_OPENGL_ARB = ((int)0x2010),
WGL_DRAW_TO_WINDOW_ARB = ((int)0x2001),
WGL_SHARE_STENCIL_ARB = ((int)0x200D),
WGL_RED_SHIFT_ARB = ((int)0x2016),
WGL_GREEN_BITS_ARB = ((int)0x2017),
WGL_SWAP_METHOD_ARB = ((int)0x2007),
WGL_PIXEL_TYPE_ARB = ((int)0x2013),
WGL_TYPE_RGBA_ARB = ((int)0x202B),
WGL_AUX_BUFFERS_ARB = ((int)0x2024),
WGL_TRANSPARENT_BLUE_VALUE_ARB = ((int)0x2039),
WGL_PBUFFER_WIDTH_ARB = ((int)0x2034),
WGL_DRAW_TO_PBUFFER_ARB = ((int)0x202D),
WGL_SUPPORT_GDI_ARB = ((int)0x200F),
WGL_DOUBLE_BUFFER_ARB = ((int)0x2011),
WGL_NEED_SYSTEM_PALETTE_ARB = ((int)0x2005),
WGL_TRANSPARENT_GREEN_VALUE_ARB = ((int)0x2038),
WGL_STEREO_ARB = ((int)0x2012),
WGL_BLUE_BITS_ARB = ((int)0x2019),
WGL_ACCUM_GREEN_BITS_ARB = ((int)0x201F),
WGL_SWAP_EXCHANGE_ARB = ((int)0x2028),
WGL_TRANSPARENT_ARB = ((int)0x200A),
WGL_MAX_PBUFFER_HEIGHT_ARB = ((int)0x2030),
WGL_ACCUM_RED_BITS_ARB = ((int)0x201E),
WGL_TRANSPARENT_RED_VALUE_ARB = ((int)0x2037),
WGL_MAX_PBUFFER_PIXELS_ARB = ((int)0x202E),
WGL_TRANSPARENT_ALPHA_VALUE_ARB = ((int)0x203A),
WGL_PBUFFER_LARGEST_ARB = ((int)0x2033),
WGL_COLOR_BITS_ARB = ((int)0x2014),
WGL_MAX_PBUFFER_WIDTH_ARB = ((int)0x202F),
WGL_ACCELERATION_ARB = ((int)0x2003),
WGL_STENCIL_BITS_ARB = ((int)0x2023),
WGL_NO_ACCELERATION_ARB = ((int)0x2025),
SHARE_DEPTH_ARB = ((int)0x200C),
RED_BITS_ARB = ((int)0x2015),
BLUE_BITS_ARB = ((int)0x2019),
BLUE_SHIFT_ARB = ((int)0x201A),
GREEN_BITS_ARB = ((int)0x2017),
MAX_PBUFFER_PIXELS_ARB = ((int)0x202E),
TYPE_COLORINDEX_ARB = ((int)0x202C),
NO_ACCELERATION_ARB = ((int)0x2025),
SWAP_COPY_ARB = ((int)0x2029),
PBUFFER_LARGEST_ARB = ((int)0x2033),
ACCUM_BITS_ARB = ((int)0x201D),
ACCUM_GREEN_BITS_ARB = ((int)0x201F),
ALPHA_SHIFT_ARB = ((int)0x201C),
FULL_ACCELERATION_ARB = ((int)0x2027),
SWAP_METHOD_ARB = ((int)0x2007),
STENCIL_BITS_ARB = ((int)0x2023),
STEREO_ARB = ((int)0x2012),
MAX_PBUFFER_WIDTH_ARB = ((int)0x202F),
DRAW_TO_PBUFFER_ARB = ((int)0x202D),
TYPE_RGBA_ARB = ((int)0x202B),
MAX_PBUFFER_HEIGHT_ARB = ((int)0x2030),
DRAW_TO_BITMAP_ARB = ((int)0x2002),
GREEN_SHIFT_ARB = ((int)0x2018),
SUPPORT_GDI_ARB = ((int)0x200F),
PBUFFER_WIDTH_ARB = ((int)0x2034),
DOUBLE_BUFFER_ARB = ((int)0x2011),
TRANSPARENT_ALPHA_VALUE_ARB = ((int)0x203A),
ACCUM_ALPHA_BITS_ARB = ((int)0x2021),
AUX_BUFFERS_ARB = ((int)0x2024),
ALPHA_BITS_ARB = ((int)0x201B),
NUMBER_OVERLAYS_ARB = ((int)0x2008),
SHARE_ACCUM_ARB = ((int)0x200E),
SWAP_EXCHANGE_ARB = ((int)0x2028),
ACCELERATION_ARB = ((int)0x2003),
TRANSPARENT_GREEN_VALUE_ARB = ((int)0x2038),
ACCUM_RED_BITS_ARB = ((int)0x201E),
TRANSPARENT_BLUE_VALUE_ARB = ((int)0x2039),
TRANSPARENT_INDEX_VALUE_ARB = ((int)0x203B),
GENERIC_ACCELERATION_ARB = ((int)0x2026),
TRANSPARENT_ARB = ((int)0x200A),
NUMBER_UNDERLAYS_ARB = ((int)0x2009),
SWAP_UNDEFINED_ARB = ((int)0x202A),
DEPTH_BITS_ARB = ((int)0x2022),
NUMBER_PIXEL_FORMATS_ARB = ((int)0x2000),
TRANSPARENT_RED_VALUE_ARB = ((int)0x2037),
SHARE_STENCIL_ARB = ((int)0x200D),
DRAW_TO_WINDOW_ARB = ((int)0x2001),
PBUFFER_HEIGHT_ARB = ((int)0x2035),
PIXEL_TYPE_ARB = ((int)0x2013),
COLOR_BITS_ARB = ((int)0x2014),
NEED_PALETTE_ARB = ((int)0x2004),
NEED_SYSTEM_PALETTE_ARB = ((int)0x2005),
SWAP_LAYER_BUFFERS_ARB = ((int)0x2006),
RED_SHIFT_ARB = ((int)0x2016),
SUPPORT_OPENGL_ARB = ((int)0x2010),
ACCUM_BLUE_BITS_ARB = ((int)0x2020),
}
public enum WGL_EXT_pbuffer
{
WGL_MAX_PBUFFER_HEIGHT_EXT = ((int)0x2030),
WGL_PBUFFER_LARGEST_EXT = ((int)0x2033),
WGL_PBUFFER_WIDTH_EXT = ((int)0x2034),
WGL_OPTIMAL_PBUFFER_HEIGHT_EXT = ((int)0x2032),
WGL_DRAW_TO_PBUFFER_EXT = ((int)0x202D),
WGL_PBUFFER_HEIGHT_EXT = ((int)0x2035),
WGL_MAX_PBUFFER_WIDTH_EXT = ((int)0x202F),
WGL_MAX_PBUFFER_PIXELS_EXT = ((int)0x202E),
WGL_OPTIMAL_PBUFFER_WIDTH_EXT = ((int)0x2031),
DRAW_TO_PBUFFER_EXT = ((int)0x202D),
OPTIMAL_PBUFFER_WIDTH_EXT = ((int)0x2031),
PBUFFER_LARGEST_EXT = ((int)0x2033),
PBUFFER_WIDTH_EXT = ((int)0x2034),
OPTIMAL_PBUFFER_HEIGHT_EXT = ((int)0x2032),
MAX_PBUFFER_HEIGHT_EXT = ((int)0x2030),
PBUFFER_HEIGHT_EXT = ((int)0x2035),
MAX_PBUFFER_WIDTH_EXT = ((int)0x202F),
MAX_PBUFFER_PIXELS_EXT = ((int)0x202E),
}
public enum WGL_ARB_pbuffer
{
WGL_PBUFFER_LARGEST_ARB = ((int)0x2033),
WGL_PBUFFER_HEIGHT_ARB = ((int)0x2035),
WGL_MAX_PBUFFER_WIDTH_ARB = ((int)0x202F),
WGL_TRANSPARENT_BLUE_VALUE_ARB = ((int)0x2039),
WGL_TRANSPARENT_INDEX_VALUE_ARB = ((int)0x203B),
WGL_DRAW_TO_PBUFFER_ARB = ((int)0x202D),
WGL_MAX_PBUFFER_PIXELS_ARB = ((int)0x202E),
WGL_TRANSPARENT_ALPHA_VALUE_ARB = ((int)0x203A),
WGL_PBUFFER_LOST_ARB = ((int)0x2036),
WGL_TRANSPARENT_GREEN_VALUE_ARB = ((int)0x2038),
WGL_MAX_PBUFFER_HEIGHT_ARB = ((int)0x2030),
WGL_PBUFFER_WIDTH_ARB = ((int)0x2034),
WGL_TRANSPARENT_RED_VALUE_ARB = ((int)0x2037),
MAX_PBUFFER_WIDTH_ARB = ((int)0x202F),
DRAW_TO_PBUFFER_ARB = ((int)0x202D),
PBUFFER_WIDTH_ARB = ((int)0x2034),
MAX_PBUFFER_HEIGHT_ARB = ((int)0x2030),
PBUFFER_HEIGHT_ARB = ((int)0x2035),
PBUFFER_LOST_ARB = ((int)0x2036),
PBUFFER_LARGEST_ARB = ((int)0x2033),
TRANSPARENT_BLUE_VALUE_ARB = ((int)0x2039),
TRANSPARENT_INDEX_VALUE_ARB = ((int)0x203B),
TRANSPARENT_ALPHA_VALUE_ARB = ((int)0x203A),
MAX_PBUFFER_PIXELS_ARB = ((int)0x202E),
TRANSPARENT_GREEN_VALUE_ARB = ((int)0x2038),
TRANSPARENT_RED_VALUE_ARB = ((int)0x2037),
}
public enum WGL_EXT_depth_float
{
WGL_DEPTH_FLOAT_EXT = ((int)0x2040),
DEPTH_FLOAT_EXT = ((int)0x2040),
}
public enum WGL_EXT_multisample
{
WGL_SAMPLE_BUFFERS_EXT = ((int)0x2041),
WGL_SAMPLES_EXT = ((int)0x2042),
SAMPLE_BUFFERS_EXT = ((int)0x2041),
SAMPLES_EXT = ((int)0x2042),
}
public enum WGL_ARB_multisample
{
WGL_SAMPLES_ARB = ((int)0x2042),
WGL_SAMPLE_BUFFERS_ARB = ((int)0x2041),
SAMPLE_BUFFERS_ARB = ((int)0x2041),
SAMPLES_ARB = ((int)0x2042),
}
public enum WGL_EXT_make_current_read
@ -181,309 +181,315 @@ namespace OpenTK.Platform.Windows
public enum WGL_I3D_genlock
{
WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D = ((int)0x2048),
WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D = ((int)0x2046),
WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D = ((int)0x204A),
WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D = ((int)0x2047),
WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D = ((int)0x2049),
WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D = ((int)0x2045),
WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D = ((int)0x204C),
WGL_GENLOCK_SOURCE_MULTIVIEW_I3D = ((int)0x2044),
WGL_GENLOCK_SOURCE_EDGE_RISING_I3D = ((int)0x204B),
GENLOCK_SOURCE_EDGE_BOTH_I3D = ((int)0x204C),
GENLOCK_SOURCE_EXTENAL_SYNC_I3D = ((int)0x2045),
GENLOCK_SOURCE_DIGITAL_FIELD_I3D = ((int)0x2049),
GENLOCK_SOURCE_EDGE_FALLING_I3D = ((int)0x204A),
GENLOCK_SOURCE_EDGE_RISING_I3D = ((int)0x204B),
GENLOCK_SOURCE_DIGITAL_SYNC_I3D = ((int)0x2048),
GENLOCK_SOURCE_EXTENAL_TTL_I3D = ((int)0x2047),
GENLOCK_SOURCE_MULTIVIEW_I3D = ((int)0x2044),
GENLOCK_SOURCE_EXTENAL_FIELD_I3D = ((int)0x2046),
}
public enum WGL_I3D_gamma
{
WGL_GAMMA_TABLE_SIZE_I3D = ((int)0x204E),
WGL_GAMMA_EXCLUDE_DESKTOP_I3D = ((int)0x204F),
GAMMA_TABLE_SIZE_I3D = ((int)0x204E),
GAMMA_EXCLUDE_DESKTOP_I3D = ((int)0x204F),
}
public enum WGL_I3D_digital_video_control
{
WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D = ((int)0x2053),
WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D = ((int)0x2051),
WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D = ((int)0x2050),
WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D = ((int)0x2052),
DIGITAL_VIDEO_GAMMA_CORRECTED_I3D = ((int)0x2053),
DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D = ((int)0x2050),
DIGITAL_VIDEO_CURSOR_INCLUDED_I3D = ((int)0x2052),
DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D = ((int)0x2051),
}
public enum WGL_3DFX_multisample
{
WGL_SAMPLES_3DFX = ((int)0x2061),
WGL_SAMPLE_BUFFERS_3DFX = ((int)0x2060),
SAMPLES_3DFX = ((int)0x2061),
SAMPLE_BUFFERS_3DFX = ((int)0x2060),
}
public enum WGL_ARB_render_texture
{
WGL_BACK_LEFT_ARB = ((int)0x2085),
WGL_AUX3_ARB = ((int)0x208A),
WGL_TEXTURE_RGB_ARB = ((int)0x2075),
WGL_TEXTURE_1D_ARB = ((int)0x2079),
WGL_BIND_TO_TEXTURE_RGBA_ARB = ((int)0x2071),
WGL_AUX5_ARB = ((int)0x208C),
WGL_MIPMAP_LEVEL_ARB = ((int)0x207B),
WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB = ((int)0x207E),
WGL_BIND_TO_TEXTURE_RGB_ARB = ((int)0x2070),
WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB = ((int)0x207F),
WGL_CUBE_MAP_FACE_ARB = ((int)0x207C),
WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB = ((int)0x2080),
WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB = ((int)0x2082),
WGL_AUX7_ARB = ((int)0x208E),
WGL_TEXTURE_RGBA_ARB = ((int)0x2076),
WGL_AUX2_ARB = ((int)0x2089),
WGL_TEXTURE_2D_ARB = ((int)0x207A),
WGL_AUX0_ARB = ((int)0x2087),
WGL_AUX9_ARB = ((int)0x2090),
WGL_FRONT_LEFT_ARB = ((int)0x2083),
WGL_AUX8_ARB = ((int)0x208F),
WGL_FRONT_RIGHT_ARB = ((int)0x2084),
WGL_AUX6_ARB = ((int)0x208D),
WGL_AUX1_ARB = ((int)0x2088),
WGL_NO_TEXTURE_ARB = ((int)0x2077),
WGL_BACK_RIGHT_ARB = ((int)0x2086),
WGL_AUX4_ARB = ((int)0x208B),
WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB = ((int)0x2081),
WGL_TEXTURE_FORMAT_ARB = ((int)0x2072),
WGL_TEXTURE_TARGET_ARB = ((int)0x2073),
WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB = ((int)0x207D),
WGL_TEXTURE_CUBE_MAP_ARB = ((int)0x2078),
WGL_MIPMAP_TEXTURE_ARB = ((int)0x2074),
CUBE_MAP_FACE_ARB = ((int)0x207C),
TEXTURE_CUBE_MAP_POSITIVE_Z_ARB = ((int)0x2081),
AUX0_ARB = ((int)0x2087),
TEXTURE_CUBE_MAP_ARB = ((int)0x2078),
TEXTURE_1D_ARB = ((int)0x2079),
AUX3_ARB = ((int)0x208A),
TEXTURE_CUBE_MAP_NEGATIVE_X_ARB = ((int)0x207E),
NO_TEXTURE_ARB = ((int)0x2077),
TEXTURE_CUBE_MAP_POSITIVE_Y_ARB = ((int)0x207F),
AUX1_ARB = ((int)0x2088),
BACK_LEFT_ARB = ((int)0x2085),
AUX7_ARB = ((int)0x208E),
FRONT_LEFT_ARB = ((int)0x2083),
TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB = ((int)0x2080),
BIND_TO_TEXTURE_RGB_ARB = ((int)0x2070),
AUX8_ARB = ((int)0x208F),
TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB = ((int)0x2082),
TEXTURE_CUBE_MAP_POSITIVE_X_ARB = ((int)0x207D),
BIND_TO_TEXTURE_RGBA_ARB = ((int)0x2071),
AUX6_ARB = ((int)0x208D),
TEXTURE_TARGET_ARB = ((int)0x2073),
AUX2_ARB = ((int)0x2089),
AUX5_ARB = ((int)0x208C),
TEXTURE_2D_ARB = ((int)0x207A),
AUX4_ARB = ((int)0x208B),
FRONT_RIGHT_ARB = ((int)0x2084),
TEXTURE_RGB_ARB = ((int)0x2075),
MIPMAP_TEXTURE_ARB = ((int)0x2074),
MIPMAP_LEVEL_ARB = ((int)0x207B),
TEXTURE_RGBA_ARB = ((int)0x2076),
AUX9_ARB = ((int)0x2090),
BACK_RIGHT_ARB = ((int)0x2086),
TEXTURE_FORMAT_ARB = ((int)0x2072),
}
public enum WGL_NV_render_texture_rectangle
{
WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV = ((int)0x20A1),
WGL_TEXTURE_RECTANGLE_NV = ((int)0x20A2),
WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV = ((int)0x20A0),
BIND_TO_TEXTURE_RECTANGLE_RGBA_NV = ((int)0x20A1),
TEXTURE_RECTANGLE_NV = ((int)0x20A2),
BIND_TO_TEXTURE_RECTANGLE_RGB_NV = ((int)0x20A0),
}
public enum WGL_NV_render_depth_texture
{
WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV = ((int)0x20A4),
WGL_DEPTH_TEXTURE_FORMAT_NV = ((int)0x20A5),
WGL_TEXTURE_DEPTH_COMPONENT_NV = ((int)0x20A6),
WGL_BIND_TO_TEXTURE_DEPTH_NV = ((int)0x20A3),
WGL_DEPTH_COMPONENT_NV = ((int)0x20A7),
BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV = ((int)0x20A4),
TEXTURE_DEPTH_COMPONENT_NV = ((int)0x20A6),
DEPTH_COMPONENT_NV = ((int)0x20A7),
DEPTH_TEXTURE_FORMAT_NV = ((int)0x20A5),
BIND_TO_TEXTURE_DEPTH_NV = ((int)0x20A3),
}
public enum WGL_NV_float_buffer
{
WGL_TEXTURE_FLOAT_RG_NV = ((int)0x20B6),
WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV = ((int)0x20B2),
WGL_TEXTURE_FLOAT_R_NV = ((int)0x20B5),
WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV = ((int)0x20B4),
WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV = ((int)0x20B3),
WGL_TEXTURE_FLOAT_RGB_NV = ((int)0x20B7),
WGL_FLOAT_COMPONENTS_NV = ((int)0x20B0),
WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV = ((int)0x20B1),
WGL_TEXTURE_FLOAT_RGBA_NV = ((int)0x20B8),
TEXTURE_FLOAT_RG_NV = ((int)0x20B6),
BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV = ((int)0x20B4),
FLOAT_COMPONENTS_NV = ((int)0x20B0),
BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV = ((int)0x20B2),
TEXTURE_FLOAT_RGB_NV = ((int)0x20B7),
BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV = ((int)0x20B3),
TEXTURE_FLOAT_R_NV = ((int)0x20B5),
TEXTURE_FLOAT_RGBA_NV = ((int)0x20B8),
BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV = ((int)0x20B1),
}
public enum WGL_ARB_pixel_format_float
{
WGL_TYPE_RGBA_FLOAT_ARB = ((int)0x21A0),
TYPE_RGBA_FLOAT_ARB = ((int)0x21A0),
}
public enum WGL_ATI_pixel_format_float
{
WGL_TYPE_RGBA_FLOAT_ATI = ((int)0x21A0),
TYPE_RGBA_FLOAT_ATI = ((int)0x21A0),
}
public enum WGL_font_type
{
FONT_LINES = ((int)0),
}
public enum All
{
WGL_SWAP_METHOD_EXT = ((int)0x2007),
WGL_MIPMAP_TEXTURE_ARB = ((int)0x2074),
WGL_AUX4_ARB = ((int)0x208B),
WGL_SAMPLE_BUFFERS_EXT = ((int)0x2041),
WGL_BIND_TO_TEXTURE_RGB_ARB = ((int)0x2070),
WGL_AUX_BUFFERS_EXT = ((int)0x2024),
WGL_AUX0_ARB = ((int)0x2087),
WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D = ((int)0x204A),
WGL_ACCUM_ALPHA_BITS_EXT = ((int)0x2021),
WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV = ((int)0x20B1),
WGL_IMAGE_BUFFER_LOCK_I3D = ((int)0x00000002),
WGL_BLUE_SHIFT_EXT = ((int)0x201A),
WGL_NEED_SYSTEM_PALETTE_EXT = ((int)0x2005),
WGL_SHARE_ACCUM_EXT = ((int)0x200E),
WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB = ((int)0x207E),
WGL_DRAW_TO_PBUFFER_ARB = ((int)0x202D),
WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D = ((int)0x2053),
WGL_TEXTURE_CUBE_MAP_ARB = ((int)0x2078),
WGL_TYPE_RGBA_FLOAT_ARB = ((int)0x21A0),
WGL_FULL_ACCELERATION_EXT = ((int)0x2027),
WGL_ACCUM_GREEN_BITS_EXT = ((int)0x201F),
WGL_BACK_COLOR_BUFFER_BIT_ARB = ((int)0x00000002),
WGL_ACCUM_GREEN_BITS_ARB = ((int)0x201F),
WGL_MAX_PBUFFER_WIDTH_EXT = ((int)0x202F),
WGL_ACCUM_RED_BITS_EXT = ((int)0x201E),
WGL_AUX9_ARB = ((int)0x2090),
WGL_TRANSPARENT_EXT = ((int)0x200A),
WGL_ACCUM_ALPHA_BITS_ARB = ((int)0x2021),
WGL_GENERIC_ACCELERATION_EXT = ((int)0x2026),
WGL_AUX2_ARB = ((int)0x2089),
WGL_PIXEL_TYPE_EXT = ((int)0x2013),
WGL_NUMBER_PIXEL_FORMATS_EXT = ((int)0x2000),
WGL_ACCELERATION_ARB = ((int)0x2003),
WGL_IMAGE_BUFFER_MIN_ACCESS_I3D = ((int)0x00000001),
WGL_DOUBLE_BUFFER_EXT = ((int)0x2011),
WGL_NEED_PALETTE_EXT = ((int)0x2004),
WGL_TEXTURE_FLOAT_RG_NV = ((int)0x20B6),
WGL_DEPTH_FLOAT_EXT = ((int)0x2040),
WGL_BLUE_BITS_ARB = ((int)0x2019),
WGL_ACCUM_BITS_EXT = ((int)0x201D),
WGL_MAX_PBUFFER_WIDTH_ARB = ((int)0x202F),
WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB = ((int)0x2080),
WGL_NUMBER_OVERLAYS_ARB = ((int)0x2008),
WGL_TEXTURE_RGB_ARB = ((int)0x2075),
WGL_SUPPORT_GDI_EXT = ((int)0x200F),
WGL_PBUFFER_HEIGHT_EXT = ((int)0x2035),
WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV = ((int)0x20A4),
WGL_SAMPLE_BUFFERS_ARB = ((int)0x2041),
WGL_TRANSPARENT_ALPHA_VALUE_ARB = ((int)0x203A),
WGL_NEED_PALETTE_ARB = ((int)0x2004),
WGL_GREEN_SHIFT_ARB = ((int)0x2018),
WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV = ((int)0x20A1),
WGL_TYPE_COLORINDEX_EXT = ((int)0x202C),
WGL_SHARE_STENCIL_ARB = ((int)0x200D),
WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D = ((int)0x2048),
WGL_SHARE_DEPTH_EXT = ((int)0x200C),
WGL_NO_ACCELERATION_EXT = ((int)0x2025),
WGL_BLUE_SHIFT_ARB = ((int)0x201A),
WGL_SUPPORT_GDI_ARB = ((int)0x200F),
WGL_NO_TEXTURE_ARB = ((int)0x2077),
WGL_TEXTURE_FLOAT_RGBA_NV = ((int)0x20B8),
WGL_DEPTH_TEXTURE_FORMAT_NV = ((int)0x20A5),
WGL_TRANSPARENT_BLUE_VALUE_ARB = ((int)0x2039),
WGL_DEPTH_BUFFER_BIT_ARB = ((int)0x00000004),
WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB = ((int)0x2082),
WGL_SWAP_EXCHANGE_ARB = ((int)0x2028),
WGL_TRANSPARENT_RED_VALUE_ARB = ((int)0x2037),
WGL_SWAP_COPY_ARB = ((int)0x2029),
WGL_GREEN_SHIFT_EXT = ((int)0x2018),
WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB = ((int)0x2081),
WGL_TYPE_RGBA_EXT = ((int)0x202B),
WGL_TYPE_RGBA_FLOAT_ATI = ((int)0x21A0),
WGL_NUMBER_PIXEL_FORMATS_ARB = ((int)0x2000),
WGL_TEXTURE_RGBA_ARB = ((int)0x2076),
WGL_SWAP_COPY_EXT = ((int)0x2029),
WGL_NEED_SYSTEM_PALETTE_ARB = ((int)0x2005),
WGL_TEXTURE_FLOAT_RGB_NV = ((int)0x20B7),
WGL_OPTIMAL_PBUFFER_HEIGHT_EXT = ((int)0x2032),
WGL_SWAP_UNDEFINED_ARB = ((int)0x202A),
WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D = ((int)0x2049),
WGL_GENLOCK_SOURCE_EDGE_RISING_I3D = ((int)0x204B),
WGL_SWAP_LAYER_BUFFERS_EXT = ((int)0x2006),
WGL_SWAP_UNDEFINED_EXT = ((int)0x202A),
WGL_FULL_ACCELERATION_ARB = ((int)0x2027),
WGL_NUMBER_UNDERLAYS_ARB = ((int)0x2009),
WGL_BIND_TO_TEXTURE_RGBA_ARB = ((int)0x2071),
WGL_TRANSPARENT_GREEN_VALUE_ARB = ((int)0x2038),
WGL_PIXEL_TYPE_ARB = ((int)0x2013),
WGL_NO_ACCELERATION_ARB = ((int)0x2025),
WGL_NUMBER_OVERLAYS_EXT = ((int)0x2008),
WGL_DEPTH_BITS_EXT = ((int)0x2022),
WGL_AUX3_ARB = ((int)0x208A),
WGL_DEPTH_BITS_ARB = ((int)0x2022),
WGL_GENERIC_ACCELERATION_ARB = ((int)0x2026),
WGL_TYPE_RGBA_ARB = ((int)0x202B),
WGL_DRAW_TO_WINDOW_EXT = ((int)0x2001),
WGL_TEXTURE_2D_ARB = ((int)0x207A),
WGL_STENCIL_BUFFER_BIT_ARB = ((int)0x00000008),
WGL_SWAP_EXCHANGE_EXT = ((int)0x2028),
WGL_SHARE_STENCIL_EXT = ((int)0x200D),
WGL_STEREO_ARB = ((int)0x2012),
WGL_SHARE_ACCUM_ARB = ((int)0x200E),
WGL_TEXTURE_RECTANGLE_NV = ((int)0x20A2),
WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV = ((int)0x20B3),
WGL_STENCIL_BITS_EXT = ((int)0x2023),
WGL_MIPMAP_LEVEL_ARB = ((int)0x207B),
WGL_DRAW_TO_WINDOW_ARB = ((int)0x2001),
WGL_AUX5_ARB = ((int)0x208C),
WGL_DEPTH_COMPONENT_NV = ((int)0x20A7),
WGL_AUX1_ARB = ((int)0x2088),
WGL_TEXTURE_DEPTH_COMPONENT_NV = ((int)0x20A6),
WGL_FRONT_LEFT_ARB = ((int)0x2083),
WGL_MAX_PBUFFER_HEIGHT_EXT = ((int)0x2030),
WGL_RED_BITS_EXT = ((int)0x2015),
WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D = ((int)0x2047),
WGL_RED_SHIFT_ARB = ((int)0x2016),
WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB = ((int)0x207F),
WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D = ((int)0x2051),
WGL_TRANSPARENT_INDEX_VALUE_ARB = ((int)0x203B),
WGL_ALPHA_BITS_EXT = ((int)0x201B),
WGL_TRANSPARENT_VALUE_EXT = ((int)0x200B),
WGL_BIND_TO_TEXTURE_DEPTH_NV = ((int)0x20A3),
WGL_TEXTURE_1D_ARB = ((int)0x2079),
WGL_MAX_PBUFFER_PIXELS_ARB = ((int)0x202E),
WGL_SUPPORT_OPENGL_ARB = ((int)0x2010),
WGL_TEXTURE_TARGET_ARB = ((int)0x2073),
WGL_SAMPLE_BUFFERS_3DFX = ((int)0x2060),
WGL_TEXTURE_FLOAT_R_NV = ((int)0x20B5),
WGL_COLOR_BITS_EXT = ((int)0x2014),
WGL_BACK_RIGHT_ARB = ((int)0x2086),
WGL_PBUFFER_HEIGHT_ARB = ((int)0x2035),
WGL_ACCUM_BLUE_BITS_ARB = ((int)0x2020),
WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB = ((int)0x207D),
WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D = ((int)0x2045),
WGL_SWAP_METHOD_ARB = ((int)0x2007),
WGL_AUX8_ARB = ((int)0x208F),
WGL_TYPE_COLORINDEX_ARB = ((int)0x202C),
WGL_DRAW_TO_PBUFFER_EXT = ((int)0x202D),
WGL_CUBE_MAP_FACE_ARB = ((int)0x207C),
WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D = ((int)0x204C),
WGL_SAMPLES_3DFX = ((int)0x2061),
WGL_MAX_PBUFFER_PIXELS_EXT = ((int)0x202E),
WGL_DOUBLE_BUFFER_ARB = ((int)0x2011),
WGL_STEREO_EXT = ((int)0x2012),
WGL_RED_SHIFT_EXT = ((int)0x2016),
WGL_ALPHA_BITS_ARB = ((int)0x201B),
WGL_COLOR_BITS_ARB = ((int)0x2014),
WGL_GAMMA_TABLE_SIZE_I3D = ((int)0x204E),
WGL_AUX_BUFFERS_ARB = ((int)0x2024),
GENLOCK_SOURCE_EXTENAL_SYNC_I3D = ((int)0x2045),
NUMBER_PIXEL_FORMATS_EXT = ((int)0x2000),
SAMPLES_EXT = ((int)0x2042),
TYPE_RGBA_FLOAT_ARB = ((int)0x21A0),
NEED_SYSTEM_PALETTE_ARB = ((int)0x2005),
TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB = ((int)0x2082),
TEXTURE_1D_ARB = ((int)0x2079),
ACCELERATION_ARB = ((int)0x2003),
STEREO_ARB = ((int)0x2012),
SHARE_ACCUM_ARB = ((int)0x200E),
MAX_PBUFFER_PIXELS_ARB = ((int)0x202E),
BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV = ((int)0x20B3),
DEPTH_COMPONENT_NV = ((int)0x20A7),
GAMMA_TABLE_SIZE_I3D = ((int)0x204E),
GENERIC_ACCELERATION_ARB = ((int)0x2026),
NEED_SYSTEM_PALETTE_EXT = ((int)0x2005),
MAX_PBUFFER_WIDTH_EXT = ((int)0x202F),
TEXTURE_CUBE_MAP_ARB = ((int)0x2078),
TEXTURE_2D_ARB = ((int)0x207A),
TEXTURE_DEPTH_COMPONENT_NV = ((int)0x20A6),
MIPMAP_LEVEL_ARB = ((int)0x207B),
ALPHA_BITS_ARB = ((int)0x201B),
TEXTURE_FLOAT_R_NV = ((int)0x20B5),
PBUFFER_WIDTH_EXT = ((int)0x2034),
BACK_LEFT_ARB = ((int)0x2085),
MAX_PBUFFER_HEIGHT_EXT = ((int)0x2030),
FULL_ACCELERATION_ARB = ((int)0x2027),
TYPE_RGBA_FLOAT_ATI = ((int)0x21A0),
SHARE_ACCUM_EXT = ((int)0x200E),
FRONT_RIGHT_ARB = ((int)0x2084),
ACCUM_BLUE_BITS_ARB = ((int)0x2020),
BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV = ((int)0x20B1),
TRANSPARENT_BLUE_VALUE_ARB = ((int)0x2039),
SWAP_LAYER_BUFFERS_EXT = ((int)0x2006),
AUX8_ARB = ((int)0x208F),
RED_BITS_EXT = ((int)0x2015),
STENCIL_BITS_ARB = ((int)0x2023),
NUMBER_OVERLAYS_ARB = ((int)0x2008),
AUX4_ARB = ((int)0x208B),
STENCIL_BUFFER_BIT_ARB = ((int)0x00000008),
GREEN_BITS_ARB = ((int)0x2017),
ACCUM_GREEN_BITS_ARB = ((int)0x201F),
FULL_ACCELERATION_EXT = ((int)0x2027),
TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB = ((int)0x2080),
OPTIMAL_PBUFFER_HEIGHT_EXT = ((int)0x2032),
AUX_BUFFERS_ARB = ((int)0x2024),
DRAW_TO_BITMAP_EXT = ((int)0x2002),
AUX7_ARB = ((int)0x208E),
SUPPORT_OPENGL_ARB = ((int)0x2010),
TEXTURE_CUBE_MAP_NEGATIVE_X_ARB = ((int)0x207E),
PBUFFER_LARGEST_EXT = ((int)0x2033),
GREEN_SHIFT_EXT = ((int)0x2018),
BLUE_BITS_EXT = ((int)0x2019),
ACCUM_BITS_ARB = ((int)0x201D),
DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D = ((int)0x2050),
ACCUM_BITS_EXT = ((int)0x201D),
SHARE_DEPTH_EXT = ((int)0x200C),
STEREO_EXT = ((int)0x2012),
GREEN_SHIFT_ARB = ((int)0x2018),
SWAP_EXCHANGE_ARB = ((int)0x2028),
GENLOCK_SOURCE_EXTENAL_TTL_I3D = ((int)0x2047),
SUPPORT_GDI_EXT = ((int)0x200F),
PBUFFER_HEIGHT_ARB = ((int)0x2035),
TRANSPARENT_GREEN_VALUE_ARB = ((int)0x2038),
AUX6_ARB = ((int)0x208D),
FRONT_LEFT_ARB = ((int)0x2083),
NUMBER_UNDERLAYS_ARB = ((int)0x2009),
AUX2_ARB = ((int)0x2089),
SAMPLE_BUFFERS_ARB = ((int)0x2041),
RED_SHIFT_ARB = ((int)0x2016),
MAX_PBUFFER_HEIGHT_ARB = ((int)0x2030),
DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D = ((int)0x2051),
NUMBER_UNDERLAYS_EXT = ((int)0x2009),
TRANSPARENT_ALPHA_VALUE_ARB = ((int)0x203A),
SAMPLE_BUFFERS_3DFX = ((int)0x2060),
IMAGE_BUFFER_LOCK_I3D = ((int)0x00000002),
TRANSPARENT_RED_VALUE_ARB = ((int)0x2037),
ACCUM_ALPHA_BITS_ARB = ((int)0x2021),
SWAP_EXCHANGE_EXT = ((int)0x2028),
DEPTH_BUFFER_BIT_ARB = ((int)0x00000004),
ALPHA_BITS_EXT = ((int)0x201B),
ACCELERATION_EXT = ((int)0x2003),
GENLOCK_SOURCE_DIGITAL_SYNC_I3D = ((int)0x2048),
DOUBLE_BUFFER_EXT = ((int)0x2011),
BIND_TO_TEXTURE_RGBA_ARB = ((int)0x2071),
SWAP_COPY_EXT = ((int)0x2029),
FRONT_COLOR_BUFFER_BIT_ARB = ((int)0x00000001),
BIND_TO_TEXTURE_RECTANGLE_RGB_NV = ((int)0x20A0),
TYPE_COLORINDEX_EXT = ((int)0x202C),
TEXTURE_CUBE_MAP_POSITIVE_Y_ARB = ((int)0x207F),
SAMPLE_BUFFERS_EXT = ((int)0x2041),
IMAGE_BUFFER_MIN_ACCESS_I3D = ((int)0x00000001),
GENLOCK_SOURCE_EDGE_FALLING_I3D = ((int)0x204A),
BIND_TO_TEXTURE_RGB_ARB = ((int)0x2070),
DRAW_TO_WINDOW_ARB = ((int)0x2001),
AUX5_ARB = ((int)0x208C),
DRAW_TO_PBUFFER_EXT = ((int)0x202D),
GENLOCK_SOURCE_DIGITAL_FIELD_I3D = ((int)0x2049),
DRAW_TO_WINDOW_EXT = ((int)0x2001),
DEPTH_BITS_EXT = ((int)0x2022),
SHARE_STENCIL_ARB = ((int)0x200D),
TYPE_RGBA_EXT = ((int)0x202B),
DEPTH_BITS_ARB = ((int)0x2022),
TRANSPARENT_EXT = ((int)0x200A),
MIPMAP_TEXTURE_ARB = ((int)0x2074),
GENLOCK_SOURCE_EXTENAL_FIELD_I3D = ((int)0x2046),
SWAP_LAYER_BUFFERS_ARB = ((int)0x2006),
TEXTURE_TARGET_ARB = ((int)0x2073),
PBUFFER_HEIGHT_EXT = ((int)0x2035),
TRANSPARENT_ARB = ((int)0x200A),
BIND_TO_TEXTURE_DEPTH_NV = ((int)0x20A3),
SWAP_COPY_ARB = ((int)0x2029),
NO_ACCELERATION_EXT = ((int)0x2025),
TEXTURE_RECTANGLE_NV = ((int)0x20A2),
SAMPLES_ARB = ((int)0x2042),
BLUE_SHIFT_EXT = ((int)0x201A),
BLUE_BITS_ARB = ((int)0x2019),
BIND_TO_TEXTURE_RECTANGLE_RGBA_NV = ((int)0x20A1),
DRAW_TO_BITMAP_ARB = ((int)0x2002),
TEXTURE_CUBE_MAP_POSITIVE_X_ARB = ((int)0x207D),
NO_ACCELERATION_ARB = ((int)0x2025),
PIXEL_TYPE_ARB = ((int)0x2013),
ACCUM_ALPHA_BITS_EXT = ((int)0x2021),
NEED_PALETTE_EXT = ((int)0x2004),
BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV = ((int)0x20A4),
BACK_COLOR_BUFFER_BIT_ARB = ((int)0x00000002),
DOUBLE_BUFFER_ARB = ((int)0x2011),
NEED_PALETTE_ARB = ((int)0x2004),
ALPHA_SHIFT_EXT = ((int)0x201C),
NO_TEXTURE_ARB = ((int)0x2077),
TEXTURE_FLOAT_RG_NV = ((int)0x20B6),
SHARE_STENCIL_EXT = ((int)0x200D),
TEXTURE_FLOAT_RGBA_NV = ((int)0x20B8),
PBUFFER_LARGEST_ARB = ((int)0x2033),
DIGITAL_VIDEO_CURSOR_INCLUDED_I3D = ((int)0x2052),
TYPE_RGBA_ARB = ((int)0x202B),
ACCUM_RED_BITS_ARB = ((int)0x201E),
GREEN_BITS_EXT = ((int)0x2017),
GENLOCK_SOURCE_MULTIVIEW_I3D = ((int)0x2044),
GENERIC_ACCELERATION_EXT = ((int)0x2026),
FONT_LINES = ((int)0),
ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB = ((int)0x2054),
WGL_FRONT_COLOR_BUFFER_BIT_ARB = ((int)0x00000001),
WGL_SAMPLES_EXT = ((int)0x2042),
WGL_ALPHA_SHIFT_EXT = ((int)0x201C),
WGL_ACCELERATION_EXT = ((int)0x2003),
WGL_AUX6_ARB = ((int)0x208D),
WGL_FRONT_RIGHT_ARB = ((int)0x2084),
WGL_PBUFFER_WIDTH_ARB = ((int)0x2034),
WGL_PBUFFER_LARGEST_ARB = ((int)0x2033),
WGL_NUMBER_UNDERLAYS_EXT = ((int)0x2009),
WGL_ACCUM_BITS_ARB = ((int)0x201D),
WGL_STENCIL_BITS_ARB = ((int)0x2023),
WGL_ACCUM_BLUE_BITS_EXT = ((int)0x2020),
WGL_MAX_PBUFFER_HEIGHT_ARB = ((int)0x2030),
WGL_TEXTURE_FORMAT_ARB = ((int)0x2072),
WGL_ACCUM_RED_BITS_ARB = ((int)0x201E),
WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV = ((int)0x20B4),
WGL_FLOAT_COMPONENTS_NV = ((int)0x20B0),
WGL_TRANSPARENT_ARB = ((int)0x200A),
WGL_RED_BITS_ARB = ((int)0x2015),
WGL_GREEN_BITS_ARB = ((int)0x2017),
WGL_GENLOCK_SOURCE_MULTIVIEW_I3D = ((int)0x2044),
WGL_BLUE_BITS_EXT = ((int)0x2019),
WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV = ((int)0x20B2),
WGL_GREEN_BITS_EXT = ((int)0x2017),
WGL_SHARE_DEPTH_ARB = ((int)0x200C),
WGL_ALPHA_SHIFT_ARB = ((int)0x201C),
WGL_PBUFFER_WIDTH_EXT = ((int)0x2034),
WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV = ((int)0x20A0),
WGL_SWAP_LAYER_BUFFERS_ARB = ((int)0x2006),
SWAP_METHOD_EXT = ((int)0x2007),
PIXEL_TYPE_EXT = ((int)0x2013),
TEXTURE_FLOAT_RGB_NV = ((int)0x20B7),
NUMBER_OVERLAYS_EXT = ((int)0x2008),
GAMMA_EXCLUDE_DESKTOP_I3D = ((int)0x204F),
COLOR_BITS_EXT = ((int)0x2014),
DEPTH_FLOAT_EXT = ((int)0x2040),
BACK_RIGHT_ARB = ((int)0x2086),
MAX_PBUFFER_WIDTH_ARB = ((int)0x202F),
OPTIMAL_PBUFFER_WIDTH_EXT = ((int)0x2031),
AUX1_ARB = ((int)0x2088),
COLOR_BITS_ARB = ((int)0x2014),
ACCUM_BLUE_BITS_EXT = ((int)0x2020),
TEXTURE_RGBA_ARB = ((int)0x2076),
PBUFFER_LOST_ARB = ((int)0x2036),
GENLOCK_SOURCE_EDGE_RISING_I3D = ((int)0x204B),
AUX9_ARB = ((int)0x2090),
NUMBER_PIXEL_FORMATS_ARB = ((int)0x2000),
SWAP_METHOD_ARB = ((int)0x2007),
RED_SHIFT_EXT = ((int)0x2016),
MAX_PBUFFER_PIXELS_EXT = ((int)0x202E),
AUX0_ARB = ((int)0x2087),
TRANSPARENT_VALUE_EXT = ((int)0x200B),
FLOAT_COMPONENTS_NV = ((int)0x20B0),
BLUE_SHIFT_ARB = ((int)0x201A),
TEXTURE_RGB_ARB = ((int)0x2075),
BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV = ((int)0x20B4),
ACCUM_GREEN_BITS_EXT = ((int)0x201F),
ERROR_INVALID_PIXEL_TYPE_ARB = ((int)0x2043),
WGL_AUX7_ARB = ((int)0x208E),
WGL_PBUFFER_LOST_ARB = ((int)0x2036),
DIGITAL_VIDEO_GAMMA_CORRECTED_I3D = ((int)0x2053),
TEXTURE_CUBE_MAP_POSITIVE_Z_ARB = ((int)0x2081),
AUX_BUFFERS_EXT = ((int)0x2024),
CUBE_MAP_FACE_ARB = ((int)0x207C),
TYPE_COLORINDEX_ARB = ((int)0x202C),
ERROR_INVALID_PIXEL_TYPE_EXT = ((int)0x2043),
WGL_SAMPLES_ARB = ((int)0x2042),
WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D = ((int)0x2046),
WGL_GAMMA_EXCLUDE_DESKTOP_I3D = ((int)0x204F),
WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D = ((int)0x2052),
WGL_PBUFFER_LARGEST_EXT = ((int)0x2033),
WGL_DRAW_TO_BITMAP_EXT = ((int)0x2002),
WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D = ((int)0x2050),
WGL_OPTIMAL_PBUFFER_WIDTH_EXT = ((int)0x2031),
WGL_DRAW_TO_BITMAP_ARB = ((int)0x2002),
WGL_BACK_LEFT_ARB = ((int)0x2085),
WGL_SUPPORT_OPENGL_EXT = ((int)0x2010),
AUX3_ARB = ((int)0x208A),
SHARE_DEPTH_ARB = ((int)0x200C),
SAMPLES_3DFX = ((int)0x2061),
ALPHA_SHIFT_ARB = ((int)0x201C),
GENLOCK_SOURCE_EDGE_BOTH_I3D = ((int)0x204C),
SUPPORT_OPENGL_EXT = ((int)0x2010),
SWAP_UNDEFINED_ARB = ((int)0x202A),
RED_BITS_ARB = ((int)0x2015),
STENCIL_BITS_EXT = ((int)0x2023),
DEPTH_TEXTURE_FORMAT_NV = ((int)0x20A5),
ACCUM_RED_BITS_EXT = ((int)0x201E),
PBUFFER_WIDTH_ARB = ((int)0x2034),
SWAP_UNDEFINED_EXT = ((int)0x202A),
DRAW_TO_PBUFFER_ARB = ((int)0x202D),
BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV = ((int)0x20B2),
TEXTURE_FORMAT_ARB = ((int)0x2072),
TRANSPARENT_INDEX_VALUE_ARB = ((int)0x203B),
SUPPORT_GDI_ARB = ((int)0x200F),
}
public enum WGL_ARB_extensions_string
@ -492,8 +498,8 @@ namespace OpenTK.Platform.Windows
public enum WGL_I3D_image_buffer
{
WGL_IMAGE_BUFFER_MIN_ACCESS_I3D = ((int)0x00000001),
WGL_IMAGE_BUFFER_LOCK_I3D = ((int)0x00000002),
IMAGE_BUFFER_LOCK_I3D = ((int)0x00000002),
IMAGE_BUFFER_MIN_ACCESS_I3D = ((int)0x00000001),
}
public enum WGL_I3D_swap_frame_lock

View file

@ -1,9 +1,9 @@
#region --- License ---
#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*
* Date: 12/8/2007
* Time: 6:43 μμ
* Time: 6:43 ìì
*/
#endregion
@ -102,6 +102,21 @@ namespace OpenTK.Platform.Windows
return f.GetValue(null) != null;
}
/*
/// <summary>
/// Checks if an extension is supported by the given context.
/// </summary>
/// <param name="deviceContext">The device context to check.</param>
/// <param name="ext">The extension to check.</param>
/// <returns>True if the extension is supported by the given context, false otherwise</returns>
public static bool SupportsExtensionARB(IntPtr deviceContext, string ext)
{
string extension_string = Wgl.ARB.GetExtensionsString(deviceContext);
string[] extensions = extension_string.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
Array.Sort(extensions);
return Array.BinarySearch(extensions, ext) != -1;
}
*/
}
}

View file

@ -24,44 +24,32 @@ namespace OpenTK.Platform.Windows
static private readonly string opengl32Name = "OPENGL32.DLL";
private IntPtr windowHandle;
private DisplayMode mode;
private bool disposed;
#region --- Contructors ---
public WinGLContext(IntPtr windowHandle)
: this(windowHandle, new DisplayMode(640, 480, new ColorDepth(32), 16, 0, 0, 2, false, false, false, 0.0f))
public WinGLContext()
: this(new DisplayMode(640, 480, new ColorDepth(32), 16, 0, 0, 2, false, false, false, 0.0f))
{
}
public WinGLContext(IntPtr windowHandle, DisplayMode mode)
public WinGLContext(DisplayMode mode)
{
Trace.WriteLine(String.Format("Creating opengl context (driver: {0})", this.ToString()));
Trace.Indent();
this.windowHandle = windowHandle;
Trace.WriteLine(String.Format("Window handle: {0}", windowHandle));
PrepareContext(mode);
Trace.Unindent();
this.mode = mode;
}
#endregion
public void CreateContext()
{
Trace.Write("Creating render context... ");
// Do not rely on OpenTK.Platform.Windows.Wgl - the context is not ready yet,
// and Wgl extensions will fail to load.
//renderContext = Wgl.CreateContext(deviceContext);
renderContext = Wgl.Imports.CreateContext(deviceContext);
Trace.WriteLine(String.Format("done! (id: {0})", renderContext));
Wgl.Imports.MakeCurrent(deviceContext, renderContext);
Wgl.LoadAll();
}
public void PrepareContext(DisplayMode mode)
#region public void PrepareContext(IntPtr handle)
public void PrepareContext(IntPtr handle)
{
this.windowHandle = handle;
Debug.WriteLine(String.Format("OpenGL context is bound to handle: {0}", windowHandle));
// Dynamically load the OpenGL32.dll in order to use the extension loading capabilities of Wgl.
if (opengl32Handle == IntPtr.Zero)
{
@ -77,20 +65,33 @@ namespace OpenTK.Platform.Windows
)
);
}
Trace.WriteLine(String.Format("Loaded opengl32.dll: {0}", opengl32Handle));
Debug.WriteLine(String.Format("Loaded opengl32.dll: {0}", opengl32Handle));
}
deviceContext = API.GetDC(windowHandle);
Trace.WriteLine(String.Format("Device context: {0}", deviceContext));
Debug.WriteLine(String.Format("Device context: {0}", deviceContext));
Trace.Write("Setting pixel format... ");
Debug.Write("Setting pixel format... ");
API.PixelFormatDescriptor pixelFormat = new API.PixelFormatDescriptor();
pixelFormat.Size = API.PixelFormatDescriptorSize;
pixelFormat.Version = API.PixelFormatDescriptorVersion;
pixelFormat.Flags =
API.PixelFormatDescriptorFlags.SUPPORT_OPENGL |
API.PixelFormatDescriptorFlags.DRAW_TO_WINDOW;
pixelFormat.ColorBits = (byte)(mode.Color.Red + mode.Color.Green + mode.Color.Blue);
pixelFormat.RedBits = (byte)mode.Color.Red;
pixelFormat.GreenBits = (byte)mode.Color.Green;
pixelFormat.BlueBits = (byte)mode.Color.Blue;
pixelFormat.AlphaBits = (byte)mode.Color.Alpha;
if (mode.Color.IsIndexed)
{
pixelFormat.PixelType = API.PixelType.INDEXED;
}
else
{
pixelFormat.PixelType = API.PixelType.RGBA;
pixelFormat.RedBits = (byte)mode.Color.Red;
pixelFormat.GreenBits = (byte)mode.Color.Green;
pixelFormat.BlueBits = (byte)mode.Color.Blue;
pixelFormat.AlphaBits = (byte)mode.Color.Alpha;
}
/*
if (accum != null)
{
@ -120,19 +121,55 @@ namespace OpenTK.Platform.Windows
}
// TODO: More elaborate mode setting, using DescribePixelFormat.
/*
unsafe
{
int pixel = Wgl.Imports.ChoosePixelFormat(deviceContext, &pixelFormat);
int pixel = API.ChoosePixelFormat(deviceContext, pixelFormat);
if (pixel == 0)
{
throw new ApplicationException("The requested pixel format is not supported by the hardware configuration.");
}
Wgl.Imports.SetPixelFormat(deviceContext, pixel, &pixelFormat);
Debug.WriteLine(String.Format("done! (format: {0})", pixel));
}
*/
int pixel = API.ChoosePixelFormat(deviceContext, ref pixelFormat);
if (pixel == 0)
{
throw new ApplicationException("The requested pixel format is not supported by the hardware configuration.");
}
API.SetPixelFormat(deviceContext, pixel, ref pixelFormat);
API.SetPixelFormat(deviceContext, pixel, pixelFormat);
Trace.WriteLine(String.Format("done! (format: {0})", pixel));
Debug.Print("done! (format: {0})", pixel);
}
#endregion
#region public void CreateContext()
public void CreateContext()
{
Debug.Write("Creating render context... ");
// Do not rely on OpenTK.Platform.Windows.Wgl - the context is not ready yet,
// and Wgl extensions will fail to load.
renderContext = Wgl.Imports.CreateContext(deviceContext);
if (renderContext != IntPtr.Zero)
{
Debug.WriteLine(String.Format("done! (id: {0})", renderContext));
}
else
{
throw new ApplicationException("Could not create opengl Rendering Context.");
}
Wgl.Imports.MakeCurrent(deviceContext, renderContext);
Wgl.LoadAll();
}
#endregion
#region --- IGLContext Members ---
#region public void SwapBuffers()
@ -148,7 +185,7 @@ namespace OpenTK.Platform.Windows
public IntPtr GetAddress(string function_string)
{
return Wgl.GetProcAddress(function_string);
return Wgl.Imports.GetProcAddress(function_string);
}
#endregion
@ -157,7 +194,7 @@ namespace OpenTK.Platform.Windows
public void MakeCurrent()
{
Wgl.MakeCurrent(deviceContext, renderContext);
Wgl.Imports.MakeCurrent(deviceContext, renderContext);
}
#endregion
@ -219,6 +256,7 @@ namespace OpenTK.Platform.Windows
public void Dispose()
{
Debug.Print("Manually disposing WinGLContext {0}.", this.renderContext);
Dispose(true);
GC.SuppressFinalize(this);
}
@ -228,10 +266,7 @@ namespace OpenTK.Platform.Windows
if (!disposed)
{
// Clean unmanaged resources here:
Wgl.MakeCurrent(deviceContext, renderContext);
Wgl.DeleteContext(renderContext);
API.ReleaseDC(windowHandle, deviceContext);
API.FreeLibrary(opengl32Handle);
ReleaseResources();
if (calledManually)
{
@ -252,7 +287,8 @@ namespace OpenTK.Platform.Windows
{
if (renderContext != IntPtr.Zero)
{
if (!Wgl.DeleteContext(renderContext))
Wgl.Imports.MakeCurrent(IntPtr.Zero, IntPtr.Zero);
if (!Wgl.Imports.DeleteContext(renderContext))
{
throw new ApplicationException(
"Could not destroy the OpenGL render context. Error: " + Marshal.GetLastWin32Error()
@ -261,6 +297,15 @@ namespace OpenTK.Platform.Windows
renderContext = IntPtr.Zero;
}
if (deviceContext != IntPtr.Zero)
{
if (!API.ReleaseDC(windowHandle, deviceContext))
{
throw new ApplicationException(
"Could not release device context. Error: " + Marshal.GetLastWin32Error());
}
}
if (opengl32Handle != IntPtr.Zero)
{
if (!API.FreeLibrary(opengl32Handle))

View file

@ -11,6 +11,7 @@ using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
#endregion
@ -21,39 +22,52 @@ namespace OpenTK.Platform.Windows
private WinGLContext glContext;
private bool fullscreen;
private ResizeEventArgs resizeEventArgs = new ResizeEventArgs();
private DisplayMode mode;
private bool disposed;
private Message msg; // Used only by the IsIdle event.
#region --- Constructors ---
public WinGLControl(Control c, DisplayMode mode)
public WinGLControl(UserControl c, DisplayMode mode)
{
glContext = new WinGLContext(c.Handle, mode);
this.mode = mode;
c.HandleCreated += new EventHandler(c_HandleCreated);
c.HandleDestroyed += new EventHandler(c_HandleDestroyed);
glContext.CreateContext();
glContext = new WinGLContext(mode);
// Create the actual context
c.Visible = true;
//c.CreateControl();
glContext.MakeCurrent();
}
[Obsolete("Use WinGLControl(Control c, DisplayMode mode) instead")]
public WinGLControl(Control c, int width, int height, bool fullscreen)
void c_HandleCreated(object sender, EventArgs e)
{
glContext = new WinGLContext(
c.Handle,
new DisplayMode(
width, height,
new ColorDepth(32),
16, 0, 0, 2,
fullscreen,
false,
false,
0.0f
)
);
Debug.Print("GLControl handle created, creating WinGLContext.");
Debug.Indent();
glContext.CreateContext();
try
{
glContext.PrepareContext((sender as Control).Handle);
glContext.CreateContext();
}
catch (ApplicationException expt)
{
Debug.Print(expt.ToString());
throw;
}
finally
{
Debug.Unindent();
}
}
glContext.MakeCurrent();
OpenTK.OpenGL.GL.LoadAll();
void c_HandleDestroyed(object sender, EventArgs e)
{
glContext.Dispose();
}
#endregion
@ -106,7 +120,6 @@ namespace OpenTK.Platform.Windows
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool calledManually)

View file

@ -258,22 +258,17 @@ namespace OpenTK.Platform.Windows
Debug.Print("Window created: {0}", window);
glContext = new WinGLContext(
this.Handle,
new DisplayMode(
width, height,
new ColorDepth(32),
16, 0, 0, 2,
fullscreen,
false,
false,
0.0f
)
);
glContext.CreateContext();
OpenTK.OpenGL.GL.LoadAll();
try
{
glContext = new WinGLContext(this.mode);
glContext.PrepareContext(this.Handle);
glContext.CreateContext();
}
catch (ApplicationException expt)
{
Debug.Print("Could not create opengl context, error: {0}", expt.ToString());
throw;
}
if (this.Create != null)
{

View file

@ -144,21 +144,12 @@ namespace OpenTK.Platform.X11
);
[DllImport(_dll_name, EntryPoint = "XPeekEvent")]
extern internal static void PeekEvent(
Display display,
[In, Out]XEvent event_return
);
extern internal static void PeekEvent(Display display, [In, Out]XEvent event_return);
[DllImport(_dll_name, EntryPoint = "XSendEvent")]
[return: MarshalAs(UnmanagedType.Bool)]
extern internal static bool SendEvent(
Display display,
Window window,
bool propagate,
[MarshalAs(UnmanagedType.SysInt)]
EventMask event_mask,
ref XEvent event_send
);
extern internal static bool SendEvent(Display display, Window window, bool propagate,
[MarshalAs(UnmanagedType.SysInt)]EventMask event_mask, ref XEvent event_send);
/// <summary>
/// The XSelectInput() function requests that the X server report the events associated
@ -197,8 +188,12 @@ namespace OpenTK.Platform.X11
internal static extern bool CheckIfEvent(Display display, ref XEvent event_return,
/*[MarshalAs(UnmanagedType.FunctionPtr)] */ CheckEventPredicate predicate, /*XPointer*/ IntPtr arg);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[DllImport(_dll_name, EntryPoint = "XIfEvent")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool IfEvent(Display display, ref XEvent event_return,
/*[MarshalAs(UnmanagedType.FunctionPtr)] */ CheckEventPredicate predicate, /*XPointer*/ IntPtr arg);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate bool CheckEventPredicate(Display display, ref XEvent @event, IntPtr arg);
[DllImport(_dll_name, EntryPoint = "XCheckMaskEvent")]
@ -551,8 +546,8 @@ XF86VidModeGetGammaRampSize(
public override string ToString()
{
// return base.ToString();
return String.Format("id ({0}), screen ({1}), depth ({2}), class ({3})",
// return base.ToString();
return String.Format("id ({0}), screen ({1}), depth ({2}), class ({3})",
visualid, screen, depth, @class);
}
}

View file

@ -1654,4 +1654,4 @@ namespace OpenTK.Platform.X11
UnregisterAccelerator = 13,
ActivateAccelerator = 14
}
}
}

View file

@ -19,8 +19,7 @@ namespace OpenTK.Platform.X11
/// </summary>
public sealed class X11GLContext : OpenTK.Platform.IGLContext
{
private IntPtr x11context;
private IntPtr context;
private DisplayMode mode;// = new DisplayMode();
internal WindowInfo windowInfo;
@ -37,25 +36,132 @@ namespace OpenTK.Platform.X11
#region --- Public Constructor ---
internal X11GLContext()
: this(new DisplayMode())
{
this.windowInfo = new WindowInfo();
this.mode = new DisplayMode();
}
internal X11GLContext(WindowInfo window, DisplayMode mode)
internal X11GLContext(DisplayMode mode)
{
this.windowInfo = new WindowInfo(window);
this.windowInfo = new WindowInfo();
this.mode = mode;
}
#endregion
#region internal DisplayMode Mode
internal DisplayMode Mode
{
get { return mode; }
set
{
if (context == IntPtr.Zero)
{
mode = value;
}
else
{
Debug.Print("Cannot change DisplayMode of an existing context.");
}
}
}
#endregion
#region internal void PrepareContext(X11.WindowInfo info)
internal void PrepareContext(X11.WindowInfo info)
{
this.windowInfo = new WindowInfo(info);
Debug.Print("Preparing visual for DisplayMode: {0}", mode.ToString());
/*
int[] attrib =
{
(int)Glx.Enums.GLXAttribute.RGBA,
(int)Glx.Enums.GLXAttribute.RED_SIZE, 1,
(int)Glx.Enums.GLXAttribute.GREEN_SIZE, 1,
(int)Glx.Enums.GLXAttribute.BLUE_SIZE, 1,
(int)Glx.Enums.GLXAttribute.DEPTH_SIZE, 1,
(int)Glx.Enums.GLXAttribute.DOUBLEBUFFER,
0
};
visual = Glx.ChooseVisual(windowInfo.Display, windowInfo.Screen, attrib);
*/
List<int> visualAttributes = new List<int>();
visualAttributes.Add((int)Glx.Enums.GLXAttribute.RGBA);
visualAttributes.Add((int)Glx.Enums.GLXAttribute.RED_SIZE);
visualAttributes.Add((int)mode.Color.Red);
visualAttributes.Add((int)Glx.Enums.GLXAttribute.GREEN_SIZE);
visualAttributes.Add((int)mode.Color.Green);
visualAttributes.Add((int)Glx.Enums.GLXAttribute.BLUE_SIZE);
visualAttributes.Add((int)mode.Color.Blue);
//visualAttributes.Add((int)Glx.Enums.GLXAttribute.ALPHA_SIZE);
//visualAttributes.Add((int)mode.Color.Alpha);
visualAttributes.Add((int)Glx.Enums.GLXAttribute.DEPTH_SIZE);
visualAttributes.Add((int)mode.DepthBits);
visualAttributes.Add((int)1);
visualAttributes.Add((int)Glx.Enums.GLXAttribute.DOUBLEBUFFER);
visualAttributes.Add((int)0);
//try
//{
visual = Glx.ChooseVisual(windowInfo.Display, windowInfo.Screen, visualAttributes.ToArray());
if (visual == IntPtr.Zero)
{
throw new ApplicationException(String.Format("Requested DisplayMode not available ({0}).", mode.ToString()));
}
else
{
windowInfo.VisualInfo = (VisualInfo)Marshal.PtrToStructure(visual, typeof(VisualInfo));
Debug.Print("Prepared visual: {0}", windowInfo.VisualInfo.ToString());
}
//}
//catch (Exception e)
//{
// Debug.Print(e.ToString());
// throw;
//}
}
#endregion
#region internal void CreateContext(X11GLContext shareContext, bool direct)
internal void CreateContext(X11GLContext shareContext, bool direct)
{
Debug.WriteLine("Creating opengl context.");
Debug.Indent();
IntPtr shareHandle = shareContext != null ? shareContext.windowInfo.Handle : IntPtr.Zero;
Debug.WriteLine(shareHandle == IntPtr.Zero ? "Context is not shared." :
String.Format("Context is shared with context: {0}", shareHandle));
Debug.WriteLine(direct ? "Context is direct." : "Context is indirect.");
context = Glx.CreateContext(windowInfo.Display, visual, shareHandle, direct);
if (context != IntPtr.Zero)
{
Debug.WriteLine(String.Format("New opengl context created. (id: {0})", context));
Debug.Unindent();
}
else
{
throw new ApplicationException("Glx.CreateContext call failed (returned 0).");
}
}
#endregion
#region --- IGLContext Members ---
#region public void SwapBuffers()
public void SwapBuffers()
{
Debug.Print("Swapping buffers");
Glx.SwapBuffers(windowInfo.Display, windowInfo.Handle);
}
@ -63,29 +169,27 @@ namespace OpenTK.Platform.X11
#region public void MakeCurrent()
bool result;
public void MakeCurrent()
{
Debug.Write(
String.Format(
"Making context {0} current on thread {1} (Display: {2}, Screen: {3}, Window: {4})... ",
x11context,
System.Threading.Thread.CurrentThread.ManagedThreadId,
windowInfo.Display,
windowInfo.Screen,
windowInfo.Handle
)
);
bool result = Glx.MakeCurrent(windowInfo.Display, windowInfo.Handle, x11context);
Debug.Write(String.Format("Making context {0} current on thread {1} (Display: {2}, Screen: {3}, Window: {4})... ",
context, System.Threading.Thread.CurrentThread.ManagedThreadId, windowInfo.Display, windowInfo.Screen, windowInfo.Handle));
if (!result)
if (windowInfo.Display != IntPtr.Zero && windowInfo.Handle != IntPtr.Zero && context != IntPtr.Zero)
{
Debug.WriteLine("failed...");
// probably need to recreate context here.
//throw new Exception(String.Format("Failed to make context {0} current.", x11context));
}
else
{
Debug.WriteLine("done!");
result = Glx.MakeCurrent(windowInfo.Display, windowInfo.Handle, context);
if (!result)
{
Debug.WriteLine("failed.");
// probably need to recreate context here.
//throw new ApplicationException(String.Format("Failed to make context {0} current on thread {1}.",
// context, System.Threading.Thread.CurrentThread.ManagedThreadId));
}
else
{
Debug.WriteLine("done!");
}
}
}
@ -125,7 +229,8 @@ namespace OpenTK.Platform.X11
if (!disposed)
{
// Clean unmanaged resources:
Glx.DestroyContext(windowInfo.Display, x11context);
Glx.MakeCurrent(windowInfo.Display, IntPtr.Zero, IntPtr.Zero);
Glx.DestroyContext(windowInfo.Display, context);
API.Free(visual);
if (manuallyCalled)
@ -142,101 +247,5 @@ namespace OpenTK.Platform.X11
}
#endregion
#region public void CreateContext(X11GLContext shareContext, bool direct)
public void CreateContext(X11GLContext shareContext, bool direct)
{
Debug.WriteLine("Creating opengl context.");
Debug.Indent();
IntPtr shareHandle = shareContext != null ? shareContext.windowInfo.Handle : IntPtr.Zero;
Debug.WriteLine(
shareHandle == IntPtr.Zero ?
"Context is not shared." :
String.Format("Context is shared with context: {0}", shareHandle)
);
Debug.WriteLine(
direct ?
"Context is direct." :
"Context is indirect."
);
x11context = Glx.CreateContext(
windowInfo.Display,
visual,
shareHandle,
direct
);
if (x11context != IntPtr.Zero)
{
Debug.WriteLine(String.Format("New opengl context created. (id: {0})", x11context));
Debug.Unindent();
}
else
{
throw new ApplicationException("Could not create opengl context.");
}
this.MakeCurrent();
OpenTK.OpenGL.GL.LoadAll();
}
#endregion
#region public void CreateVisual()
internal VisualInfo CreateVisual()
{
Debug.WriteLine("Creating visual.");
Debug.Indent();
Debug.Print("Requesting DisplayMode: {0}. ", mode.ToString());
List<int> visualAttributes = new List<int>();
visualAttributes.Add((int)Glx.Enums.GLXAttribute.RGBA);
visualAttributes.Add((int)Glx.Enums.GLXAttribute.RED_SIZE);
visualAttributes.Add((int)mode.Color.Red);
visualAttributes.Add((int)Glx.Enums.GLXAttribute.GREEN_SIZE);
visualAttributes.Add((int)mode.Color.Green);
visualAttributes.Add((int)Glx.Enums.GLXAttribute.BLUE_SIZE);
visualAttributes.Add((int)mode.Color.Blue);
visualAttributes.Add((int)Glx.Enums.GLXAttribute.ALPHA_SIZE);
visualAttributes.Add((int)mode.Color.Alpha);
visualAttributes.Add((int)Glx.Enums.GLXAttribute.DEPTH_SIZE);
visualAttributes.Add((int)mode.DepthBits);
visualAttributes.Add((int)Glx.Enums.GLXAttribute.DOUBLEBUFFER);
visualAttributes.Add((int)0);
visual = Glx.ChooseVisual(windowInfo.Display, windowInfo.Screen, visualAttributes.ToArray());
if (visual == IntPtr.Zero)
{
throw new ApplicationException("Requested mode not available (Glx.ChooseVisual returned 0).");
}
windowInfo.VisualInfo = (VisualInfo)Marshal.PtrToStructure(visual, typeof(VisualInfo));
Debug.Print("Got visual: {0}", windowInfo.VisualInfo.ToString());
Debug.Unindent();
return windowInfo.VisualInfo;
}
#endregion
[Obsolete]
internal IntPtr XVisual
{
get { return this.visual; }
}
internal VisualInfo XVisualInfo
{
get { return windowInfo.VisualInfo; }
}
[Obsolete]
internal IntPtr Handle
{
get { return this.x11context; }
}
}
}

View file

@ -16,6 +16,7 @@ namespace OpenTK.Platform.X11
sealed class X11GLControl : IGLControl
{
WindowInfo info = new WindowInfo();
DisplayMode mode;
private Type xplatui;
X11GLContext glContext;
@ -24,25 +25,25 @@ namespace OpenTK.Platform.X11
#region --- Contructors ---
[Obsolete("Use X11GLControl(UserControl c, DisplayMode mode) instead.")]
public X11GLControl(UserControl c, int width, int height, bool fullscreen)
: this(c, new DisplayMode(width, height, new ColorDepth(32), 16,
0, 0, 2, false, false, false, 0.0f)) { }
public X11GLControl(UserControl c, DisplayMode mode)
{
Debug.WriteLine("Creating opengl control (X11GLControl driver)");
Debug.Indent();
if (c == null/* || c.TopLevelControl == null*/)
{
throw new ArgumentException("UserControl c may not be null.");
}
//c.ParentChanged += new EventHandler(c_ParentChanged);
this.mode = mode;//new DisplayMode(mode);
glContext = new X11GLContext(mode);
info.Handle = c.Handle;
Debug.Print("Binding to control: {0}", String.IsNullOrEmpty(c.Name) ? c.Text : c.Name);
c.HandleCreated += new EventHandler(c_HandleCreated);
c.HandleDestroyed += new EventHandler(c_HandleDestroyed);
//c.ParentChanged += new EventHandler(c_ParentChanged);
//c.Load += new EventHandler(c_Load);
//Debug.Print("GLControl events hooked to X11GLControl.");
xplatui = Type.GetType("System.Windows.Forms.XplatUIX11, System.Windows.Forms");
Debug.Write("System.Windows.Forms.XplatUIX11: ");
@ -50,73 +51,151 @@ namespace OpenTK.Platform.X11
if (xplatui != null)
{
info.Display = (IntPtr)xplatui.GetField("DisplayHandle",
System.Reflection.BindingFlags.Static |
System.Reflection.BindingFlags.NonPublic).GetValue(null);
System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic).GetValue(null);
info.RootWindow = (IntPtr)xplatui.GetField("RootWindow",
System.Reflection.BindingFlags.Static |
System.Reflection.BindingFlags.NonPublic).GetValue(null);
System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic).GetValue(null);
info.Screen = (int)xplatui.GetField("ScreenNo",
System.Reflection.BindingFlags.Static |
System.Reflection.BindingFlags.NonPublic).GetValue(null);
System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic).GetValue(null);
Debug.Print(
"Screen: {0}, Display: {1}, Root Window: {2}, Handle: {3}",
info.Screen, info.Display, info.RootWindow, info.Handle);
glContext = new X11GLContext(info, mode);
Debug.Print("Display: {0}, Screen: {1}, Root Window: {2}, GLControl: {3}",
info.Display, info.Screen, info.RootWindow, info.Handle);
info.VisualInfo = glContext.CreateVisual();
glContext.PrepareContext(info);
info.VisualInfo = glContext.windowInfo.VisualInfo;
xplatui.GetField("CustomVisual", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic)
.SetValue(null, info.VisualInfo.visual);
xplatui.GetField(
"CustomVisual",
System.Reflection.BindingFlags.Static |
System.Reflection.BindingFlags.NonPublic).SetValue(
null,
//glContext.XVisual
info.VisualInfo.visual
);
xplatui.GetField("CustomColormap", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic)
.SetValue(null, API.CreateColormap(info.Display, info.RootWindow, info.VisualInfo.visual, 0));
xplatui.GetField(
"CustomColormap",
System.Reflection.BindingFlags.Static |
System.Reflection.BindingFlags.NonPublic).SetValue(
null,
API.CreateColormap(info.Display, info.RootWindow, info.VisualInfo.visual, 0/*AllocNone*/)
//glContext.colormap
);
glContext.CreateContext(null, true);
this.c_ParentChanged(c, EventArgs.Empty);
c.Visible = true;
glContext.windowInfo.Handle = info.Handle = c.Handle;
}
//Debug.Print("Parent: {0}", c.ParentForm.Handle);
//API.MapRaised(info.Display, info.Handle);
//API.MapRaised(info.Display, c.ParentForm.Handle);
//OpenTK.OpenGL.GL.Imports.Flush();
/*
// Wait until the GLControl is mapped.
XEvent ev = new XEvent();
API.IfEvent(info.Display, ref ev,
delegate(IntPtr display, ref XEvent @event, IntPtr arg)
{
Debug.Print("Checking event: {0}", @event.type);
if (@event.type == XEventName.MapNotify)
{
Debug.Print("Map event for window: {0}", @event.MapEvent.window);
}
return (@event.type == XEventName.MapNotify) && (@event.MapEvent.window == arg);
},
info.Handle);
*/
//glContext.MakeCurrent();
//OpenTK.OpenGL.GL.LoadAll();
}
void c_HandleCreated(object sender, EventArgs e)
{
UserControl c = (sender as UserControl);
Debug.Print("GLControl handle created, creating X11GLContext.");
Debug.Indent();
glContext.windowInfo.Handle = info.Handle = (sender as UserControl).Handle;
try
{
glContext.CreateContext(null, true);
}
catch (ApplicationException expt)
{
Debug.Print(expt.ToString());
throw;
}
finally
{
Debug.Unindent();
/*
Debug.WriteLine(String.Format("Mapping control {0} to parent {1}", c.Handle, c.Handle));
API.MapRaised(info.Display, c.Handle);
Context.MakeCurrent();
OpenTK.OpenGL.GL.LoadAll();
*/
}
}
void c_HandleDestroyed(object sender, EventArgs e)
{
Debug.Print("X11GLControl handle destroyed, disposing X11GLContext.");
glContext.Dispose();
}
void c_ParentChanged(object sender, EventArgs e)
{
UserControl c = sender as UserControl;
Debug.WriteLine(
String.Format(
"TopLevel control is {0}",
c.TopLevelControl != null ? c.TopLevelControl.ToString() : "not available"
)
);
Debug.Print("Mapping X11GLControl.");
Debug.Indent();
Control c = sender as Control;
Debug.Print("TopLevel control is {0}",
c.TopLevelControl != null ? c.TopLevelControl.ToString() : "not available");
if (c.TopLevelControl == null)
{
info.TopLevelWindow = c.Handle;
throw new Exception("GLControl does not have a parent.");
throw new ApplicationException("Problem: GLControl does not have a parent, aborting.");
}
else
{
info.TopLevelWindow = c.TopLevelControl.Handle;
}
Debug.WriteLine(String.Format("Mapping window to top level: {0}", info.TopLevelWindow));
API.MapRaised(info.Display, info.TopLevelWindow);
Debug.WriteLine(String.Format("Mapping GLControl {0} to window {1}", info.Handle, info.TopLevelWindow));
//API.MapRaised(info.Display, info.TopLevelWindow);
/*
// Wait until the GLControl is mapped.
XEvent ev = new XEvent();
API.IfEvent(info.Display, ref ev,
delegate(IntPtr display, ref XEvent @event, IntPtr arg)
{
//Debug.Print("Checking event: {0}", @event.type);
return (@event.type == XEventName.MapNotify) && (@event.MapEvent.window == arg);
},
info.Handle);
glContext.MakeCurrent();
OpenTK.OpenGL.GL.LoadAll();*/
Debug.Unindent();
}
void c_Load(object sender, EventArgs e)
{
Debug.Print("GLControl loaded, will now try to make context current and load all GL functions.");
Context.MakeCurrent();
OpenTK.OpenGL.GL.LoadAll();
}
/// <summary>
/// Finds a colormap suitable for use with the GLControl.
/// </summary>
/// <returns>A pointer to the colormap</returns>
/// <remarks>
/// If the visual of the GLControl matches the default visual, the function returns
/// the default colormap (i.e. the colormap of the root window). Otherwise, it creates
/// a new, private colormap.
/// </remarks>
private IntPtr FindColormap()
{
if (info.VisualInfo.visual == Functions.XDefaultVisual(info.Display, info.Screen))
{
return Functions.XDefaultColormap(info.Display, info.Screen);
}
return API.CreateColormap(info.Display, info.RootWindow, glContext.windowInfo.VisualInfo.visual, 0/*AllocNone*/);
}
#endregion
#region --- IGLControl Members ---

View file

@ -51,6 +51,7 @@ namespace OpenTK.Platform.X11
public X11GLNative()
{
Debug.Print("Native window driver: {0}", this.ToString());
window = new WindowInfo();
}
#endregion
@ -225,7 +226,7 @@ namespace OpenTK.Platform.X11
}
else
{
Debug.Print("Creating native window with mode: {0}", mode.ToString());
Debug.Print("Creating GameWindow with mode: {0}", mode.ToString());
Debug.Indent();
window.Display = API.OpenDisplay(null); // null == default display
@ -243,11 +244,12 @@ namespace OpenTK.Platform.X11
window.RootWindow
);
glContext = new X11GLContext(window, mode);
window.VisualInfo = glContext.CreateVisual();
glContext = new X11GLContext(mode);
glContext.PrepareContext(window);
window.VisualInfo = glContext.windowInfo.VisualInfo;
// Create a window on this display using the visual above
Debug.Write("Creating output window... ");
Debug.Write("Opening render window... ");
XSetWindowAttributes attributes = new XSetWindowAttributes();
attributes.background_pixel = IntPtr.Zero;
@ -267,7 +269,7 @@ namespace OpenTK.Platform.X11
if (window.Handle == IntPtr.Zero)
{
throw new ApplicationException("Could not create window.");
throw new ApplicationException("XCreateWindow call failed (returned 0).");
}
/*
// Set the window hints
@ -295,6 +297,24 @@ namespace OpenTK.Platform.X11
Debug.Print("done! (id: {0})", window.Handle);
API.MapRaised(window.Display, window.Handle);
/*Debug.WriteLine("Mapped window.");
XEvent ev = new XEvent();
API.IfEvent(window.Display, ref ev,
delegate(IntPtr display, ref XEvent @event, IntPtr arg)
{
Debug.Print("Checking event: {0}", @event.type);
if (@event.type == XEventName.MapNotify)
{
Debug.Print("Map event for window: {0}", @event.MapEvent.window);
}
return (@event.type == XEventName.MapNotify) && (@event.MapEvent.window == arg);
},
window.Handle);
*/
glContext.Mode = mode;//new DisplayMode(mode);
glContext.windowInfo.Handle = window.Handle;
glContext.CreateContext(null, true);

View file

@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("0.3.9.7")]
[assembly: AssemblyFileVersion("0.3.9.7")]
[assembly: AssemblyVersion("0.3.10.1")]
[assembly: AssemblyFileVersion("0.3.10.1")]