packages feed

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 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_