master
ブランチ master
ShaderPlayground / deps / glfw / src / glx_context.h
7.4 KB、181行 生 Blame 履歴
1//========================================================================
2// GLFW 3.3 GLX - www.glfw.org
3//------------------------------------------------------------------------
4// Copyright (c) 2002-2006 Marcus Geelnard
5// Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org>
6//
7// This software is provided 'as-is', without any express or implied
8// warranty. In no event will the authors be held liable for any damages
9// arising from the use of this software.
10//
11// Permission is granted to anyone to use this software for any purpose,
12// including commercial applications, and to alter it and redistribute it
13// freely, subject to the following restrictions:
14//
15// 1. The origin of this software must not be misrepresented; you must not
16// claim that you wrote the original software. If you use this software
17// in a product, an acknowledgment in the product documentation would
18// be appreciated but is not required.
19//
20// 2. Altered source versions must be plainly marked as such, and must not
21// be misrepresented as being the original software.
22//
23// 3. This notice may not be removed or altered from any source
24// distribution.
25//
26//========================================================================
27
28#define GLX_VENDOR 1
29#define GLX_RGBA_BIT 0x00000001
30#define GLX_WINDOW_BIT 0x00000001
31#define GLX_DRAWABLE_TYPE 0x8010
32#define GLX_RENDER_TYPE 0x8011
33#define GLX_RGBA_TYPE 0x8014
34#define GLX_DOUBLEBUFFER 5
35#define GLX_STEREO 6
36#define GLX_AUX_BUFFERS 7
37#define GLX_RED_SIZE 8
38#define GLX_GREEN_SIZE 9
39#define GLX_BLUE_SIZE 10
40#define GLX_ALPHA_SIZE 11
41#define GLX_DEPTH_SIZE 12
42#define GLX_STENCIL_SIZE 13
43#define GLX_ACCUM_RED_SIZE 14
44#define GLX_ACCUM_GREEN_SIZE 15
45#define GLX_ACCUM_BLUE_SIZE 16
46#define GLX_ACCUM_ALPHA_SIZE 17
47#define GLX_SAMPLES 0x186a1
48#define GLX_VISUAL_ID 0x800b
49
50#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20b2
51#define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001
52#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
53#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
54#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126
55#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
56#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091
57#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092
58#define GLX_CONTEXT_FLAGS_ARB 0x2094
59#define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004
60#define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
61#define GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252
62#define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
63#define GLX_NO_RESET_NOTIFICATION_ARB 0x8261
64#define GLX_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097
65#define GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0
66#define GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098
67#define GLX_CONTEXT_OPENGL_NO_ERROR_ARB 0x31b3
68
69typedef XID GLXWindow;
70typedef XID GLXDrawable;
71typedef struct __GLXFBConfig* GLXFBConfig;
72typedef struct __GLXcontext* GLXContext;
73typedef void (*__GLXextproc)(void);
74
75typedef int (*PFNGLXGETFBCONFIGATTRIBPROC)(Display*,GLXFBConfig,int,int*);
76typedef const char* (*PFNGLXGETCLIENTSTRINGPROC)(Display*,int);
77typedef Bool (*PFNGLXQUERYEXTENSIONPROC)(Display*,int*,int*);
78typedef Bool (*PFNGLXQUERYVERSIONPROC)(Display*,int*,int*);
79typedef void (*PFNGLXDESTROYCONTEXTPROC)(Display*,GLXContext);
80typedef Bool (*PFNGLXMAKECURRENTPROC)(Display*,GLXDrawable,GLXContext);
81typedef void (*PFNGLXSWAPBUFFERSPROC)(Display*,GLXDrawable);
82typedef const char* (*PFNGLXQUERYEXTENSIONSSTRINGPROC)(Display*,int);
83typedef GLXFBConfig* (*PFNGLXGETFBCONFIGSPROC)(Display*,int,int*);
84typedef GLXContext (*PFNGLXCREATENEWCONTEXTPROC)(Display*,GLXFBConfig,int,GLXContext,Bool);
85typedef __GLXextproc (* PFNGLXGETPROCADDRESSPROC)(const GLubyte *procName);
86typedef void (*PFNGLXSWAPINTERVALEXTPROC)(Display*,GLXDrawable,int);
87typedef XVisualInfo* (*PFNGLXGETVISUALFROMFBCONFIGPROC)(Display*,GLXFBConfig);
88typedef GLXWindow (*PFNGLXCREATEWINDOWPROC)(Display*,GLXFBConfig,Window,const int*);
89typedef void (*PFNGLXDESTROYWINDOWPROC)(Display*,GLXWindow);
90
91typedef int (*PFNGLXSWAPINTERVALMESAPROC)(int);
92typedef int (*PFNGLXSWAPINTERVALSGIPROC)(int);
93typedef GLXContext (*PFNGLXCREATECONTEXTATTRIBSARBPROC)(Display*,GLXFBConfig,GLXContext,Bool,const int*);
94
95// libGL.so function pointer typedefs
96#define glXGetFBConfigs _glfw.glx.GetFBConfigs
97#define glXGetFBConfigAttrib _glfw.glx.GetFBConfigAttrib
98#define glXGetClientString _glfw.glx.GetClientString
99#define glXQueryExtension _glfw.glx.QueryExtension
100#define glXQueryVersion _glfw.glx.QueryVersion
101#define glXDestroyContext _glfw.glx.DestroyContext
102#define glXMakeCurrent _glfw.glx.MakeCurrent
103#define glXSwapBuffers _glfw.glx.SwapBuffers
104#define glXQueryExtensionsString _glfw.glx.QueryExtensionsString
105#define glXCreateNewContext _glfw.glx.CreateNewContext
106#define glXGetVisualFromFBConfig _glfw.glx.GetVisualFromFBConfig
107#define glXCreateWindow _glfw.glx.CreateWindow
108#define glXDestroyWindow _glfw.glx.DestroyWindow
109
110#define _GLFW_PLATFORM_CONTEXT_STATE _GLFWcontextGLX glx
111#define _GLFW_PLATFORM_LIBRARY_CONTEXT_STATE _GLFWlibraryGLX glx
112
113
114// GLX-specific per-context data
115//
116typedef struct _GLFWcontextGLX
117{
118 GLXContext handle;
119 GLXWindow window;
120
121} _GLFWcontextGLX;
122
123// GLX-specific global data
124//
125typedef struct _GLFWlibraryGLX
126{
127 int major, minor;
128 int eventBase;
129 int errorBase;
130
131 // dlopen handle for libGL.so.1
132 void* handle;
133
134 // GLX 1.3 functions
135 PFNGLXGETFBCONFIGSPROC GetFBConfigs;
136 PFNGLXGETFBCONFIGATTRIBPROC GetFBConfigAttrib;
137 PFNGLXGETCLIENTSTRINGPROC GetClientString;
138 PFNGLXQUERYEXTENSIONPROC QueryExtension;
139 PFNGLXQUERYVERSIONPROC QueryVersion;
140 PFNGLXDESTROYCONTEXTPROC DestroyContext;
141 PFNGLXMAKECURRENTPROC MakeCurrent;
142 PFNGLXSWAPBUFFERSPROC SwapBuffers;
143 PFNGLXQUERYEXTENSIONSSTRINGPROC QueryExtensionsString;
144 PFNGLXCREATENEWCONTEXTPROC CreateNewContext;
145 PFNGLXGETVISUALFROMFBCONFIGPROC GetVisualFromFBConfig;
146 PFNGLXCREATEWINDOWPROC CreateWindow;
147 PFNGLXDESTROYWINDOWPROC DestroyWindow;
148
149 // GLX 1.4 and extension functions
150 PFNGLXGETPROCADDRESSPROC GetProcAddress;
151 PFNGLXGETPROCADDRESSPROC GetProcAddressARB;
152 PFNGLXSWAPINTERVALSGIPROC SwapIntervalSGI;
153 PFNGLXSWAPINTERVALEXTPROC SwapIntervalEXT;
154 PFNGLXSWAPINTERVALMESAPROC SwapIntervalMESA;
155 PFNGLXCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB;
156 GLFWbool SGI_swap_control;
157 GLFWbool EXT_swap_control;
158 GLFWbool MESA_swap_control;
159 GLFWbool ARB_multisample;
160 GLFWbool ARB_framebuffer_sRGB;
161 GLFWbool EXT_framebuffer_sRGB;
162 GLFWbool ARB_create_context;
163 GLFWbool ARB_create_context_profile;
164 GLFWbool ARB_create_context_robustness;
165 GLFWbool EXT_create_context_es2_profile;
166 GLFWbool ARB_create_context_no_error;
167 GLFWbool ARB_context_flush_control;
168
169} _GLFWlibraryGLX;
170
171GLFWbool _glfwInitGLX(void);
172void _glfwTerminateGLX(void);
173GLFWbool _glfwCreateContextGLX(_GLFWwindow* window,
174 const _GLFWctxconfig* ctxconfig,
175 const _GLFWfbconfig* fbconfig);
176void _glfwDestroyContextGLX(_GLFWwindow* window);
177GLFWbool _glfwChooseVisualGLX(const _GLFWwndconfig* wndconfig,
178 const _GLFWctxconfig* ctxconfig,
179 const _GLFWfbconfig* fbconfig,
180 Visual** visual, int* depth);
181