blob: 99d74b8652d555003e2cfab1170b31fc6169eda2 [file] [log] [blame]
Camilla Berglund3249f812010-09-07 17:34:51 +02001//========================================================================
Camilla Berglund6e553c72011-03-06 01:46:39 +01002// GLFW - An OpenGL library
Camilla Berglund3249f812010-09-07 17:34:51 +02003// Platform: Any
Camilla Berglund38b0ccb2010-09-07 17:41:26 +02004// API version: 3.0
Camilla Berglund3249f812010-09-07 17:34:51 +02005// WWW: http://www.glfw.org/
6//------------------------------------------------------------------------
7// Copyright (c) 2002-2006 Marcus Geelnard
8// Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
9//
10// This software is provided 'as-is', without any express or implied
11// warranty. In no event will the authors be held liable for any damages
12// arising from the use of this software.
13//
14// Permission is granted to anyone to use this software for any purpose,
15// including commercial applications, and to alter it and redistribute it
16// freely, subject to the following restrictions:
17//
18// 1. The origin of this software must not be misrepresented; you must not
19// claim that you wrote the original software. If you use this software
20// in a product, an acknowledgment in the product documentation would
21// be appreciated but is not required.
22//
23// 2. Altered source versions must be plainly marked as such, and must not
24// be misrepresented as being the original software.
25//
26// 3. This notice may not be removed or altered from any source
27// distribution.
28//
29//========================================================================
30
31#ifndef _internal_h_
32#define _internal_h_
33
34//========================================================================
35// GLFWGLOBAL is a macro that places all global variables in the init.c
36// module (all other modules reference global variables as 'extern')
37//========================================================================
38
Camilla Berglundd46b2222010-09-08 17:30:21 +020039#if defined(_init_c_)
Camilla Berglundf6dfaf52012-02-05 16:56:26 +010040 #define GLFWGLOBAL
Camilla Berglund3249f812010-09-07 17:34:51 +020041#else
Camilla Berglundf6dfaf52012-02-05 16:56:26 +010042 #define GLFWGLOBAL extern
Camilla Berglund3249f812010-09-07 17:34:51 +020043#endif
44
45
46//========================================================================
47// Input handling definitions
48//========================================================================
49
50// Internal key and button state/action definitions
51#define GLFW_STICK 2
52
53
Camilla Berglund1a998272012-04-22 21:49:38 +020054//========================================================================
55// Internal type declarations
56//========================================================================
57
58typedef struct _GLFWhints _GLFWhints;
59typedef struct _GLFWwndconfig _GLFWwndconfig;
60typedef struct _GLFWfbconfig _GLFWfbconfig;
61typedef struct _GLFWwindow _GLFWwindow;
62typedef struct _GLFWlibrary _GLFWlibrary;
63
64
Camilla Berglund3249f812010-09-07 17:34:51 +020065//------------------------------------------------------------------------
Camilla Berglund135194a2010-09-09 18:15:32 +020066// Platform specific definitions goes in platform.h (which also includes
67// glfw.h)
68//------------------------------------------------------------------------
69
Camilla Berglund3ca63a02010-09-17 00:54:11 +020070#include "config.h"
Camilla Berglund3be0c052010-11-17 14:52:47 +010071
Camilla Berglund53f4f542011-07-26 15:16:34 +020072#include "../include/GL/glfw3.h"
Camilla Berglunda98c66c2011-09-22 14:15:07 +020073
74// This path may need to be changed if you build GLFW using your own setup
75// We ship and use our own copy of glext.h since GLFW uses fairly new
76// extensions and not all operating systems come with an up-to-date version
Camilla Berglund3b733b92011-09-06 17:32:41 +020077#include "../support/GL/glext.h"
Camilla Berglund3be0c052010-11-17 14:52:47 +010078
Camilla Berglund53f4f542011-07-26 15:16:34 +020079#if defined(_GLFW_COCOA_NSGL)
Camilla Berglundf6dfaf52012-02-05 16:56:26 +010080 #include "cocoa_platform.h"
Camilla Berglund53f4f542011-07-26 15:16:34 +020081#elif defined(_GLFW_WIN32_WGL)
Camilla Berglundf6dfaf52012-02-05 16:56:26 +010082 #include "win32_platform.h"
Camilla Berglund53f4f542011-07-26 15:16:34 +020083#elif defined(_GLFW_X11_GLX)
Camilla Berglundf6dfaf52012-02-05 16:56:26 +010084 #include "x11_platform.h"
Camilla Berglund53f4f542011-07-26 15:16:34 +020085#else
Camilla Berglundf6dfaf52012-02-05 16:56:26 +010086 #error "No supported platform selected"
Camilla Berglund53f4f542011-07-26 15:16:34 +020087#endif
Camilla Berglund135194a2010-09-09 18:15:32 +020088
Camilla Berglund99ddce32010-10-04 18:17:53 +020089
Camilla Berglund135194a2010-09-09 18:15:32 +020090//------------------------------------------------------------------------
Camilla Berglund12d17b92010-09-09 20:18:10 +020091// Window hints, set by glfwOpenWindowHint and consumed by glfwOpenWindow
92// A bucket of semi-random stuff lumped together for historical reasons
Camilla Berglund3249f812010-09-07 17:34:51 +020093// This is used only by the platform independent code and only to store
94// parameters passed to us by glfwOpenWindowHint
95//------------------------------------------------------------------------
Camilla Berglund99ddce32010-10-04 18:17:53 +020096struct _GLFWhints
Camilla Berglund12d17b92010-09-09 20:18:10 +020097{
Camilla Berglund950a3be2010-09-09 19:58:51 +020098 int redBits;
99 int greenBits;
100 int blueBits;
101 int alphaBits;
102 int depthBits;
103 int stencilBits;
Camilla Berglund3249f812010-09-07 17:34:51 +0200104 int refreshRate;
105 int accumRedBits;
106 int accumGreenBits;
107 int accumBlueBits;
108 int accumAlphaBits;
109 int auxBuffers;
Camilla Berglund70b9a1f2010-10-25 12:36:14 +0200110 GLboolean stereo;
Camilla Berglunda18cd1b2011-11-02 16:56:34 +0100111 GLboolean resizable;
Camilla Berglund3249f812010-09-07 17:34:51 +0200112 int samples;
113 int glMajor;
114 int glMinor;
Camilla Berglund70b9a1f2010-10-25 12:36:14 +0200115 GLboolean glForward;
116 GLboolean glDebug;
Camilla Berglund3249f812010-09-07 17:34:51 +0200117 int glProfile;
Camilla Berglundd43e0b52011-03-07 20:51:34 +0100118 int glRobustness;
Camilla Berglund99ddce32010-10-04 18:17:53 +0200119};
Camilla Berglund3249f812010-09-07 17:34:51 +0200120
121
122//------------------------------------------------------------------------
Camilla Berglund3249f812010-09-07 17:34:51 +0200123// Parameters relating to the creation of the context and window but not
124// directly related to the properties of the framebuffer
125// This is used to pass window and context creation parameters from the
126// platform independent code to the platform specific code
127//------------------------------------------------------------------------
Camilla Berglund99ddce32010-10-04 18:17:53 +0200128struct _GLFWwndconfig
Camilla Berglund12d17b92010-09-09 20:18:10 +0200129{
Camilla Berglund99ddce32010-10-04 18:17:53 +0200130 int mode;
131 const char* title;
132 int refreshRate;
Camilla Berglunda18cd1b2011-11-02 16:56:34 +0100133 GLboolean resizable;
Camilla Berglund99ddce32010-10-04 18:17:53 +0200134 int glMajor;
135 int glMinor;
Camilla Berglund70b9a1f2010-10-25 12:36:14 +0200136 GLboolean glForward;
137 GLboolean glDebug;
Camilla Berglund99ddce32010-10-04 18:17:53 +0200138 int glProfile;
Camilla Berglundd43e0b52011-03-07 20:51:34 +0100139 int glRobustness;
Camilla Berglund99ddce32010-10-04 18:17:53 +0200140 _GLFWwindow* share;
141};
Camilla Berglund3249f812010-09-07 17:34:51 +0200142
143
144//------------------------------------------------------------------------
145// Framebuffer configuration descriptor, i.e. buffers and their sizes
146// Also a platform specific ID used to map back to the actual backend APIs
147// This is used to pass framebuffer parameters from the platform independent
148// code to the platform specific code, and also to enumerate and select
149// available framebuffer configurations
150//------------------------------------------------------------------------
Camilla Berglund99ddce32010-10-04 18:17:53 +0200151struct _GLFWfbconfig
Camilla Berglund12d17b92010-09-09 20:18:10 +0200152{
Camilla Berglund3249f812010-09-07 17:34:51 +0200153 int redBits;
154 int greenBits;
155 int blueBits;
156 int alphaBits;
157 int depthBits;
158 int stencilBits;
159 int accumRedBits;
160 int accumGreenBits;
161 int accumBlueBits;
162 int accumAlphaBits;
163 int auxBuffers;
Camilla Berglund70b9a1f2010-10-25 12:36:14 +0200164 GLboolean stereo;
Camilla Berglund3249f812010-09-07 17:34:51 +0200165 int samples;
166 GLFWintptr platformID;
Camilla Berglund99ddce32010-10-04 18:17:53 +0200167};
Camilla Berglund3249f812010-09-07 17:34:51 +0200168
169
Camilla Berglund135194a2010-09-09 18:15:32 +0200170//------------------------------------------------------------------------
171// Window structure
172//------------------------------------------------------------------------
Camilla Berglund99ddce32010-10-04 18:17:53 +0200173struct _GLFWwindow
Camilla Berglund12d17b92010-09-09 20:18:10 +0200174{
Camilla Berglund326d9972010-09-10 00:06:23 +0200175 struct _GLFWwindow* next;
176
Camilla Berglund12d17b92010-09-09 20:18:10 +0200177 // Window settings and state
Camilla Berglund12d17b92010-09-09 20:18:10 +0200178 GLboolean iconified; // GL_TRUE if this window is iconified
Camilla Berglund867e7472010-09-16 06:02:44 +0200179 GLboolean closeRequested; // GL_TRUE if this window should be closed
Camilla Berglund12d17b92010-09-09 20:18:10 +0200180 int width, height;
Camilla Berglund318f7312010-09-14 03:53:22 +0200181 int positionX, positionY;
Camilla Berglund12d17b92010-09-09 20:18:10 +0200182 int mode; // GLFW_WINDOW or GLFW_FULLSCREEN
Camilla Berglunda18cd1b2011-11-02 16:56:34 +0100183 GLboolean resizable; // GL_TRUE if user may resize this window
Camilla Berglund12d17b92010-09-09 20:18:10 +0200184 int refreshRate; // monitor refresh rate
Camilla Berglund48f5a7e2010-09-09 22:44:38 +0200185 void* userPointer;
Camilla Berglund135194a2010-09-09 18:15:32 +0200186
Camilla Berglund12d17b92010-09-09 20:18:10 +0200187 // Window input state
Camilla Berglund135194a2010-09-09 18:15:32 +0200188 GLboolean stickyKeys;
189 GLboolean stickyMouseButtons;
190 GLboolean keyRepeat;
Camilla Berglundce288a82012-02-04 00:51:35 +0100191 GLboolean systemKeys; // system keys enabled flag
Camilla Berglund2660b272011-10-13 15:20:59 +0200192 int cursorPosX, cursorPosY;
Camilla Berglundb1656d72011-09-06 13:55:29 +0200193 int cursorMode;
Camilla Berglund4ef9aec2012-03-28 21:54:09 +0200194 double scrollX, scrollY;
Camilla Berglund135194a2010-09-09 18:15:32 +0200195 char mouseButton[GLFW_MOUSE_BUTTON_LAST + 1];
196 char key[GLFW_KEY_LAST + 1];
Camilla Berglund135194a2010-09-09 18:15:32 +0200197
Camilla Berglund135194a2010-09-09 18:15:32 +0200198 // Framebuffer attributes
Camilla Berglund053737e2012-08-02 01:18:35 +0200199 GLint redBits;
200 GLint greenBits;
201 GLint blueBits;
202 GLint alphaBits;
203 GLint depthBits;
204 GLint stencilBits;
205 GLint accumRedBits;
206 GLint accumGreenBits;
207 GLint accumBlueBits;
208 GLint accumAlphaBits;
209 GLint auxBuffers;
Camilla Berglund135194a2010-09-09 18:15:32 +0200210 GLboolean stereo;
Camilla Berglund053737e2012-08-02 01:18:35 +0200211 GLint samples;
Camilla Berglund135194a2010-09-09 18:15:32 +0200212
213 // OpenGL extensions and context attributes
214 int glMajor, glMinor, glRevision;
Camilla Berglund70b9a1f2010-10-25 12:36:14 +0200215 GLboolean glForward, glDebug;
216 int glProfile;
Camilla Berglundd43e0b52011-03-07 20:51:34 +0100217 int glRobustness;
Camilla Berglund135194a2010-09-09 18:15:32 +0200218 PFNGLGETSTRINGIPROC GetStringi;
219
Camilla Berglunde9eb8412010-10-14 16:40:10 +0200220 // These are defined in the current port's platform.h
Camilla Berglund135194a2010-09-09 18:15:32 +0200221 _GLFW_PLATFORM_WINDOW_STATE;
Camilla Berglund32287552010-09-09 20:36:23 +0200222 _GLFW_PLATFORM_CONTEXT_STATE;
Camilla Berglund99ddce32010-10-04 18:17:53 +0200223};
Camilla Berglund135194a2010-09-09 18:15:32 +0200224
225
226//------------------------------------------------------------------------
227// Library global data
228//------------------------------------------------------------------------
Camilla Berglund99ddce32010-10-04 18:17:53 +0200229struct _GLFWlibrary
Camilla Berglund12d17b92010-09-09 20:18:10 +0200230{
Camilla Berglund2630d492010-10-13 04:04:43 +0200231 _GLFWhints hints;
Camilla Berglund326d9972010-09-10 00:06:23 +0200232
Camilla Berglund2630d492010-10-13 04:04:43 +0200233 _GLFWwindow* windowListHead;
234 _GLFWwindow* currentWindow;
235 _GLFWwindow* activeWindow;
Camilla Berglund2630d492010-10-13 04:04:43 +0200236
Camilla Berglund4044c2d2010-10-24 18:28:55 +0200237 GLFWwindowsizefun windowSizeCallback;
238 GLFWwindowclosefun windowCloseCallback;
239 GLFWwindowrefreshfun windowRefreshCallback;
240 GLFWwindowfocusfun windowFocusCallback;
241 GLFWwindowiconifyfun windowIconifyCallback;
242 GLFWmousebuttonfun mouseButtonCallback;
Camilla Berglundcef9dea2012-06-22 13:53:02 +0200243 GLFWcursorposfun cursorPosCallback;
Camilla Berglund1ddafc22012-01-30 22:30:40 +0100244 GLFWcursorenterfun cursorEnterCallback;
Camilla Berglund4044c2d2010-10-24 18:28:55 +0200245 GLFWscrollfun scrollCallback;
246 GLFWkeyfun keyCallback;
247 GLFWcharfun charCallback;
248
Camilla Berglund2630d492010-10-13 04:04:43 +0200249 GLFWgammaramp currentRamp;
250 GLFWgammaramp originalRamp;
251 int originalRampSize;
Camilla Berglund79bef682012-05-24 11:46:51 +0200252 GLboolean rampChanged;
Camilla Berglund135194a2010-09-09 18:15:32 +0200253
Camilla Berglund871e1a72012-08-02 18:03:43 +0200254 GLFWvidmode* modes;
255
Camilla Berglunde9eb8412010-10-14 16:40:10 +0200256 // This is defined in the current port's platform.h
Camilla Berglund21e77fe2012-04-22 15:53:02 +0200257 _GLFW_PLATFORM_LIBRARY_WINDOW_STATE;
258 _GLFW_PLATFORM_LIBRARY_OPENGL_STATE;
Camilla Berglund99ddce32010-10-04 18:17:53 +0200259};
Camilla Berglund135194a2010-09-09 18:15:32 +0200260
261
Camilla Berglund3249f812010-09-07 17:34:51 +0200262//========================================================================
263// System independent global variables (GLFW internals)
264//========================================================================
265
266// Flag indicating if GLFW has been initialized
Camilla Berglundd46b2222010-09-08 17:30:21 +0200267#if defined(_init_c_)
Camilla Berglund12d17b92010-09-09 20:18:10 +0200268GLboolean _glfwInitialized = GL_FALSE;
Camilla Berglund3249f812010-09-07 17:34:51 +0200269#else
Camilla Berglund12d17b92010-09-09 20:18:10 +0200270GLFWGLOBAL GLboolean _glfwInitialized;
Camilla Berglund3249f812010-09-07 17:34:51 +0200271#endif
272
Camilla Berglund135194a2010-09-09 18:15:32 +0200273GLFWGLOBAL _GLFWlibrary _glfwLibrary;
274
Camilla Berglund3249f812010-09-07 17:34:51 +0200275
276//========================================================================
277// Prototypes for platform specific implementation functions
278//========================================================================
279
280// Init/terminate
Camilla Berglundd46b2222010-09-08 17:30:21 +0200281int _glfwPlatformInit(void);
282int _glfwPlatformTerminate(void);
Camilla Berglundd6fe4472010-09-13 18:05:59 +0200283const char* _glfwPlatformGetVersionString(void);
Camilla Berglundf5d74c42010-09-09 21:06:59 +0200284
Camilla Berglundce288a82012-02-04 00:51:35 +0100285// Input
Camilla Berglund135194a2010-09-09 18:15:32 +0200286void _glfwPlatformEnableSystemKeys(_GLFWwindow* window);
287void _glfwPlatformDisableSystemKeys(_GLFWwindow* window);
Camilla Berglundcef9dea2012-06-22 13:53:02 +0200288void _glfwPlatformSetCursorPos(_GLFWwindow* window, int x, int y);
Camilla Berglundc1dd2452012-04-06 14:37:31 +0200289void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode);
Camilla Berglund3249f812010-09-07 17:34:51 +0200290
291// Fullscreen
Camilla Berglund871e1a72012-08-02 18:03:43 +0200292GLFWvidmode* _glfwPlatformGetVideoModes(int* count);
Camilla Berglundd46b2222010-09-08 17:30:21 +0200293void _glfwPlatformGetDesktopMode(GLFWvidmode* mode);
Camilla Berglund3249f812010-09-07 17:34:51 +0200294
Camilla Berglund2630d492010-10-13 04:04:43 +0200295// Gamma ramp
Camilla Berglund85bcd1f2010-10-13 22:42:31 +0200296void _glfwPlatformGetGammaRamp(GLFWgammaramp* ramp);
Camilla Berglund2630d492010-10-13 04:04:43 +0200297void _glfwPlatformSetGammaRamp(const GLFWgammaramp* ramp);
298
Ralph Eastwood31c91542011-09-21 10:09:47 +0100299// Clipboard
Camilla Berglundbf1ada02012-04-09 16:00:54 +0200300void _glfwPlatformSetClipboardString(_GLFWwindow* window, const char* string);
Camilla Berglundf8687122012-04-12 00:51:58 +0200301const char* _glfwPlatformGetClipboardString(_GLFWwindow* window);
Ralph Eastwood31c91542011-09-21 10:09:47 +0100302
Camilla Berglund3249f812010-09-07 17:34:51 +0200303// Joystick
Camilla Berglundd46b2222010-09-08 17:30:21 +0200304int _glfwPlatformGetJoystickParam(int joy, int param);
305int _glfwPlatformGetJoystickPos(int joy, float* pos, int numaxes);
306int _glfwPlatformGetJoystickButtons(int joy, unsigned char* buttons, int numbuttons);
Camilla Berglund3249f812010-09-07 17:34:51 +0200307
308// Time
Camilla Berglundd46b2222010-09-08 17:30:21 +0200309double _glfwPlatformGetTime(void);
310void _glfwPlatformSetTime(double time);
Camilla Berglund3249f812010-09-07 17:34:51 +0200311
312// Window management
Camilla Berglund819d0442010-09-13 23:42:51 +0200313int _glfwPlatformOpenWindow(_GLFWwindow* window, const _GLFWwndconfig* wndconfig, const _GLFWfbconfig* fbconfig);
Camilla Berglund135194a2010-09-09 18:15:32 +0200314void _glfwPlatformCloseWindow(_GLFWwindow* window);
315void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title);
316void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height);
317void _glfwPlatformSetWindowPos(_GLFWwindow* window, int x, int y);
318void _glfwPlatformIconifyWindow(_GLFWwindow* window);
319void _glfwPlatformRestoreWindow(_GLFWwindow* window);
Camilla Berglund135194a2010-09-09 18:15:32 +0200320
321// Event management
322void _glfwPlatformPollEvents(void);
323void _glfwPlatformWaitEvents(void);
324
325// OpenGL context management
Camilla Berglundc1ab73b2011-07-27 16:01:27 +0200326void _glfwPlatformMakeContextCurrent(_GLFWwindow* window);
Camilla Berglundd46b2222010-09-08 17:30:21 +0200327void _glfwPlatformSwapBuffers(void);
328void _glfwPlatformSwapInterval(int interval);
329void _glfwPlatformRefreshWindowParams(void);
Camilla Berglund135194a2010-09-09 18:15:32 +0200330int _glfwPlatformExtensionSupported(const char* extension);
Camilla Berglundbf42c3c2012-06-05 00:16:40 +0200331GLFWglproc _glfwPlatformGetProcAddress(const char* procname);
Camilla Berglundc1ab73b2011-07-27 16:01:27 +0200332void _glfwPlatformCopyContext(_GLFWwindow* src, _GLFWwindow* dst, unsigned long mask);
Camilla Berglund3249f812010-09-07 17:34:51 +0200333
334
335//========================================================================
336// Prototypes for platform independent internal functions
337//========================================================================
338
Camilla Berglund3089e602010-09-16 03:48:19 +0200339// Fullscren management (fullscreen.c)
Camilla Berglund871e1a72012-08-02 18:03:43 +0200340int _glfwCompareVideoModes(const GLFWvidmode* first, const GLFWvidmode* second);
Camilla Berglund3089e602010-09-16 03:48:19 +0200341void _glfwSplitBPP(int bpp, int* red, int* green, int* blue);
342
Camilla Berglund596f56f2011-03-07 13:56:28 +0100343// Error handling (error.c)
Camilla Berglundba941b22012-08-02 15:13:57 +0200344void _glfwSetError(int error, const char* format, ...);
Camilla Berglundd6fe4472010-09-13 18:05:59 +0200345
Camilla Berglund3249f812010-09-07 17:34:51 +0200346// Window management (window.c)
Camilla Berglund0f481cb2011-03-07 14:16:31 +0100347void _glfwSetDefaultWindowHints(void);
Camilla Berglund3249f812010-09-07 17:34:51 +0200348
Camilla Berglundb016d642012-01-31 15:27:15 +0100349// Window event notification (window.c)
Camilla Berglundd0840bd2011-10-09 17:10:40 +0200350void _glfwInputWindowFocus(_GLFWwindow* window, GLboolean activated);
351void _glfwInputWindowPos(_GLFWwindow* window, int x, int y);
352void _glfwInputWindowSize(_GLFWwindow* window, int width, int height);
353void _glfwInputWindowIconify(_GLFWwindow* window, int iconified);
Camilla Berglund72ef5372011-10-09 21:12:13 +0200354void _glfwInputWindowDamage(_GLFWwindow* window);
Camilla Berglundd0840bd2011-10-09 17:10:40 +0200355
Camilla Berglundb016d642012-01-31 15:27:15 +0100356// Input event notification (input.c)
Camilla Berglund135194a2010-09-09 18:15:32 +0200357void _glfwInputKey(_GLFWwindow* window, int key, int action);
Camilla Berglund93ea3412010-09-09 19:33:37 +0200358void _glfwInputChar(_GLFWwindow* window, int character);
Camilla Berglund4ef9aec2012-03-28 21:54:09 +0200359void _glfwInputScroll(_GLFWwindow* window, double x, double y);
Camilla Berglund135194a2010-09-09 18:15:32 +0200360void _glfwInputMouseClick(_GLFWwindow* window, int button, int action);
Camilla Berglundd0840bd2011-10-09 17:10:40 +0200361void _glfwInputCursorMotion(_GLFWwindow* window, int x, int y);
Camilla Berglundc4806b92012-01-30 22:59:38 +0100362void _glfwInputCursorEnter(_GLFWwindow* window, int entered);
Camilla Berglund3249f812010-09-07 17:34:51 +0200363
Camilla Berglund596f56f2011-03-07 13:56:28 +0100364// OpenGL context helpers (opengl.c)
Camilla Berglundd46b2222010-09-08 17:30:21 +0200365int _glfwStringInExtensionString(const char* string, const GLubyte* extensions);
Camilla Berglundd46b2222010-09-08 17:30:21 +0200366const _GLFWfbconfig* _glfwChooseFBConfig(const _GLFWfbconfig* desired,
367 const _GLFWfbconfig* alternatives,
368 unsigned int count);
Camilla Berglund59896c32012-08-02 14:42:24 +0200369GLboolean _glfwRefreshContextParams(void);
Camilla Berglund19be24a2011-03-07 14:55:11 +0100370GLboolean _glfwIsValidContextConfig(_GLFWwndconfig* wndconfig);
Camilla Berglund59896c32012-08-02 14:42:24 +0200371GLboolean _glfwIsValidContext(_GLFWwndconfig* wndconfig);
Camilla Berglund3249f812010-09-07 17:34:51 +0200372
373
374#endif // _internal_h_