00001 #region --- License ---
00002
00003
00004
00005
00006 #endregion
00007
00008 using System;
00009 using System.Collections.Generic;
00010 using System.Text;
00011 using System.Runtime.InteropServices;
00012 using System.Security;
00013
00014 #pragma warning disable 1591
00015
00016 namespace OpenTK.Platform.X11
00017 {
00018 #region Enums
00019
00020 enum GLXAttribute : int
00021 {
00022 TRANSPARENT_BLUE_VALUE_EXT = 0x27,
00023 GRAY_SCALE = 0x8006,
00024 RGBA_TYPE = 0x8014,
00025 TRANSPARENT_RGB_EXT = 0x8008,
00026 ACCUM_BLUE_SIZE = 16,
00027 SHARE_CONTEXT_EXT = 0x800A,
00028 STEREO = 6,
00029 ALPHA_SIZE = 11,
00030 FLOAT_COMPONENTS_NV = 0x20B0,
00031 NONE = 0x8000,
00032 DEPTH_SIZE = 12,
00033 TRANSPARENT_INDEX_VALUE_EXT = 0x24,
00034 MAX_PBUFFER_WIDTH_SGIX = 0x8016,
00035 GREEN_SIZE = 9,
00036 X_RENDERABLE_SGIX = 0x8012,
00037 LARGEST_PBUFFER = 0x801C,
00038 DONT_CARE = unchecked((int)0xFFFFFFFF),
00039 TRANSPARENT_ALPHA_VALUE_EXT = 0x28,
00040 PSEUDO_COLOR_EXT = 0x8004,
00041 USE_GL = 1,
00042 SAMPLE_BUFFERS_SGIS = 100000,
00043 TRANSPARENT_GREEN_VALUE_EXT = 0x26,
00044 HYPERPIPE_ID_SGIX = 0x8030,
00045 COLOR_INDEX_TYPE_SGIX = 0x8015,
00046 SLOW_CONFIG = 0x8001,
00047 PRESERVED_CONTENTS = 0x801B,
00048 ACCUM_RED_SIZE = 14,
00049 EVENT_MASK = 0x801F,
00050 VISUAL_ID_EXT = 0x800B,
00051 EVENT_MASK_SGIX = 0x801F,
00052 SLOW_VISUAL_EXT = 0x8001,
00053 TRANSPARENT_GREEN_VALUE = 0x26,
00054 MAX_PBUFFER_WIDTH = 0x8016,
00055 DIRECT_COLOR_EXT = 0x8003,
00056 VISUAL_ID = 0x800B,
00057 ACCUM_GREEN_SIZE = 15,
00058 DRAWABLE_TYPE_SGIX = 0x8010,
00059 SCREEN_EXT = 0x800C,
00060 SAMPLES = 100001,
00061 HEIGHT = 0x801E,
00062 TRANSPARENT_INDEX_VALUE = 0x24,
00063 SAMPLE_BUFFERS_ARB = 100000,
00064 PBUFFER = 0x8023,
00065 RGBA_TYPE_SGIX = 0x8014,
00066 MAX_PBUFFER_HEIGHT = 0x8017,
00067 FBCONFIG_ID_SGIX = 0x8013,
00068 DRAWABLE_TYPE = 0x8010,
00069 SCREEN = 0x800C,
00070 RED_SIZE = 8,
00071 VISUAL_SELECT_GROUP_SGIX = 0x8028,
00072 VISUAL_CAVEAT_EXT = 0x20,
00073 PSEUDO_COLOR = 0x8004,
00074 PBUFFER_HEIGHT = 0x8040,
00075 STATIC_GRAY = 0x8007,
00076 PRESERVED_CONTENTS_SGIX = 0x801B,
00077 RGBA_FLOAT_TYPE_ARB = 0x20B9,
00078 TRANSPARENT_RED_VALUE = 0x25,
00079 TRANSPARENT_ALPHA_VALUE = 0x28,
00080 WINDOW = 0x8022,
00081 X_RENDERABLE = 0x8012,
00082 STENCIL_SIZE = 13,
00083 TRANSPARENT_RGB = 0x8008,
00084 LARGEST_PBUFFER_SGIX = 0x801C,
00085 STATIC_GRAY_EXT = 0x8007,
00086 TRANSPARENT_BLUE_VALUE = 0x27,
00087 DIGITAL_MEDIA_PBUFFER_SGIX = 0x8024,
00088 BLENDED_RGBA_SGIS = 0x8025,
00089 NON_CONFORMANT_VISUAL_EXT = 0x800D,
00090 COLOR_INDEX_TYPE = 0x8015,
00091 TRANSPARENT_RED_VALUE_EXT = 0x25,
00092 GRAY_SCALE_EXT = 0x8006,
00093 WINDOW_SGIX = 0x8022,
00094 X_VISUAL_TYPE = 0x22,
00095 MAX_PBUFFER_HEIGHT_SGIX = 0x8017,
00096 DOUBLEBUFFER = 5,
00097 OPTIMAL_PBUFFER_WIDTH_SGIX = 0x8019,
00098 X_VISUAL_TYPE_EXT = 0x22,
00099 WIDTH_SGIX = 0x801D,
00100 STATIC_COLOR_EXT = 0x8005,
00101 BUFFER_SIZE = 2,
00102 DIRECT_COLOR = 0x8003,
00103 MAX_PBUFFER_PIXELS = 0x8018,
00104 NONE_EXT = 0x8000,
00105 HEIGHT_SGIX = 0x801E,
00106 RENDER_TYPE = 0x8011,
00107 FBCONFIG_ID = 0x8013,
00108 TRANSPARENT_INDEX_EXT = 0x8009,
00109 TRANSPARENT_INDEX = 0x8009,
00110 TRANSPARENT_TYPE_EXT = 0x23,
00111 ACCUM_ALPHA_SIZE = 17,
00112 PBUFFER_SGIX = 0x8023,
00113 MAX_PBUFFER_PIXELS_SGIX = 0x8018,
00114 OPTIMAL_PBUFFER_HEIGHT_SGIX = 0x801A,
00115 DAMAGED = 0x8020,
00116 SAVED_SGIX = 0x8021,
00117 TRANSPARENT_TYPE = 0x23,
00118 MULTISAMPLE_SUB_RECT_WIDTH_SGIS = 0x8026,
00119 NON_CONFORMANT_CONFIG = 0x800D,
00120 BLUE_SIZE = 10,
00121 TRUE_COLOR_EXT = 0x8002,
00122 SAMPLES_SGIS = 100001,
00123 SAMPLES_ARB = 100001,
00124 TRUE_COLOR = 0x8002,
00125 RGBA = 4,
00126 AUX_BUFFERS = 7,
00127 SAMPLE_BUFFERS = 100000,
00128 SAVED = 0x8021,
00129 MULTISAMPLE_SUB_RECT_HEIGHT_SGIS = 0x8027,
00130 DAMAGED_SGIX = 0x8020,
00131 STATIC_COLOR = 0x8005,
00132 PBUFFER_WIDTH = 0x8041,
00133 WIDTH = 0x801D,
00134 LEVEL = 3,
00135 CONFIG_CAVEAT = 0x20,
00136 RENDER_TYPE_SGIX = 0x8011,
00137 }
00138
00139 enum GLXHyperpipeAttrib : int
00140 {
00141 PIPE_RECT_LIMITS_SGIX = 0x00000002,
00142 PIPE_RECT_SGIX = 0x00000001,
00143 HYPERPIPE_STEREO_SGIX = 0x00000003,
00144 HYPERPIPE_PIXEL_AVERAGE_SGIX = 0x00000004,
00145 }
00146
00147 enum GLXStringName : int
00148 {
00149 EXTENSIONS = 0x3,
00150 VERSION = 0x2,
00151 VENDOR = 0x1,
00152 }
00153
00154 enum GLXEventMask : int
00155 {
00156 PBUFFER_CLOBBER_MASK = 0x08000000,
00157 BUFFER_CLOBBER_MASK_SGIX = 0x08000000,
00158 }
00159
00160 enum GLXRenderTypeMask : int
00161 {
00162 COLOR_INDEX_BIT_SGIX = 0x00000002,
00163 RGBA_BIT = 0x00000001,
00164 RGBA_FLOAT_BIT_ARB = 0x00000004,
00165 RGBA_BIT_SGIX = 0x00000001,
00166 COLOR_INDEX_BIT = 0x00000002,
00167 }
00168
00169 enum GLXHyperpipeTypeMask : int
00170 {
00171 HYPERPIPE_RENDER_PIPE_SGIX = 0x00000002,
00172 HYPERPIPE_DISPLAY_PIPE_SGIX = 0x00000001,
00173 }
00174
00175 enum GLXPbufferClobberMask : int
00176 {
00177 ACCUM_BUFFER_BIT_SGIX = 0x00000080,
00178 FRONT_LEFT_BUFFER_BIT = 0x00000001,
00179 BACK_RIGHT_BUFFER_BIT = 0x00000008,
00180 FRONT_RIGHT_BUFFER_BIT_SGIX = 0x00000002,
00181 STENCIL_BUFFER_BIT_SGIX = 0x00000040,
00182 SAMPLE_BUFFERS_BIT_SGIX = 0x00000100,
00183 STENCIL_BUFFER_BIT = 0x00000040,
00184 BACK_RIGHT_BUFFER_BIT_SGIX = 0x00000008,
00185 BACK_LEFT_BUFFER_BIT_SGIX = 0x00000004,
00186 AUX_BUFFERS_BIT = 0x00000010,
00187 DEPTH_BUFFER_BIT_SGIX = 0x00000020,
00188 ACCUM_BUFFER_BIT = 0x00000080,
00189 AUX_BUFFERS_BIT_SGIX = 0x00000010,
00190 DEPTH_BUFFER_BIT = 0x00000020,
00191 FRONT_LEFT_BUFFER_BIT_SGIX = 0x00000001,
00192 BACK_LEFT_BUFFER_BIT = 0x00000004,
00193 FRONT_RIGHT_BUFFER_BIT = 0x00000002,
00194 }
00195
00196 enum GLXHyperpipeMisc : int
00197 {
00198 HYPERPIPE_PIPE_NAME_LENGTH_SGIX = 80,
00199 }
00200
00201 enum GLXErrorCode : int
00202 {
00203 BAD_CONTEXT = 5,
00204 NO_EXTENSION = 3,
00205 BAD_HYPERPIPE_SGIX = 92,
00206 BAD_ENUM = 7,
00207 BAD_SCREEN = 1,
00208 BAD_VALUE = 6,
00209 BAD_ATTRIBUTE = 2,
00210 BAD_VISUAL = 4,
00211 BAD_HYPERPIPE_CONFIG_SGIX = 91,
00212 }
00213
00214 enum GLXSyncType : int
00215 {
00216 SYNC_SWAP_SGIX = 0x00000001,
00217 SYNC_FRAME_SGIX = 0x00000000,
00218 }
00219
00220 enum GLXDrawableTypeMask : int
00221 {
00222 WINDOW_BIT = 0x00000001,
00223 PIXMAP_BIT = 0x00000002,
00224 PBUFFER_BIT_SGIX = 0x00000004,
00225 PBUFFER_BIT = 0x00000004,
00226 WINDOW_BIT_SGIX = 0x00000001,
00227 PIXMAP_BIT_SGIX = 0x00000002,
00228 }
00229
00230 enum ArbCreateContext : int
00231 {
00232 DebugBit = 0x0001,
00233 ForwardCompatibleBit = 0x0002,
00234 MajorVersion = 0x2091,
00235 MinorVersion = 0x2092,
00236 LayerPlane = 0x2093,
00237 Flags = 0x2094,
00238 ErrorInvalidVersion = 0x2095,
00239 }
00240
00241 enum ErrorCode : int
00242 {
00243 NO_ERROR = 0,
00244 BAD_SCREEN = 1,
00245 BAD_ATTRIBUTE = 2,
00246 NO_EXTENSION = 3,
00247 BAD_VISUAL = 4,
00248 BAD_CONTEXT = 5,
00249 BAD_VALUE = 6,
00250 BAD_ENUM = 7,
00251 }
00252
00253 #endregion
00254
00259 partial class Glx
00260 {
00261 #region GLX functions
00262
00263 [DllImport(Library, EntryPoint = "glXIsDirect")]
00264 public static extern bool IsDirect(IntPtr dpy, IntPtr context);
00265
00266 [DllImport(Library, EntryPoint = "glXQueryExtension")]
00267 public static extern bool QueryExtension(IntPtr dpy, ref int errorBase, ref int eventBase);
00268
00269 [DllImport(Library, EntryPoint = "glXQueryExtensionsString")]
00270 static extern IntPtr QueryExtensionsStringInternal(IntPtr dpy, int screen);
00271
00272 public static string QueryExtensionsString(IntPtr dpy, int screen)
00273 {
00274 return Marshal.PtrToStringAnsi(QueryExtensionsStringInternal(dpy, screen));
00275 }
00276
00277 [DllImport(Library, EntryPoint = "glXCreateContext")]
00278 public static extern IntPtr CreateContext(IntPtr dpy, IntPtr vis, IntPtr shareList, bool direct);
00279
00280 [DllImport(Library, EntryPoint = "glXCreateContext")]
00281 public static extern IntPtr CreateContext(IntPtr dpy, ref XVisualInfo vis, IntPtr shareList, bool direct);
00282
00283 [DllImport(Library, EntryPoint = "glXDestroyContext")]
00284 public static extern void DestroyContext(IntPtr dpy, IntPtr context);
00285
00286 public static void DestroyContext(IntPtr dpy, ContextHandle context)
00287 {
00288 DestroyContext(dpy, context.Handle);
00289 }
00290
00291 [DllImport(Library, EntryPoint = "glXGetCurrentContext")]
00292 public static extern IntPtr GetCurrentContext();
00293
00294 [DllImport(Library, EntryPoint = "glXMakeCurrent")]
00295 public static extern bool MakeCurrent(IntPtr display, IntPtr drawable, IntPtr context);
00296
00297 public static bool MakeCurrent(IntPtr display, IntPtr drawable, ContextHandle context)
00298 {
00299 return MakeCurrent(display, drawable, context.Handle);
00300 }
00301
00302 [DllImport(Library, EntryPoint = "glXSwapBuffers")]
00303 public static extern void SwapBuffers(IntPtr display, IntPtr drawable);
00304
00305 [DllImport(Library, EntryPoint = "glXGetProcAddress")]
00306 public static extern IntPtr GetProcAddress([MarshalAs(UnmanagedType.LPTStr)] string procName);
00307
00308 [DllImport(Library, EntryPoint = "glXGetConfig")]
00309 public static extern int GetConfig(IntPtr dpy, ref XVisualInfo vis, GLXAttribute attrib, out int value);
00310
00311 #region glXChooseVisual
00312
00313 [DllImport(Library, EntryPoint = "glXChooseVisual")]
00314 public extern static IntPtr ChooseVisual(IntPtr dpy, int screen, IntPtr attriblist);
00315
00316 [DllImport(Library, EntryPoint = "glXChooseVisual")]
00317 public extern static IntPtr ChooseVisual(IntPtr dpy, int screen, ref int attriblist);
00318
00319 public static IntPtr ChooseVisual(IntPtr dpy, int screen, int[] attriblist)
00320 {
00321 unsafe
00322 {
00323 fixed (int* attriblist_ptr = attriblist)
00324 {
00325 return ChooseVisual(dpy, screen, (IntPtr)attriblist_ptr);
00326 }
00327 }
00328 }
00329
00330
00331 [DllImport(Library, EntryPoint = "glXChooseFBConfig")]
00332 unsafe public extern static IntPtr* ChooseFBConfig(IntPtr dpy, int screen, int[] attriblist, out int fbount);
00333
00334
00335 [DllImport(Library, EntryPoint = "glXGetVisualFromFBConfig")]
00336 public unsafe extern static IntPtr GetVisualFromFBConfig(IntPtr dpy, IntPtr fbconfig);
00337
00338 #endregion
00339
00340 #region Extensions
00341
00342 public partial class Sgi
00343 {
00344 public static ErrorCode SwapInterval(int interval)
00345 {
00346 return (ErrorCode)Delegates.glXSwapIntervalSGI(interval);
00347 }
00348 }
00349
00350 public partial class Arb
00351 {
00352 #region CreateContextAttribs
00353
00354 unsafe public static IntPtr CreateContextAttribs(IntPtr display, IntPtr fbconfig, IntPtr share_context, bool direct, int* attribs)
00355 {
00356 return Delegates.glXCreateContextAttribsARB(display, fbconfig, share_context, direct, attribs);
00357 }
00358
00359 public static IntPtr CreateContextAttribs(IntPtr display, IntPtr fbconfig, IntPtr share_context, bool direct, int[] attribs)
00360 {
00361 unsafe
00362 {
00363 fixed (int* attribs_ptr = attribs)
00364 {
00365 return Delegates.glXCreateContextAttribsARB(display, fbconfig, share_context, direct, attribs_ptr);
00366 }
00367 }
00368 }
00369
00370 #endregion
00371 }
00372
00373 internal static partial class Delegates
00374 {
00375 [SuppressUnmanagedCodeSecurity]
00376 public delegate int SwapIntervalSGI(int interval);
00377 public static SwapIntervalSGI glXSwapIntervalSGI = null;
00378
00379 [SuppressUnmanagedCodeSecurity]
00380 unsafe public delegate IntPtr CreateContextAttribsARB(IntPtr display, IntPtr fbconfig, IntPtr share_context, bool direct, int* attribs);
00381 unsafe public static CreateContextAttribsARB glXCreateContextAttribsARB = null;
00382 }
00383
00384 #endregion
00385
00386 #endregion
00387 }
00388 }
00389
00390 #pragma warning restore 1591