00001 #region --- License ---
00002
00003
00004
00005 #endregion
00006
00007 using System;
00008 using System.Collections.Generic;
00009 using System.Text;
00010 using System.Reflection;
00011 using System.Runtime.InteropServices;
00012 using System.Diagnostics;
00013
00014 using OpenTK.Graphics;
00015
00016 namespace OpenTK.Platform.X11
00017 {
00018 partial class Glx : BindingsBase
00019 {
00020 const string Library = "libGL.so.1";
00021 static readonly object sync_root = new object();
00022
00023
00024 static Glx() { }
00025
00026 protected override object SyncRoot
00027 {
00028 get { return sync_root; }
00029 }
00030
00031 protected override IntPtr GetAddress (string funcname)
00032 {
00033 return Glx.GetProcAddress(funcname);
00034 }
00035
00036 #if false
00037 #region static Delegate LoadDelegate(string name, Type signature)
00038
00048 static Delegate LoadDelegate(string name, Type signature)
00049 {
00050 Delegate d;
00051 string realName = name.ToLower().StartsWith("glx") ? name.Substring(3) : name;
00052
00053 if (typeof(Glx).GetMethod(realName,
00054 BindingFlags.NonPublic | BindingFlags.Static) != null)
00055 d = GetExtensionDelegate(name, signature) ??
00056 Delegate.CreateDelegate(signature, typeof(Glx), realName);
00057 else
00058 d = GetExtensionDelegate(name, signature);
00059
00060 return d;
00061 }
00062
00063 #endregion
00064
00065 #region private static Delegate GetExtensionDelegate(string name, Type signature)
00066
00076 private static Delegate GetExtensionDelegate(string name, Type signature)
00077 {
00078 IntPtr address = Glx.GetProcAddress(name);
00079
00080 if (address == IntPtr.Zero ||
00081 address == new IntPtr(1) ||
00082 address == new IntPtr(2))
00083 return null;
00084 else
00085 return Marshal.GetDelegateForFunctionPointer(address, signature);
00086 }
00087
00088 #endregion
00089
00090 #region internal static void LoadAll
00091
00092 public static void LoadAll()
00093 {
00094 OpenTK.Platform.Utilities.LoadExtensions(typeof(Glx));
00095 }
00096
00097 #endregion
00098 #endif
00099 }
00100 }