GLFW-b 0.0.1 → 0.0.2
raw patch · 5 files changed
+1527/−1 lines, 5 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
Files
- GLFW-b.cabal +5/−1
- glfw/lib/cocoa/platform.h +243/−0
- glfw/lib/internal.h +265/−0
- glfw/lib/win32/platform.h +530/−0
- glfw/lib/x11/platform.h +484/−0
GLFW-b.cabal view
@@ -1,5 +1,5 @@ name: GLFW-b-version: 0.0.1+version: 0.0.2 category: Graphics @@ -34,6 +34,10 @@ extra-source-files: README.md glfw/include/GL/glfw.h+ glfw/lib/internal.h+ glfw/lib/cocoa/platform.h+ glfw/lib/win32/platform.h+ glfw/lib/x11/platform.h -- -- -- -- -- -- -- -- -- --
+ glfw/lib/cocoa/platform.h view
@@ -0,0 +1,243 @@+//========================================================================+// GLFW - An OpenGL framework+// File: platform.h+// Platform: Mac OS X+// API Version: 2.7+// WWW: http://glfw.sourceforge.net+//------------------------------------------------------------------------+// Copyright (c) 2002-2006 Camilla Berglund+//+// This software is provided 'as-is', without any express or implied+// warranty. In no event will the authors be held liable for any damages+// arising from the use of this software.+//+// Permission is granted to anyone to use this software for any purpose,+// including commercial applications, and to alter it and redistribute it+// freely, subject to the following restrictions:+//+// 1. The origin of this software must not be misrepresented; you must not+// claim that you wrote the original software. If you use this software+// in a product, an acknowledgment in the product documentation would+// be appreciated but is not required.+//+// 2. Altered source versions must be plainly marked as such, and must not+// be misrepresented as being the original software.+//+// 3. This notice may not be removed or altered from any source+// distribution.+//+//========================================================================++#ifndef _platform_h_+#define _platform_h_+++// This is the Mac OS X version of GLFW+#define _GLFW_MAC_OS_X++#if defined(__OBJC__)+#import <Cocoa/Cocoa.h>+#else+typedef void *id;+#endif++#include <pthread.h>++#include "../../include/GL/glfw.h"++//========================================================================+// GLFW platform specific types+//========================================================================++//------------------------------------------------------------------------+// Pointer length integer+//------------------------------------------------------------------------+typedef intptr_t GLFWintptr;++//------------------------------------------------------------------------+// Window structure+//------------------------------------------------------------------------+typedef struct _GLFWwin_struct _GLFWwin;++struct _GLFWwin_struct {++// ========= PLATFORM INDEPENDENT MANDATORY PART =========================++ // User callback functions+ GLFWwindowsizefun windowSizeCallback;+ GLFWwindowclosefun windowCloseCallback;+ GLFWwindowrefreshfun windowRefreshCallback;+ GLFWmousebuttonfun mouseButtonCallback;+ GLFWmouseposfun mousePosCallback;+ GLFWmousewheelfun mouseWheelCallback;+ GLFWkeyfun keyCallback;+ GLFWcharfun charCallback;++ // User selected window settings+ int fullscreen; // Fullscreen flag+ int mouseLock; // Mouse-lock flag+ int autoPollEvents; // Auto polling flag+ int sysKeysDisabled; // System keys disabled flag+ int windowNoResize; // Resize- and maximize gadgets disabled flag+ int refreshRate; // Vertical monitor refresh rate++ // Window status & parameters+ int opened; // Flag telling if window is opened or not+ int active; // Application active flag+ int iconified; // Window iconified flag+ int width, height; // Window width and heigth+ int accelerated; // GL_TRUE if window is HW accelerated++ // Framebuffer attributes+ int redBits;+ int greenBits;+ int blueBits;+ int alphaBits;+ int depthBits;+ int stencilBits;+ int accumRedBits;+ int accumGreenBits;+ int accumBlueBits;+ int accumAlphaBits;+ int auxBuffers;+ int stereo;+ int samples;++ // OpenGL extensions and context attributes+ int has_GL_SGIS_generate_mipmap;+ int has_GL_ARB_texture_non_power_of_two;+ int glMajor, glMinor, glRevision;+ int glForward, glDebug, glProfile;++// ========= PLATFORM SPECIFIC PART ======================================++ id window;+ id pixelFormat;+ id context;+ id delegate;+ unsigned int modifierFlags;+};++GLFWGLOBAL _GLFWwin _glfwWin;+++//------------------------------------------------------------------------+// Library global data+//------------------------------------------------------------------------+GLFWGLOBAL struct {++// ========= PLATFORM INDEPENDENT MANDATORY PART =========================++ // Window opening hints+ _GLFWhints hints;++// ========= PLATFORM SPECIFIC PART ======================================++ // Timer data+ struct {+ double t0;+ } Timer;++ // dlopen handle for dynamically-loading extension function pointers+ void *OpenGLFramework;++ int Unbundled;++ id DesktopMode;++ id AutoreleasePool;++} _glfwLibrary;+++//------------------------------------------------------------------------+// User input status (some of this should go in _GLFWwin)+//------------------------------------------------------------------------+GLFWGLOBAL struct {++// ========= PLATFORM INDEPENDENT MANDATORY PART =========================++ // Mouse status+ int MousePosX, MousePosY;+ int WheelPos;+ char MouseButton[ GLFW_MOUSE_BUTTON_LAST+1 ];++ // Keyboard status+ char Key[ GLFW_KEY_LAST+1 ];+ int LastChar;++ // User selected settings+ int StickyKeys;+ int StickyMouseButtons;+ int KeyRepeat;+++// ========= PLATFORM SPECIFIC PART ======================================++ double WheelPosFloating;++} _glfwInput;++//------------------------------------------------------------------------+// Thread information+//------------------------------------------------------------------------+typedef struct _GLFWthread_struct _GLFWthread;++// Thread record (one for each thread)+struct _GLFWthread_struct {++ // Pointer to previous and next threads in linked list+ _GLFWthread *Previous, *Next;++ // GLFW user side thread information+ GLFWthread ID;+ GLFWthreadfun Function;++ // System side thread information+ pthread_t PosixID;+};++// General thread information+GLFWGLOBAL struct {++ // Critical section lock+ pthread_mutex_t CriticalSection;++ // Next thread ID to use (increments for every created thread)+ GLFWthread NextID;++ // First thread in linked list (always the main thread)+ _GLFWthread First;++} _glfwThrd;+++//========================================================================+// Macros for encapsulating critical code sections (i.e. making parts+// of GLFW thread safe)+//========================================================================++// Define so we can use the same thread code as X11+#define _glfw_numprocessors(n) { \+ int mib[2], ncpu; \+ size_t len = 1; \+ mib[0] = CTL_HW; \+ mib[1] = HW_NCPU; \+ n = 1; \+ if( sysctl( mib, 2, &ncpu, &len, NULL, 0 ) != -1 ) \+ { \+ if( len > 0 ) \+ { \+ n = ncpu; \+ } \+ } \+}++// Thread list management+#define ENTER_THREAD_CRITICAL_SECTION \+pthread_mutex_lock( &_glfwThrd.CriticalSection );+#define LEAVE_THREAD_CRITICAL_SECTION \+pthread_mutex_unlock( &_glfwThrd.CriticalSection );+++#endif // _platform_h_
+ glfw/lib/internal.h view
@@ -0,0 +1,265 @@+//========================================================================+// GLFW - An OpenGL framework+// File: internal.h+// Platform: Any+// API version: 2.7+// WWW: http://glfw.sourceforge.net+//------------------------------------------------------------------------+// Copyright (c) 2002-2006 Camilla Berglund+//+// This software is provided 'as-is', without any express or implied+// warranty. In no event will the authors be held liable for any damages+// arising from the use of this software.+//+// Permission is granted to anyone to use this software for any purpose,+// including commercial applications, and to alter it and redistribute it+// freely, subject to the following restrictions:+//+// 1. The origin of this software must not be misrepresented; you must not+// claim that you wrote the original software. If you use this software+// in a product, an acknowledgment in the product documentation would+// be appreciated but is not required.+//+// 2. Altered source versions must be plainly marked as such, and must not+// be misrepresented as being the original software.+//+// 3. This notice may not be removed or altered from any source+// distribution.+//+//========================================================================++#ifndef _internal_h_+#define _internal_h_++//========================================================================+// GLFWGLOBAL is a macro that places all global variables in the init.c+// module (all other modules reference global variables as 'extern')+//========================================================================++#if defined( _init_c_ )+#define GLFWGLOBAL+#else+#define GLFWGLOBAL extern+#endif+++//========================================================================+// Input handling definitions+//========================================================================++// Internal key and button state/action definitions+#define GLFW_STICK 2+++//========================================================================+// System independent include files+//========================================================================++#include <stdlib.h>+#include <string.h>+#include <stdio.h>+++//------------------------------------------------------------------------+// Window opening hints (set by glfwOpenWindowHint)+// A bucket of semi-random stuff bunched together for historical reasons+// This is used only by the platform independent code and only to store+// parameters passed to us by glfwOpenWindowHint+//------------------------------------------------------------------------+typedef struct {+ int refreshRate;+ int accumRedBits;+ int accumGreenBits;+ int accumBlueBits;+ int accumAlphaBits;+ int auxBuffers;+ int stereo;+ int windowNoResize;+ int samples;+ int glMajor;+ int glMinor;+ int glForward;+ int glDebug;+ int glProfile;+} _GLFWhints;+++//------------------------------------------------------------------------+// Platform specific definitions goes in platform.h (which also includes+// glfw.h)+//------------------------------------------------------------------------++#include "platform.h"+++//------------------------------------------------------------------------+// Parameters relating to the creation of the context and window but not+// directly related to the properties of the framebuffer+// This is used to pass window and context creation parameters from the+// platform independent code to the platform specific code+//------------------------------------------------------------------------+typedef struct {+ int mode;+ int refreshRate;+ int windowNoResize;+ int glMajor;+ int glMinor;+ int glForward;+ int glDebug;+ int glProfile;+} _GLFWwndconfig;+++//------------------------------------------------------------------------+// Framebuffer configuration descriptor, i.e. buffers and their sizes+// Also a platform specific ID used to map back to the actual backend APIs+// This is used to pass framebuffer parameters from the platform independent+// code to the platform specific code, and also to enumerate and select+// available framebuffer configurations+//------------------------------------------------------------------------+typedef struct {+ int redBits;+ int greenBits;+ int blueBits;+ int alphaBits;+ int depthBits;+ int stencilBits;+ int accumRedBits;+ int accumGreenBits;+ int accumBlueBits;+ int accumAlphaBits;+ int auxBuffers;+ int stereo;+ int samples;+ GLFWintptr platformID;+} _GLFWfbconfig;+++//========================================================================+// System independent global variables (GLFW internals)+//========================================================================++// Flag indicating if GLFW has been initialized+#if defined( _init_c_ )+int _glfwInitialized = 0;+#else+GLFWGLOBAL int _glfwInitialized;+#endif+++//------------------------------------------------------------------------+// Abstract data stream (for image I/O)+//------------------------------------------------------------------------+typedef struct {+ FILE* file;+ void* data;+ long position;+ long size;+} _GLFWstream;+++//========================================================================+// Prototypes for platform specific implementation functions+//========================================================================++// Init/terminate+int _glfwPlatformInit( void );+int _glfwPlatformTerminate( void );++// Enable/Disable+void _glfwPlatformEnableSystemKeys( void );+void _glfwPlatformDisableSystemKeys( void );++// Fullscreen+int _glfwPlatformGetVideoModes( GLFWvidmode *list, int maxcount );+void _glfwPlatformGetDesktopMode( GLFWvidmode *mode );++// OpenGL extensions+int _glfwPlatformExtensionSupported( const char *extension );+void * _glfwPlatformGetProcAddress( const char *procname );++// Joystick+int _glfwPlatformGetJoystickParam( int joy, int param );+int _glfwPlatformGetJoystickPos( int joy, float *pos, int numaxes );+int _glfwPlatformGetJoystickButtons( int joy, unsigned char *buttons, int numbuttons );++// Threads+GLFWthread _glfwPlatformCreateThread( GLFWthreadfun fun, void *arg );+void _glfwPlatformDestroyThread( GLFWthread ID );+int _glfwPlatformWaitThread( GLFWthread ID, int waitmode );+GLFWthread _glfwPlatformGetThreadID( void );+GLFWmutex _glfwPlatformCreateMutex( void );+void _glfwPlatformDestroyMutex( GLFWmutex mutex );+void _glfwPlatformLockMutex( GLFWmutex mutex );+void _glfwPlatformUnlockMutex( GLFWmutex mutex );+GLFWcond _glfwPlatformCreateCond( void );+void _glfwPlatformDestroyCond( GLFWcond cond );+void _glfwPlatformWaitCond( GLFWcond cond, GLFWmutex mutex, double timeout );+void _glfwPlatformSignalCond( GLFWcond cond );+void _glfwPlatformBroadcastCond( GLFWcond cond );+int _glfwPlatformGetNumberOfProcessors( void );++// Time+double _glfwPlatformGetTime( void );+void _glfwPlatformSetTime( double time );+void _glfwPlatformSleep( double time );++// Window management+int _glfwPlatformOpenWindow( int width, int height, const _GLFWwndconfig *wndconfig, const _GLFWfbconfig *fbconfig );+void _glfwPlatformCloseWindow( void );+void _glfwPlatformSetWindowTitle( const char *title );+void _glfwPlatformSetWindowSize( int width, int height );+void _glfwPlatformSetWindowPos( int x, int y );+void _glfwPlatformIconifyWindow( void );+void _glfwPlatformRestoreWindow( void );+void _glfwPlatformSwapBuffers( void );+void _glfwPlatformSwapInterval( int interval );+void _glfwPlatformRefreshWindowParams( void );+void _glfwPlatformPollEvents( void );+void _glfwPlatformWaitEvents( void );+void _glfwPlatformHideMouseCursor( void );+void _glfwPlatformShowMouseCursor( void );+void _glfwPlatformSetMouseCursorPos( int x, int y );+++//========================================================================+// Prototypes for platform independent internal functions+//========================================================================++// Window management (window.c)+void _glfwClearWindowHints( void );++// Input handling (window.c)+void _glfwClearInput( void );+void _glfwInputDeactivation( void );+void _glfwInputKey( int key, int action );+void _glfwInputChar( int character, int action );+void _glfwInputMouseClick( int button, int action );++// Threads (thread.c)+_GLFWthread * _glfwGetThreadPointer( int ID );+void _glfwAppendThread( _GLFWthread * t );+void _glfwRemoveThread( _GLFWthread * t );++// OpenGL extensions (glext.c)+void _glfwParseGLVersion( int *major, int *minor, int *rev );+int _glfwStringInExtensionString( const char *string, const GLubyte *extensions );++// Abstracted data streams (stream.c)+int _glfwOpenFileStream( _GLFWstream *stream, const char *name, const char *mode );+int _glfwOpenBufferStream( _GLFWstream *stream, void *data, long size );+long _glfwReadStream( _GLFWstream *stream, void *data, long size );+long _glfwTellStream( _GLFWstream *stream );+int _glfwSeekStream( _GLFWstream *stream, long offset, int whence );+void _glfwCloseStream( _GLFWstream *stream );++// Targa image I/O (tga.c)+int _glfwReadTGA( _GLFWstream *s, GLFWimage *img, int flags );++// Framebuffer configs+const _GLFWfbconfig *_glfwChooseFBConfig( const _GLFWfbconfig *desired,+ const _GLFWfbconfig *alternatives,+ unsigned int count );+++#endif // _internal_h_
+ glfw/lib/win32/platform.h view
@@ -0,0 +1,530 @@+//========================================================================+// GLFW - An OpenGL framework+// File: platform.h+// Platform: Windows+// API version: 2.7+// WWW: http://glfw.sourceforge.net+//------------------------------------------------------------------------+// Copyright (c) 2002-2006 Camilla Berglund+//+// This software is provided 'as-is', without any express or implied+// warranty. In no event will the authors be held liable for any damages+// arising from the use of this software.+//+// Permission is granted to anyone to use this software for any purpose,+// including commercial applications, and to alter it and redistribute it+// freely, subject to the following restrictions:+//+// 1. The origin of this software must not be misrepresented; you must not+// claim that you wrote the original software. If you use this software+// in a product, an acknowledgment in the product documentation would+// be appreciated but is not required.+//+// 2. Altered source versions must be plainly marked as such, and must not+// be misrepresented as being the original software.+//+// 3. This notice may not be removed or altered from any source+// distribution.+//+//========================================================================++#ifndef _platform_h_+#define _platform_h_+++// This is the Windows version of GLFW+#define _GLFW_WIN32++// We don't need all the fancy stuff+#define NOMINMAX+#define WIN32_LEAN_AND_MEAN+#define VC_EXTRALEAN++// Include files+#include <windows.h>+#include <mmsystem.h>+#include "../../include/GL/glfw.h"+++//========================================================================+// Hack: Define things that some <windows.h>'s do not define+//========================================================================++// Some old versions of w32api (used by MinGW and Cygwin) define+// WH_KEYBOARD_LL without typedef:ing KBDLLHOOKSTRUCT (!)+#if defined(__MINGW32__) || defined(__CYGWIN__)+#include <w32api.h>+#if defined(WH_KEYBOARD_LL) && (__W32API_MAJOR_VERSION == 1) && (__W32API_MINOR_VERSION <= 2)+#undef WH_KEYBOARD_LL+#endif+#endif++//------------------------------------------------------------------------+// ** NOTE ** If this gives you compiler errors and you are using MinGW+// (or Dev-C++), update to w32api version 1.3 or later:+// http://sourceforge.net/project/showfiles.php?group_id=2435+//------------------------------------------------------------------------+#ifndef WH_KEYBOARD_LL+#define WH_KEYBOARD_LL 13+typedef struct tagKBDLLHOOKSTRUCT {+ DWORD vkCode;+ DWORD scanCode;+ DWORD flags;+ DWORD time;+ DWORD dwExtraInfo;+} KBDLLHOOKSTRUCT, FAR *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;+#endif // WH_KEYBOARD_LL++#ifndef LLKHF_ALTDOWN+#define LLKHF_ALTDOWN 0x00000020+#endif++#ifndef SPI_SETSCREENSAVERRUNNING+#define SPI_SETSCREENSAVERRUNNING 97+#endif+#ifndef SPI_GETANIMATION+#define SPI_GETANIMATION 72+#endif+#ifndef SPI_SETANIMATION+#define SPI_SETANIMATION 73+#endif+#ifndef SPI_GETFOREGROUNDLOCKTIMEOUT+#define SPI_GETFOREGROUNDLOCKTIMEOUT 0x2000+#endif+#ifndef SPI_SETFOREGROUNDLOCKTIMEOUT+#define SPI_SETFOREGROUNDLOCKTIMEOUT 0x2001+#endif++#ifndef CDS_FULLSCREEN+#define CDS_FULLSCREEN 4+#endif++#ifndef PFD_GENERIC_ACCELERATED+#define PFD_GENERIC_ACCELERATED 0x00001000+#endif+#ifndef PFD_DEPTH_DONTCARE+#define PFD_DEPTH_DONTCARE 0x20000000+#endif++#ifndef ENUM_CURRENT_SETTINGS+#define ENUM_CURRENT_SETTINGS -1+#endif+#ifndef ENUM_REGISTRY_SETTINGS+#define ENUM_REGISTRY_SETTINGS -2+#endif++#ifndef WM_MOUSEWHEEL+#define WM_MOUSEWHEEL 0x020A+#endif+#ifndef WHEEL_DELTA+#define WHEEL_DELTA 120+#endif++#ifndef WM_XBUTTONDOWN+#define WM_XBUTTONDOWN 0x020B+#endif+#ifndef WM_XBUTTONUP+#define WM_XBUTTONUP 0x020C+#endif+#ifndef XBUTTON1+#define XBUTTON1 1+#endif+#ifndef XBUTTON2+#define XBUTTON2 2+#endif++#ifndef WGL_ARB_pixel_format++// wglSwapIntervalEXT typedef (Win32 buffer-swap interval control)+typedef int (APIENTRY * WGLSWAPINTERVALEXT_T) (int);+// wglGetPixelFormatAttribivARB typedef+typedef BOOL (WINAPI * WGLGETPIXELFORMATATTRIBIVARB_T) (HDC, int, int, UINT, const int *, int *);+// wglGetExtensionStringEXT typedef+typedef const char *(APIENTRY * WGLGETEXTENSIONSSTRINGEXT_T)( void );+// wglGetExtensionStringARB typedef+typedef const char *(APIENTRY * WGLGETEXTENSIONSSTRINGARB_T)( HDC );++/* Constants for wglGetPixelFormatAttribivARB */+#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000+#define WGL_DRAW_TO_WINDOW_ARB 0x2001+#define WGL_SUPPORT_OPENGL_ARB 0x2010+#define WGL_ACCELERATION_ARB 0x2003+#define WGL_DOUBLE_BUFFER_ARB 0x2011+#define WGL_STEREO_ARB 0x2012+#define WGL_PIXEL_TYPE_ARB 0x2013+#define WGL_COLOR_BITS_ARB 0x2014+#define WGL_RED_BITS_ARB 0x2015+#define WGL_GREEN_BITS_ARB 0x2017+#define WGL_BLUE_BITS_ARB 0x2019+#define WGL_ALPHA_BITS_ARB 0x201B+#define WGL_ACCUM_BITS_ARB 0x201D+#define WGL_ACCUM_RED_BITS_ARB 0x201E+#define WGL_ACCUM_GREEN_BITS_ARB 0x201F+#define WGL_ACCUM_BLUE_BITS_ARB 0x2020+#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021+#define WGL_DEPTH_BITS_ARB 0x2022+#define WGL_STENCIL_BITS_ARB 0x2023+#define WGL_AUX_BUFFERS_ARB 0x2024+#define WGL_SAMPLE_BUFFERS_ARB 0x2041+#define WGL_SAMPLES_ARB 0x2042++/* Constants for WGL_ACCELERATION_ARB */+#define WGL_NO_ACCELERATION_ARB 0x2025+#define WGL_GENERIC_ACCELERATION_ARB 0x2026+#define WGL_FULL_ACCELERATION_ARB 0x2027++/* Constants for WGL_PIXEL_TYPE_ARB */+#define WGL_TYPE_RGBA_ARB 0x202B+#define WGL_TYPE_COLORINDEX_ARB 0x202C++#endif /*WGL_ARB_pixel_format*/+++#ifndef WGL_ARB_create_context++/* wglCreateContextAttribsARB */+typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC, HGLRC, const int *);++/* Tokens for wglCreateContextAttribsARB attributes */+#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091+#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092+#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093+#define WGL_CONTEXT_FLAGS_ARB 0x2094+#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126++/* Bits for WGL_CONTEXT_FLAGS_ARB */+#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001+#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002++/* Bits for WGL_CONTEXT_PROFILE_MASK_ARB */+#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001+#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002++#endif /*WGL_ARB_create_context*/+++//========================================================================+// DLLs that are loaded at glfwInit()+//========================================================================++// gdi32.dll function pointer typedefs+#ifndef _GLFW_NO_DLOAD_GDI32+typedef int (WINAPI * CHOOSEPIXELFORMAT_T) (HDC,CONST PIXELFORMATDESCRIPTOR*);+typedef int (WINAPI * DESCRIBEPIXELFORMAT_T) (HDC,int,UINT,LPPIXELFORMATDESCRIPTOR);+typedef int (WINAPI * GETPIXELFORMAT_T) (HDC);+typedef BOOL (WINAPI * SETPIXELFORMAT_T) (HDC,int,const PIXELFORMATDESCRIPTOR*);+typedef BOOL (WINAPI * SWAPBUFFERS_T) (HDC);+#endif // _GLFW_NO_DLOAD_GDI32++// winmm.dll function pointer typedefs+#ifndef _GLFW_NO_DLOAD_WINMM+typedef MMRESULT (WINAPI * JOYGETDEVCAPSA_T) (UINT,LPJOYCAPSA,UINT);+typedef MMRESULT (WINAPI * JOYGETPOS_T) (UINT,LPJOYINFO);+typedef MMRESULT (WINAPI * JOYGETPOSEX_T) (UINT,LPJOYINFOEX);+typedef DWORD (WINAPI * TIMEGETTIME_T) (void);+#endif // _GLFW_NO_DLOAD_WINMM+++// gdi32.dll shortcuts+#ifndef _GLFW_NO_DLOAD_GDI32+#define _glfw_ChoosePixelFormat _glfwLibrary.Libs.ChoosePixelFormat+#define _glfw_DescribePixelFormat _glfwLibrary.Libs.DescribePixelFormat+#define _glfw_GetPixelFormat _glfwLibrary.Libs.GetPixelFormat+#define _glfw_SetPixelFormat _glfwLibrary.Libs.SetPixelFormat+#define _glfw_SwapBuffers _glfwLibrary.Libs.SwapBuffers+#else+#define _glfw_ChoosePixelFormat ChoosePixelFormat+#define _glfw_DescribePixelFormat DescribePixelFormat+#define _glfw_GetPixelFormat GetPixelFormat+#define _glfw_SetPixelFormat SetPixelFormat+#define _glfw_SwapBuffers SwapBuffers+#endif // _GLFW_NO_DLOAD_GDI32++// winmm.dll shortcuts+#ifndef _GLFW_NO_DLOAD_WINMM+#define _glfw_joyGetDevCaps _glfwLibrary.Libs.joyGetDevCapsA+#define _glfw_joyGetPos _glfwLibrary.Libs.joyGetPos+#define _glfw_joyGetPosEx _glfwLibrary.Libs.joyGetPosEx+#define _glfw_timeGetTime _glfwLibrary.Libs.timeGetTime+#else+#define _glfw_joyGetDevCaps joyGetDevCapsA+#define _glfw_joyGetPos joyGetPos+#define _glfw_joyGetPosEx joyGetPosEx+#define _glfw_timeGetTime timeGetTime+#endif // _GLFW_NO_DLOAD_WINMM+++//========================================================================+// GLFW platform specific types+//========================================================================++//------------------------------------------------------------------------+// Pointer length integer+//------------------------------------------------------------------------+typedef INT_PTR GLFWintptr;+++//------------------------------------------------------------------------+// Window structure+//------------------------------------------------------------------------+typedef struct _GLFWwin_struct _GLFWwin;++struct _GLFWwin_struct {++// ========= PLATFORM INDEPENDENT MANDATORY PART =========================++ // User callback functions+ GLFWwindowsizefun windowSizeCallback;+ GLFWwindowclosefun windowCloseCallback;+ GLFWwindowrefreshfun windowRefreshCallback;+ GLFWmousebuttonfun mouseButtonCallback;+ GLFWmouseposfun mousePosCallback;+ GLFWmousewheelfun mouseWheelCallback;+ GLFWkeyfun keyCallback;+ GLFWcharfun charCallback;++ // User selected window settings+ int fullscreen; // Fullscreen flag+ int mouseLock; // Mouse-lock flag+ int autoPollEvents; // Auto polling flag+ int sysKeysDisabled; // System keys disabled flag+ int windowNoResize; // Resize- and maximize gadgets disabled flag+ int refreshRate; // Vertical monitor refresh rate++ // Window status & parameters+ int opened; // Flag telling if window is opened or not+ int active; // Application active flag+ int iconified; // Window iconified flag+ int width, height; // Window width and heigth+ int accelerated; // GL_TRUE if window is HW accelerated++ // Framebuffer attributes+ int redBits;+ int greenBits;+ int blueBits;+ int alphaBits;+ int depthBits;+ int stencilBits;+ int accumRedBits;+ int accumGreenBits;+ int accumBlueBits;+ int accumAlphaBits;+ int auxBuffers;+ int stereo;+ int samples;++ // OpenGL extensions and context attributes+ int has_GL_SGIS_generate_mipmap;+ int has_GL_ARB_texture_non_power_of_two;+ int glMajor, glMinor, glRevision;+ int glForward, glDebug, glProfile;+++// ========= PLATFORM SPECIFIC PART ======================================++ // Platform specific window resources+ HDC DC; // Private GDI device context+ HGLRC context; // Permanent rendering context+ HWND window; // Window handle+ ATOM classAtom; // Window class atom+ int modeID; // Mode ID for fullscreen mode+ HHOOK keyboardHook; // Keyboard hook handle+ DWORD dwStyle; // Window styles used for window creation+ DWORD dwExStyle; // --"--++ // Platform specific extensions (context specific)+ WGLSWAPINTERVALEXT_T SwapIntervalEXT;+ WGLGETPIXELFORMATATTRIBIVARB_T GetPixelFormatAttribivARB;+ WGLGETEXTENSIONSSTRINGEXT_T GetExtensionsStringEXT;+ WGLGETEXTENSIONSSTRINGARB_T GetExtensionsStringARB;+ PFNWGLCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB;+ GLboolean has_WGL_EXT_swap_control;+ GLboolean has_WGL_ARB_multisample;+ GLboolean has_WGL_ARB_pixel_format;+ GLboolean has_WGL_ARB_create_context;++ // Various platform specific internal variables+ int oldMouseLock; // Old mouse-lock flag (used for remembering+ // mouse-lock state when iconifying)+ int oldMouseLockValid;+ int desiredRefreshRate; // Desired vertical monitor refresh rate++};++GLFWGLOBAL _GLFWwin _glfwWin;+++//------------------------------------------------------------------------+// User input status (most of this should go in _GLFWwin)+//------------------------------------------------------------------------+GLFWGLOBAL struct {++// ========= PLATFORM INDEPENDENT MANDATORY PART =========================++ // Mouse status+ int MousePosX, MousePosY;+ int WheelPos;+ char MouseButton[ GLFW_MOUSE_BUTTON_LAST+1 ];++ // Keyboard status+ char Key[ GLFW_KEY_LAST+1 ];+ int LastChar;++ // User selected settings+ int StickyKeys;+ int StickyMouseButtons;+ int KeyRepeat;+++// ========= PLATFORM SPECIFIC PART ======================================++ // Platform specific internal variables+ int MouseMoved, OldMouseX, OldMouseY;++} _glfwInput;+++//------------------------------------------------------------------------+// Library global data+//------------------------------------------------------------------------+GLFWGLOBAL struct {++ // Window opening hints+ _GLFWhints hints;++// ========= PLATFORM SPECIFIC PART ======================================++ HINSTANCE instance; // Instance of the application++ // Timer data+ struct {+ int HasPerformanceCounter;+ double Resolution;+ unsigned int t0_32;+ __int64 t0_64;+ } Timer;++ // System information+ struct {+ int winVer;+ int hasUnicode;+ DWORD foregroundLockTimeout;+ } Sys;++#if !defined(_GLFW_NO_DLOAD_WINMM) || !defined(_GLFW_NO_DLOAD_GDI32)+ // Library handles and function pointers+ struct {+#ifndef _GLFW_NO_DLOAD_GDI32+ // gdi32.dll+ HINSTANCE gdi32;+ CHOOSEPIXELFORMAT_T ChoosePixelFormat;+ DESCRIBEPIXELFORMAT_T DescribePixelFormat;+ GETPIXELFORMAT_T GetPixelFormat;+ SETPIXELFORMAT_T SetPixelFormat;+ SWAPBUFFERS_T SwapBuffers;+#endif // _GLFW_NO_DLOAD_GDI32++ // winmm.dll+#ifndef _GLFW_NO_DLOAD_WINMM+ HINSTANCE winmm;+ JOYGETDEVCAPSA_T joyGetDevCapsA;+ JOYGETPOS_T joyGetPos;+ JOYGETPOSEX_T joyGetPosEx;+ TIMEGETTIME_T timeGetTime;+#endif // _GLFW_NO_DLOAD_WINMM+ } Libs;+#endif++} _glfwLibrary;+++//------------------------------------------------------------------------+// Thread record (one for each thread)+//------------------------------------------------------------------------+typedef struct _GLFWthread_struct _GLFWthread;++struct _GLFWthread_struct {++// ========= PLATFORM INDEPENDENT MANDATORY PART =========================++ // Pointer to previous and next threads in linked list+ _GLFWthread *Previous, *Next;++ // GLFW user side thread information+ GLFWthread ID;+ GLFWthreadfun Function;++// ========= PLATFORM SPECIFIC PART ======================================++ // System side thread information+ HANDLE Handle;+ DWORD WinID;++};+++//------------------------------------------------------------------------+// General thread information+//------------------------------------------------------------------------+GLFWGLOBAL struct {++// ========= PLATFORM INDEPENDENT MANDATORY PART =========================++ // Next thread ID to use (increments for every created thread)+ GLFWthread NextID;++ // First thread in linked list (always the main thread)+ _GLFWthread First;++// ========= PLATFORM SPECIFIC PART ======================================++ // Critical section lock+ CRITICAL_SECTION CriticalSection;++} _glfwThrd;++++//========================================================================+// Macros for encapsulating critical code sections (i.e. making parts+// of GLFW thread safe)+//========================================================================++// Thread list management+#define ENTER_THREAD_CRITICAL_SECTION \+ EnterCriticalSection( &_glfwThrd.CriticalSection );+#define LEAVE_THREAD_CRITICAL_SECTION \+ LeaveCriticalSection( &_glfwThrd.CriticalSection );+++//========================================================================+// Various Windows version constants+//========================================================================++#define _GLFW_WIN_UNKNOWN 0x0000 // Earlier than 95 or NT4+#define _GLFW_WIN_95 0x0001+#define _GLFW_WIN_98 0x0002+#define _GLFW_WIN_ME 0x0003+#define _GLFW_WIN_UNKNOWN_9x 0x0004 // Later than ME+#define _GLFW_WIN_NT4 0x0101+#define _GLFW_WIN_2K 0x0102+#define _GLFW_WIN_XP 0x0103+#define _GLFW_WIN_NET_SERVER 0x0104+#define _GLFW_WIN_UNKNOWN_NT 0x0105 // Later than .NET Server+++//========================================================================+// Prototypes for platform specific internal functions+//========================================================================++// Time+void _glfwInitTimer( void );++// Fullscreen support+int _glfwGetClosestVideoModeBPP( int *w, int *h, int *bpp, int *refresh );+int _glfwGetClosestVideoMode( int *w, int *h, int *r, int *g, int *b, int *refresh );+void _glfwSetVideoModeMODE( int mode );+void _glfwSetVideoMode( int *w, int *h, int r, int g, int b, int refresh );+++#endif // _platform_h_
+ glfw/lib/x11/platform.h view
@@ -0,0 +1,484 @@+//========================================================================+// GLFW - An OpenGL framework+// File: platform.h+// Platform: X11 (Unix)+// API version: 2.7+// WWW: http://glfw.sourceforge.net+//------------------------------------------------------------------------+// Copyright (c) 2002-2006 Camilla Berglund+//+// This software is provided 'as-is', without any express or implied+// warranty. In no event will the authors be held liable for any damages+// arising from the use of this software.+//+// Permission is granted to anyone to use this software for any purpose,+// including commercial applications, and to alter it and redistribute it+// freely, subject to the following restrictions:+//+// 1. The origin of this software must not be misrepresented; you must not+// claim that you wrote the original software. If you use this software+// in a product, an acknowledgment in the product documentation would+// be appreciated but is not required.+//+// 2. Altered source versions must be plainly marked as such, and must not+// be misrepresented as being the original software.+//+// 3. This notice may not be removed or altered from any source+// distribution.+//+//========================================================================++#ifndef _platform_h_+#define _platform_h_+++// This is the X11 version of GLFW+#define _GLFW_X11+++// Include files+#include <sys/time.h>+#include <unistd.h>+#include <signal.h>+#include <X11/Xlib.h>+#include <X11/keysym.h>+#include <X11/Xatom.h>+#include <GL/glx.h>+#include "../../include/GL/glfw.h"++// Do we have pthread support?+#ifdef _GLFW_HAS_PTHREAD+ #include <pthread.h>+ #include <sched.h>+#endif++// We need declarations for GLX version 1.3 or above even if the server doesn't+// support version 1.3+#ifndef GLX_VERSION_1_3+ #error "GLX header version 1.3 or above is required"+#endif++// With XFree86, we can use the XF86VidMode extension+#if defined( _GLFW_HAS_XF86VIDMODE )+ #include <X11/extensions/xf86vmode.h>+#endif++#if defined( _GLFW_HAS_XRANDR )+ #include <X11/extensions/Xrandr.h>+#endif++// Do we have support for dlopen/dlsym?+#if defined( _GLFW_HAS_DLOPEN )+ #include <dlfcn.h>+#endif++// We support two different ways for getting the number of processors in+// the system: sysconf (POSIX) and sysctl (BSD?)+#if defined( _GLFW_HAS_SYSCONF )++ // Use a single constant for querying number of online processors using+ // the sysconf function (e.g. SGI defines _SC_NPROC_ONLN instead of+ // _SC_NPROCESSORS_ONLN)+ #ifndef _SC_NPROCESSORS_ONLN+ #ifdef _SC_NPROC_ONLN+ #define _SC_NPROCESSORS_ONLN _SC_NPROC_ONLN+ #else+ #error POSIX constant _SC_NPROCESSORS_ONLN not defined!+ #endif+ #endif++ // Macro for querying the number of processors+ #define _glfw_numprocessors(n) n=(int)sysconf(_SC_NPROCESSORS_ONLN)++#elif defined( _GLFW_HAS_SYSCTL )++ #include <sys/types.h>+ #include <sys/sysctl.h>++ // Macro for querying the number of processors+ #define _glfw_numprocessors(n) { \+ int mib[2], ncpu; \+ size_t len = 1; \+ mib[0] = CTL_HW; \+ mib[1] = HW_NCPU; \+ n = 1; \+ if( sysctl( mib, 2, &ncpu, &len, NULL, 0 ) != -1 ) \+ { \+ if( len > 0 ) \+ { \+ n = ncpu; \+ } \+ } \+ }++#else++ // If neither sysconf nor sysctl is supported, assume single processor+ // system+ #define _glfw_numprocessors(n) n=1++#endif++// Pointer length integer+// One day, this will most likely move into glfw.h+typedef intptr_t GLFWintptr;+++#ifndef GLX_SGI_swap_control++// Function signature for GLX_SGI_swap_control+typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval);++#endif /*GLX_SGI_swap_control*/+++#ifndef GLX_SGIX_fbconfig++/* Type definitions for GLX_SGIX_fbconfig */+typedef XID GLXFBConfigIDSGIX;+typedef struct __GLXFBConfigRec *GLXFBConfigSGIX;++/* Function signatures for GLX_SGIX_fbconfig */+typedef int ( * PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value);+typedef GLXFBConfigSGIX * ( * PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, int *attrib_list, int *nelements);+typedef GLXContext ( * PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct);+typedef XVisualInfo * ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config);++/* Tokens for GLX_SGIX_fbconfig */+#define GLX_WINDOW_BIT_SGIX 0x00000001+#define GLX_PIXMAP_BIT_SGIX 0x00000002+#define GLX_RGBA_BIT_SGIX 0x00000001+#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002+#define GLX_DRAWABLE_TYPE_SGIX 0x8010+#define GLX_RENDER_TYPE_SGIX 0x8011+#define GLX_X_RENDERABLE_SGIX 0x8012+#define GLX_FBCONFIG_ID_SGIX 0x8013+#define GLX_RGBA_TYPE_SGIX 0x8014+#define GLX_COLOR_INDEX_TYPE_SGIX 0x8015+#define GLX_SCREEN_EXT 0x800C++#endif /*GLX_SGIX_fbconfig*/+++#ifndef GLX_ARB_create_context++/* Tokens for glXCreateContextAttribsARB attributes */+#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091+#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092+#define GLX_CONTEXT_FLAGS_ARB 0x2094++/* Bits for WGL_CONTEXT_FLAGS_ARB */+#define GLX_CONTEXT_DEBUG_BIT_ARB 0x0001+#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002++/* Prototype for glXCreateContextAttribs */+typedef GLXContext (*PFNGLXCREATECONTEXTATTRIBSARBPROC)( Display *display, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);++#endif /*GLX_ARB_create_context*/+++#ifndef GLX_ARB_create_context_profile++/* Tokens for glXCreateContextAttribsARB attributes */+#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126++/* BIts for GLX_CONTEXT_PROFILE_MASK_ARB */+#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001+#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002++#endif /*GLX_ARB_create_context_profile*/+++//========================================================================+// Global variables (GLFW internals)+//========================================================================++//------------------------------------------------------------------------+// Window structure+//------------------------------------------------------------------------+typedef struct _GLFWwin_struct _GLFWwin;++struct _GLFWwin_struct {++// ========= PLATFORM INDEPENDENT MANDATORY PART =========================++ // User callback functions+ GLFWwindowsizefun windowSizeCallback;+ GLFWwindowclosefun windowCloseCallback;+ GLFWwindowrefreshfun windowRefreshCallback;+ GLFWmousebuttonfun mouseButtonCallback;+ GLFWmouseposfun mousePosCallback;+ GLFWmousewheelfun mouseWheelCallback;+ GLFWkeyfun keyCallback;+ GLFWcharfun charCallback;++ // User selected window settings+ int fullscreen; // Fullscreen flag+ int mouseLock; // Mouse-lock flag+ int autoPollEvents; // Auto polling flag+ int sysKeysDisabled; // System keys disabled flag+ int windowNoResize; // Resize- and maximize gadgets disabled flag+ int refreshRate; // Vertical monitor refresh rate++ // Window status & parameters+ int opened; // Flag telling if window is opened or not+ int active; // Application active flag+ int iconified; // Window iconified flag+ int width, height; // Window width and heigth+ int accelerated; // GL_TRUE if window is HW accelerated++ // Framebuffer attributes+ int redBits;+ int greenBits;+ int blueBits;+ int alphaBits;+ int depthBits;+ int stencilBits;+ int accumRedBits;+ int accumGreenBits;+ int accumBlueBits;+ int accumAlphaBits;+ int auxBuffers;+ int stereo;+ int samples;++ // OpenGL extensions and context attributes+ int has_GL_SGIS_generate_mipmap;+ int has_GL_ARB_texture_non_power_of_two;+ int glMajor, glMinor, glRevision;+ int glForward, glDebug, glProfile;+++// ========= PLATFORM SPECIFIC PART ======================================++ // Platform specific window resources+ Colormap colormap; // Window colormap:+ Window window; // Window+ int screen; // Screen ID+ XVisualInfo *visual; // Visual+ GLXFBConfigID fbconfigID; // ID of the selected GLXFBConfig+ GLXContext context; // OpenGL rendering context+ Atom WMDeleteWindow; // For WM close detection+ Atom WMPing; // For WM ping response++ // GLX extensions+ PFNGLXSWAPINTERVALSGIPROC SwapIntervalSGI;+ PFNGLXGETFBCONFIGATTRIBSGIXPROC GetFBConfigAttribSGIX;+ PFNGLXCHOOSEFBCONFIGSGIXPROC ChooseFBConfigSGIX;+ PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC CreateContextWithConfigSGIX;+ PFNGLXGETVISUALFROMFBCONFIGSGIXPROC GetVisualFromFBConfigSGIX;+ PFNGLXCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB;+ GLboolean has_GLX_SGIX_fbconfig;+ GLboolean has_GLX_SGI_swap_control;+ GLboolean has_GLX_ARB_multisample;+ GLboolean has_GLX_ARB_create_context;+ GLboolean has_GLX_ARB_create_context_profile;++ // Various platform specific internal variables+ int overrideRedirect; // True if window is OverrideRedirect+ int keyboardGrabbed; // True if keyboard is currently grabbed+ int pointerGrabbed; // True if pointer is currently grabbed+ int pointerHidden; // True if pointer is currently hidden+ int mapNotifyCount; // Used for during processing+ int focusInCount; // Used for during processing++ // Screensaver data+ struct {+ int changed;+ int timeout;+ int interval;+ int blanking;+ int exposure;+ } Saver;++ // Fullscreen data+ struct {+ int modeChanged;+#if defined( _GLFW_HAS_XF86VIDMODE )+ XF86VidModeModeInfo oldMode;+#endif+#if defined( _GLFW_HAS_XRANDR )+ SizeID oldSizeID;+ int oldWidth;+ int oldHeight;+ Rotation oldRotation;+#endif+ } FS;+};++GLFWGLOBAL _GLFWwin _glfwWin;+++//------------------------------------------------------------------------+// User input status (most of this should go in _GLFWwin)+//------------------------------------------------------------------------+GLFWGLOBAL struct {++// ========= PLATFORM INDEPENDENT MANDATORY PART =========================++ // Mouse status+ int MousePosX, MousePosY;+ int WheelPos;+ char MouseButton[ GLFW_MOUSE_BUTTON_LAST+1 ];++ // Keyboard status+ char Key[ GLFW_KEY_LAST+1 ];+ int LastChar;++ // User selected settings+ int StickyKeys;+ int StickyMouseButtons;+ int KeyRepeat;+++// ========= PLATFORM SPECIFIC PART ======================================++ // Platform specific internal variables+ int MouseMoved, CursorPosX, CursorPosY;++} _glfwInput;+++//------------------------------------------------------------------------+// Library global data+//------------------------------------------------------------------------+GLFWGLOBAL struct {++// ========= PLATFORM INDEPENDENT MANDATORY PART =========================++ // Window opening hints+ _GLFWhints hints;++// ========= PLATFORM SPECIFIC PART ======================================++ Display *display;++ // Server-side GLX version+ int glxMajor, glxMinor;++ struct {+ int available;+ int eventBase;+ int errorBase;+ } XF86VidMode;++ struct {+ int available;+ int eventBase;+ int errorBase;+ } XRandR;++ // Timer data+ struct {+ double resolution;+ long long t0;+ } Timer;++#if defined(_GLFW_DLOPEN_LIBGL)+ struct {+ void *libGL; // dlopen handle for libGL.so+ } Libs;+#endif+} _glfwLibrary;+++//------------------------------------------------------------------------+// Thread record (one for each thread)+//------------------------------------------------------------------------+typedef struct _GLFWthread_struct _GLFWthread;++struct _GLFWthread_struct {++// ========= PLATFORM INDEPENDENT MANDATORY PART =========================++ // Pointer to previous and next threads in linked list+ _GLFWthread *Previous, *Next;++ // GLFW user side thread information+ GLFWthread ID;+ GLFWthreadfun Function;++// ========= PLATFORM SPECIFIC PART ======================================++ // System side thread information+#ifdef _GLFW_HAS_PTHREAD+ pthread_t PosixID;+#endif++};+++//------------------------------------------------------------------------+// General thread information+//------------------------------------------------------------------------+GLFWGLOBAL struct {++// ========= PLATFORM INDEPENDENT MANDATORY PART =========================++ // Next thread ID to use (increments for every created thread)+ GLFWthread NextID;++ // First thread in linked list (always the main thread)+ _GLFWthread First;++// ========= PLATFORM SPECIFIC PART ======================================++ // Critical section lock+#ifdef _GLFW_HAS_PTHREAD+ pthread_mutex_t CriticalSection;+#endif++} _glfwThrd;+++//------------------------------------------------------------------------+// Joystick information & state+//------------------------------------------------------------------------+GLFWGLOBAL struct {+ int Present;+ int fd;+ int NumAxes;+ int NumButtons;+ float *Axis;+ unsigned char *Button;+} _glfwJoy[ GLFW_JOYSTICK_LAST + 1 ];+++//========================================================================+// Macros for encapsulating critical code sections (i.e. making parts+// of GLFW thread safe)+//========================================================================++// Thread list management+#ifdef _GLFW_HAS_PTHREAD+ #define ENTER_THREAD_CRITICAL_SECTION \+ pthread_mutex_lock( &_glfwThrd.CriticalSection );+ #define LEAVE_THREAD_CRITICAL_SECTION \+ pthread_mutex_unlock( &_glfwThrd.CriticalSection );+#else+ #define ENTER_THREAD_CRITICAL_SECTION+ #define LEAVE_THREAD_CRITICAL_SECTION+#endif+++//========================================================================+// Prototypes for platform specific internal functions+//========================================================================++// Time+void _glfwInitTimer( void );++// Fullscreen support+int _glfwGetClosestVideoMode( int screen, int *width, int *height, int *rate );+void _glfwSetVideoModeMODE( int screen, int mode, int rate );+void _glfwSetVideoMode( int screen, int *width, int *height, int *rate );++// Joystick input+void _glfwInitJoysticks( void );+void _glfwTerminateJoysticks( void );++// Unicode support+long _glfwKeySym2Unicode( KeySym keysym );+++#endif // _platform_h_