diff options
Diffstat (limited to 'src/engine/external/glfw/lib/win32')
| -rw-r--r-- | src/engine/external/glfw/lib/win32/glfwdll.def | 67 | ||||
| -rw-r--r-- | src/engine/external/glfw/lib/win32/glfwdll_mgw1.def | 67 | ||||
| -rw-r--r-- | src/engine/external/glfw/lib/win32/glfwdll_mgw2.def | 67 | ||||
| -rw-r--r-- | src/engine/external/glfw/lib/win32/glfwdll_pellesc.def | 65 | ||||
| -rw-r--r-- | src/engine/external/glfw/lib/win32/platform.h | 474 | ||||
| -rw-r--r-- | src/engine/external/glfw/lib/win32/win32_dllmain.c | 60 | ||||
| -rw-r--r-- | src/engine/external/glfw/lib/win32/win32_enable.c | 155 | ||||
| -rw-r--r-- | src/engine/external/glfw/lib/win32/win32_fullscreen.c | 317 | ||||
| -rw-r--r-- | src/engine/external/glfw/lib/win32/win32_glext.c | 85 | ||||
| -rw-r--r-- | src/engine/external/glfw/lib/win32/win32_init.c | 356 | ||||
| -rw-r--r-- | src/engine/external/glfw/lib/win32/win32_joystick.c | 234 | ||||
| -rw-r--r-- | src/engine/external/glfw/lib/win32/win32_thread.c | 511 | ||||
| -rw-r--r-- | src/engine/external/glfw/lib/win32/win32_time.c | 146 | ||||
| -rw-r--r-- | src/engine/external/glfw/lib/win32/win32_window.c | 1714 |
14 files changed, 0 insertions, 4318 deletions
diff --git a/src/engine/external/glfw/lib/win32/glfwdll.def b/src/engine/external/glfw/lib/win32/glfwdll.def deleted file mode 100644 index 1b40765a..00000000 --- a/src/engine/external/glfw/lib/win32/glfwdll.def +++ /dev/null @@ -1,67 +0,0 @@ -LIBRARY GLFW.DLL - -EXPORTS -glfwBroadcastCond -glfwCloseWindow -glfwCreateCond -glfwCreateMutex -glfwCreateThread -glfwDestroyCond -glfwDestroyMutex -glfwDestroyThread -glfwDisable -glfwEnable -glfwExtensionSupported -glfwFreeImage -glfwGetDesktopMode -glfwGetGLVersion -glfwGetJoystickButtons -glfwGetJoystickParam -glfwGetJoystickPos -glfwGetKey -glfwGetMouseButton -glfwGetMousePos -glfwGetMouseWheel -glfwGetNumberOfProcessors -glfwGetProcAddress -glfwGetThreadID -glfwGetTime -glfwGetVersion -glfwGetVideoModes -glfwGetWindowParam -glfwGetWindowSize -glfwIconifyWindow -glfwInit -glfwLoadMemoryTexture2D -glfwLoadTexture2D -glfwLoadTextureImage2D -glfwLockMutex -glfwOpenWindow -glfwOpenWindowHint -glfwPollEvents -glfwReadImage -glfwReadMemoryImage -glfwRestoreWindow -glfwSetCharCallback -glfwSetKeyCallback -glfwSetMouseButtonCallback -glfwSetMousePos -glfwSetMousePosCallback -glfwSetMouseWheel -glfwSetMouseWheelCallback -glfwSetTime -glfwSetWindowCloseCallback -glfwSetWindowRefreshCallback -glfwSetWindowPos -glfwSetWindowSize -glfwSetWindowSizeCallback -glfwSetWindowTitle -glfwSignalCond -glfwSleep -glfwSwapBuffers -glfwSwapInterval -glfwTerminate -glfwUnlockMutex -glfwWaitCond -glfwWaitEvents -glfwWaitThread diff --git a/src/engine/external/glfw/lib/win32/glfwdll_mgw1.def b/src/engine/external/glfw/lib/win32/glfwdll_mgw1.def deleted file mode 100644 index b193aa95..00000000 --- a/src/engine/external/glfw/lib/win32/glfwdll_mgw1.def +++ /dev/null @@ -1,67 +0,0 @@ -LIBRARY GLFW.DLL - -EXPORTS -glfwBroadcastCond = glfwBroadcastCond@4 -glfwCloseWindow = glfwCloseWindow@0 -glfwCreateCond = glfwCreateCond@0 -glfwCreateMutex = glfwCreateMutex@0 -glfwCreateThread = glfwCreateThread@8 -glfwDestroyCond = glfwDestroyCond@4 -glfwDestroyMutex = glfwDestroyMutex@4 -glfwDestroyThread = glfwDestroyThread@4 -glfwDisable = glfwDisable@4 -glfwEnable = glfwEnable@4 -glfwExtensionSupported = glfwExtensionSupported@4 -glfwFreeImage = glfwFreeImage@4 -glfwGetDesktopMode = glfwGetDesktopMode@4 -glfwGetGLVersion = glfwGetGLVersion@12 -glfwGetJoystickButtons = glfwGetJoystickButtons@12 -glfwGetJoystickParam = glfwGetJoystickParam@8 -glfwGetJoystickPos = glfwGetJoystickPos@12 -glfwGetKey = glfwGetKey@4 -glfwGetMouseButton = glfwGetMouseButton@4 -glfwGetMousePos = glfwGetMousePos@8 -glfwGetMouseWheel = glfwGetMouseWheel@0 -glfwGetNumberOfProcessors = glfwGetNumberOfProcessors@0 -glfwGetProcAddress = glfwGetProcAddress@4 -glfwGetThreadID = glfwGetThreadID@0 -glfwGetTime = glfwGetTime@0 -glfwGetVersion = glfwGetVersion@12 -glfwGetVideoModes = glfwGetVideoModes@8 -glfwGetWindowParam = glfwGetWindowParam@4 -glfwGetWindowSize = glfwGetWindowSize@8 -glfwIconifyWindow = glfwIconifyWindow@0 -glfwInit = glfwInit@0 -glfwLoadMemoryTexture2D = glfwLoadMemoryTexture2D@12 -glfwLoadTexture2D = glfwLoadTexture2D@8 -glfwLoadTextureImage2D = glfwLoadTextureImage2D@8 -glfwLockMutex = glfwLockMutex@4 -glfwOpenWindow = glfwOpenWindow@36 -glfwOpenWindowHint = glfwOpenWindowHint@8 -glfwPollEvents = glfwPollEvents@0 -glfwReadImage = glfwReadImage@12 -glfwReadMemoryImage = glfwReadMemoryImage@16 -glfwRestoreWindow = glfwRestoreWindow@0 -glfwSetCharCallback = glfwSetCharCallback@4 -glfwSetKeyCallback = glfwSetKeyCallback@4 -glfwSetMouseButtonCallback = glfwSetMouseButtonCallback@4 -glfwSetMousePos = glfwSetMousePos@8 -glfwSetMousePosCallback = glfwSetMousePosCallback@4 -glfwSetMouseWheel = glfwSetMouseWheel@4 -glfwSetMouseWheelCallback = glfwSetMouseWheelCallback@4 -glfwSetTime = glfwSetTime@8 -glfwSetWindowCloseCallback = glfwSetWindowCloseCallback@4 -glfwSetWindowRefreshCallback = glfwSetWindowRefreshCallback@4 -glfwSetWindowPos = glfwSetWindowPos@8 -glfwSetWindowSize = glfwSetWindowSize@8 -glfwSetWindowSizeCallback = glfwSetWindowSizeCallback@4 -glfwSetWindowTitle = glfwSetWindowTitle@4 -glfwSignalCond = glfwSignalCond@4 -glfwSleep = glfwSleep@8 -glfwSwapBuffers = glfwSwapBuffers@0 -glfwSwapInterval = glfwSwapInterval@4 -glfwTerminate = glfwTerminate@0 -glfwUnlockMutex = glfwUnlockMutex@4 -glfwWaitCond = glfwWaitCond@16 -glfwWaitEvents = glfwWaitEvents@0 -glfwWaitThread = glfwWaitThread@8 diff --git a/src/engine/external/glfw/lib/win32/glfwdll_mgw2.def b/src/engine/external/glfw/lib/win32/glfwdll_mgw2.def deleted file mode 100644 index e42f664e..00000000 --- a/src/engine/external/glfw/lib/win32/glfwdll_mgw2.def +++ /dev/null @@ -1,67 +0,0 @@ -LIBRARY GLFW.DLL - -EXPORTS -glfwBroadcastCond@4 -glfwCloseWindow@0 -glfwCreateCond@0 -glfwCreateMutex@0 -glfwCreateThread@8 -glfwDestroyCond@4 -glfwDestroyMutex@4 -glfwDestroyThread@4 -glfwDisable@4 -glfwEnable@4 -glfwExtensionSupported@4 -glfwFreeImage@4 -glfwGetDesktopMode@4 -glfwGetGLVersion@12 -glfwGetJoystickButtons@12 -glfwGetJoystickParam@8 -glfwGetJoystickPos@12 -glfwGetKey@4 -glfwGetMouseButton@4 -glfwGetMousePos@8 -glfwGetMouseWheel@0 -glfwGetNumberOfProcessors@0 -glfwGetProcAddress@4 -glfwGetThreadID@0 -glfwGetTime@0 -glfwGetVersion@12 -glfwGetVideoModes@8 -glfwGetWindowParam@4 -glfwGetWindowSize@8 -glfwIconifyWindow@0 -glfwInit@0 -glfwLoadMemoryTexture2D@12 -glfwLoadTexture2D@8 -glfwLoadTextureImage2D@8 -glfwLockMutex@4 -glfwOpenWindow@36 -glfwOpenWindowHint@8 -glfwPollEvents@0 -glfwReadImage@12 -glfwReadMemoryImage@16 -glfwRestoreWindow@0 -glfwSetCharCallback@4 -glfwSetKeyCallback@4 -glfwSetMouseButtonCallback@4 -glfwSetMousePos@8 -glfwSetMousePosCallback@4 -glfwSetMouseWheel@4 -glfwSetMouseWheelCallback@4 -glfwSetTime@8 -glfwSetWindowCloseCallback@4 -glfwSetWindowRefreshCallback@4 -glfwSetWindowPos@8 -glfwSetWindowSize@8 -glfwSetWindowSizeCallback@4 -glfwSetWindowTitle@4 -glfwSignalCond@4 -glfwSleep@8 -glfwSwapBuffers@0 -glfwSwapInterval@4 -glfwTerminate@0 -glfwUnlockMutex@4 -glfwWaitCond@16 -glfwWaitEvents@0 -glfwWaitThread@8 diff --git a/src/engine/external/glfw/lib/win32/glfwdll_pellesc.def b/src/engine/external/glfw/lib/win32/glfwdll_pellesc.def deleted file mode 100644 index cbb214c8..00000000 --- a/src/engine/external/glfw/lib/win32/glfwdll_pellesc.def +++ /dev/null @@ -1,65 +0,0 @@ -LIBRARY GLFW - -EXPORTS -glfwBroadcastCond = glfwBroadcastCond@4 -glfwCloseWindow = glfwCloseWindow@0 -glfwCreateCond = glfwCreateCond@0 -glfwCreateMutex = glfwCreateMutex@0 -glfwCreateThread = glfwCreateThread@8 -glfwDestroyCond = glfwDestroyCond@4 -glfwDestroyMutex = glfwDestroyMutex@4 -glfwDestroyThread = glfwDestroyThread@4 -glfwDisable = glfwDisable@4 -glfwEnable = glfwEnable@4 -glfwExtensionSupported = glfwExtensionSupported@4 -glfwFreeImage = glfwFreeImage@4 -glfwGetDesktopMode = glfwGetDesktopMode@4 -glfwGetGLVersion = glfwGetGLVersion@12 -glfwGetJoystickButtons = glfwGetJoystickButtons@12 -glfwGetJoystickParam = glfwGetJoystickParam@8 -glfwGetJoystickPos = glfwGetJoystickPos@12 -glfwGetKey = glfwGetKey@4 -glfwGetMouseButton = glfwGetMouseButton@4 -glfwGetMousePos = glfwGetMousePos@8 -glfwGetMouseWheel = glfwGetMouseWheel@0 -glfwGetNumberOfProcessors = glfwGetNumberOfProcessors@0 -glfwGetProcAddress = glfwGetProcAddress@4 -glfwGetThreadID = glfwGetThreadID@0 -glfwGetTime = glfwGetTime@0 -glfwGetVersion = glfwGetVersion@12 -glfwGetVideoModes = glfwGetVideoModes@8 -glfwGetWindowParam = glfwGetWindowParam@4 -glfwGetWindowSize = glfwGetWindowSize@8 -glfwIconifyWindow = glfwIconifyWindow@0 -glfwInit = glfwInit@0 -glfwLoadTexture2D = glfwLoadTexture2D@8 -glfwLockMutex = glfwLockMutex@4 -glfwOpenWindow = glfwOpenWindow@36 -glfwOpenWindowHint = glfwOpenWindowHint@8 -glfwPollEvents = glfwPollEvents@0 -glfwReadImage = glfwReadImage@12 -glfwReadMemoryImage = glfwReadMemoryImage@16 -glfwRestoreWindow = glfwRestoreWindow@0 -glfwSetCharCallback = glfwSetCharCallback@4 -glfwSetKeyCallback = glfwSetKeyCallback@4 -glfwSetMouseButtonCallback = glfwSetMouseButtonCallback@4 -glfwSetMousePos = glfwSetMousePos@8 -glfwSetMousePosCallback = glfwSetMousePosCallback@4 -glfwSetMouseWheel = glfwSetMouseWheel@4 -glfwSetMouseWheelCallback = glfwSetMouseWheelCallback@4 -glfwSetTime = glfwSetTime@8 -glfwSetWindowCloseCallback = glfwSetWindowCloseCallback@4 -glfwSetWindowRefreshCallback = glfwSetWindowRefreshCallback@4 -glfwSetWindowPos = glfwSetWindowPos@8 -glfwSetWindowSize = glfwSetWindowSize@8 -glfwSetWindowSizeCallback = glfwSetWindowSizeCallback@4 -glfwSetWindowTitle = glfwSetWindowTitle@4 -glfwSignalCond = glfwSignalCond@4 -glfwSleep = glfwSleep@8 -glfwSwapBuffers = glfwSwapBuffers@0 -glfwSwapInterval = glfwSwapInterval@4 -glfwTerminate = glfwTerminate@0 -glfwUnlockMutex = glfwUnlockMutex@4 -glfwWaitCond = glfwWaitCond@16 -glfwWaitEvents = glfwWaitEvents@0 -glfwWaitThread = glfwWaitThread@8 diff --git a/src/engine/external/glfw/lib/win32/platform.h b/src/engine/external/glfw/lib/win32/platform.h deleted file mode 100644 index b7c9f02d..00000000 --- a/src/engine/external/glfw/lib/win32/platform.h +++ /dev/null @@ -1,474 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// File: platform.h -// Platform: Windows -// API version: 2.6 -// 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 - - -// 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 - -// wglSwapIntervalEXT typedef (Win32 buffer-swap interval control) -typedef int (APIENTRY * WGLSWAPINTERVALEXT_T) (int); -// wglChoosePixelFormatARB typedef -typedef BOOL (WINAPI * WGLCHOOSEPIXELFORMATARB_T) (HDC, const int *, const FLOAT *, UINT, int *, UINT *); -// 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 ); - -#define WGL_DRAW_TO_WINDOW_ARB 0x2001 -#define WGL_SUPPORT_OPENGL_ARB 0x2010 -#define WGL_ACCELERATION_ARB 0x2003 -#define WGL_FULL_ACCELERATION_ARB 0x2027 -#define WGL_DOUBLE_BUFFER_ARB 0x2011 -#define WGL_STEREO_ARB 0x2012 -#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 - - -//======================================================================== -// 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 - - -//======================================================================== -// 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 - - // 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 - 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 RefreshRate; // Vertical monitor refresh rate - int Samples; - - // Extensions & OpenGL version - int Has_GL_SGIS_generate_mipmap; - int Has_GL_ARB_texture_non_power_of_two; - int GLVerMajor,GLVerMinor; - - -// ========= PLATFORM SPECIFIC PART ====================================== - - // Platform specific window resources - HDC DC; // Private GDI device context - HGLRC RC; // Permanent rendering context - HWND Wnd; // 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 SwapInterval; - WGLCHOOSEPIXELFORMATARB_T ChoosePixelFormat; - WGLGETPIXELFORMATATTRIBIVARB_T GetPixelFormatAttribiv; - WGLGETEXTENSIONSSTRINGEXT_T GetExtensionsStringEXT; - WGLGETEXTENSIONSSTRINGARB_T GetExtensionsStringARB; - - // 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 { - -// ========= 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_ diff --git a/src/engine/external/glfw/lib/win32/win32_dllmain.c b/src/engine/external/glfw/lib/win32/win32_dllmain.c deleted file mode 100644 index 0cfed043..00000000 --- a/src/engine/external/glfw/lib/win32/win32_dllmain.c +++ /dev/null @@ -1,60 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// File: win32_dllmain.c -// Platform: Windows -// API version: 2.6 -// 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. -// -//======================================================================== - -#include "internal.h" - - -#if defined(GLFW_BUILD_DLL) - -//======================================================================== -// DllMain() -//======================================================================== - -int WINAPI DllMain( HINSTANCE hinst, unsigned long reason, void *x ) -{ - // NOTE: Some compilers complains about hinst and x never being used - - // never mind that (we don't want to use them)! - - switch( reason ) - { - case DLL_PROCESS_ATTACH: - // Initializations - //glfwInit(); // We don't want to do that now! - break; - case DLL_PROCESS_DETACH: - // Do some cleanup - glfwTerminate(); - break; - }; - - return 1; -} - -#endif // GLFW_BUILD_DLL diff --git a/src/engine/external/glfw/lib/win32/win32_enable.c b/src/engine/external/glfw/lib/win32/win32_enable.c deleted file mode 100644 index 5b0d3294..00000000 --- a/src/engine/external/glfw/lib/win32/win32_enable.c +++ /dev/null @@ -1,155 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// File: win32_enable.c -// Platform: Windows -// API version: 2.6 -// 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. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// _glfwLLKeyboardProc() - Low level keyboard callback function (used to -// disable system keys under Windows NT). -//======================================================================== - -LRESULT CALLBACK _glfwLLKeyboardProc( int nCode, WPARAM wParam, - LPARAM lParam ) -{ - BOOL syskeys = 0; - PKBDLLHOOKSTRUCT p; - - // We are only looking for keyboard events - interpret lParam as a - // pointer to a KBDLLHOOKSTRUCT - p = (PKBDLLHOOKSTRUCT) lParam; - - // If nCode == HC_ACTION, then we have a keyboard event - if( nCode == HC_ACTION ) - { - switch( wParam ) - { - case WM_KEYDOWN: - case WM_SYSKEYDOWN: - case WM_KEYUP: - case WM_SYSKEYUP: - // Detect: ALT+TAB, ALT+ESC, ALT+F4, CTRL+ESC, - // LWIN, RWIN, APPS (mysterious menu key) - syskeys = ( p->vkCode == VK_TAB && - p->flags & LLKHF_ALTDOWN ) || - ( p->vkCode == VK_ESCAPE && - p->flags & LLKHF_ALTDOWN ) || - ( p->vkCode == VK_F4 && - p->flags & LLKHF_ALTDOWN ) || - ( p->vkCode == VK_ESCAPE && - (GetKeyState(VK_CONTROL) & 0x8000)) || - p->vkCode == VK_LWIN || - p->vkCode == VK_RWIN || - p->vkCode == VK_APPS; - break; - - default: - break; - } - } - - // Was it a system key combination (e.g. ALT+TAB)? - if( syskeys ) - { - // Pass the key event to our window message loop - if( _glfwWin.Opened ) - { - PostMessage( _glfwWin.Wnd, (UINT) wParam, p->vkCode, 0 ); - } - - // We've taken care of it - don't let the system know about this - // key event - return 1; - } - else - { - // It's a harmless key press, let the system deal with it - return CallNextHookEx( _glfwWin.KeyboardHook, nCode, wParam, - lParam ); - } -} - - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// _glfwPlatformEnableSystemKeys() - Enable system keys -// _glfwPlatformDisableSystemKeys() - Disable system keys -//======================================================================== - -void _glfwPlatformEnableSystemKeys( void ) -{ - BOOL bOld; - - // Use different methods depending on operating system version - if( _glfwLibrary.Sys.WinVer >= _GLFW_WIN_NT4 ) - { - if( _glfwWin.KeyboardHook != NULL ) - { - UnhookWindowsHookEx( _glfwWin.KeyboardHook ); - _glfwWin.KeyboardHook = NULL; - } - } - else - { - (void) SystemParametersInfo( SPI_SETSCREENSAVERRUNNING, FALSE, - &bOld, 0 ); - } -} - -void _glfwPlatformDisableSystemKeys( void ) -{ - BOOL bOld; - - // Use different methods depending on operating system version - if( _glfwLibrary.Sys.WinVer >= _GLFW_WIN_NT4 ) - { - // Under Windows NT, install a low level keyboard hook - _glfwWin.KeyboardHook = SetWindowsHookEx( WH_KEYBOARD_LL, - _glfwLLKeyboardProc, - _glfwLibrary.Instance, - 0 ); - } - else - { - // Under Windows 95/98/ME, fool Windows that a screensaver - // is running => prevents ALT+TAB, CTRL+ESC and CTRL+ALT+DEL - (void) SystemParametersInfo( SPI_SETSCREENSAVERRUNNING, TRUE, - &bOld, 0 ); - } -} - diff --git a/src/engine/external/glfw/lib/win32/win32_fullscreen.c b/src/engine/external/glfw/lib/win32/win32_fullscreen.c deleted file mode 100644 index fcecee67..00000000 --- a/src/engine/external/glfw/lib/win32/win32_fullscreen.c +++ /dev/null @@ -1,317 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// File: win32_fullscreen.c -// Platform: Windows -// API version: 2.6 -// 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. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// _glfwBPP2RGB() - Convert BPP to RGB bits (based on "best guess") -//======================================================================== - -static void _glfwBPP2RGB( int bpp, int *r, int *g, int *b ) -{ - int delta; - - // Special case: BPP = 32 - if( bpp == 32 ) bpp = 24; - - // Convert "bits per pixel" to red, green & blue sizes - *r = *g = *b = bpp / 3; - delta = bpp - (*r * 3); - if( delta >= 1 ) - { - *g = *g + 1; - } - if( delta == 2 ) - { - *r = *r + 1; - } -} - - -//======================================================================== -// _glfwGetClosestVideoModeBPP() -//======================================================================== - -int _glfwGetClosestVideoModeBPP( int *w, int *h, int *bpp, int *refresh ) -{ - int mode, bestmode, match, bestmatch, rr, bestrr, success; - DEVMODE dm; - - // Find best match - bestmatch = 0x7fffffff; - bestrr = 0x7fffffff; - mode = bestmode = 0; - do - { - dm.dmSize = sizeof( DEVMODE ); - success = EnumDisplaySettings( NULL, mode, &dm ); - if( success ) - { - match = dm.dmBitsPerPel - *bpp; - if( match < 0 ) match = -match; - match = ( match << 25 ) | - ( (dm.dmPelsWidth - *w) * - (dm.dmPelsWidth - *w) + - (dm.dmPelsHeight - *h) * - (dm.dmPelsHeight - *h) ); - if( match < bestmatch ) - { - bestmatch = match; - bestmode = mode; - bestrr = (dm.dmDisplayFrequency - *refresh) * - (dm.dmDisplayFrequency - *refresh); - } - else if( match == bestmatch && *refresh > 0 ) - { - rr = (dm.dmDisplayFrequency - *refresh) * - (dm.dmDisplayFrequency - *refresh); - if( rr < bestrr ) - { - bestmatch = match; - bestmode = mode; - bestrr = rr; - } - } - } - mode ++; - } - while( success ); - - // Get the parameters for the best matching display mode - dm.dmSize = sizeof( DEVMODE ); - (void) EnumDisplaySettings( NULL, bestmode, &dm ); - - // Fill out actual width and height - *w = dm.dmPelsWidth; - *h = dm.dmPelsHeight; - - // Return bits per pixel - *bpp = dm.dmBitsPerPel; - - // Return vertical refresh rate - *refresh = dm.dmDisplayFrequency; - - return bestmode; -} - - -//======================================================================== -// _glfwGetClosestVideoMode() -//======================================================================== - -int _glfwGetClosestVideoMode( int *w, int *h, int *r, int *g, int *b, - int *refresh ) -{ - int bpp, bestmode; - - // Colorbits = sum of red/green/blue bits - bpp = *r + *g + *b; - - // If colorbits < 15 (e.g. 0) or >= 24, default to 32 bpp - if( bpp < 15 || bpp >= 24 ) - { - bpp = 32; - } - - // Find best match - bestmode = _glfwGetClosestVideoModeBPP( w, h, &bpp, refresh ); - - // Convert "bits per pixel" to red, green & blue sizes - _glfwBPP2RGB( bpp, r, g, b ); - - return bestmode; -} - - -//======================================================================== -// Change the current video mode -//======================================================================== - -void _glfwSetVideoModeMODE( int mode ) -{ - DEVMODE dm; - int success; - - // Get the parameters for the best matching display mode - dm.dmSize = sizeof( DEVMODE ); - (void) EnumDisplaySettings( NULL, mode, &dm ); - - // Set which fields we want to specify - dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL; - - // Do we have a prefered refresh rate? - if( _glfwWin.DesiredRefreshRate > 0 ) - { - dm.dmFields = dm.dmFields | DM_DISPLAYFREQUENCY; - dm.dmDisplayFrequency = _glfwWin.DesiredRefreshRate; - } - - // Change display setting - dm.dmSize = sizeof( DEVMODE ); - success = ChangeDisplaySettings( &dm, CDS_FULLSCREEN ); - - // If the mode change was not possible, query the current display - // settings (we'll use the desktop resolution for fullscreen mode) - if( success == DISP_CHANGE_SUCCESSFUL ) - { - _glfwWin.ModeID = mode; - } - else - { - _glfwWin.ModeID = ENUM_REGISTRY_SETTINGS; - EnumDisplaySettings( NULL, ENUM_REGISTRY_SETTINGS, &dm ); - } - - // Set the window size to that of the display mode - _glfwWin.Width = dm.dmPelsWidth; - _glfwWin.Height = dm.dmPelsHeight; -} - - -//======================================================================== -// _glfwSetVideoMode() - Change the current video mode -//======================================================================== - -void _glfwSetVideoMode( int *w, int *h, int r, int g, int b, int refresh ) -{ - int bestmode; - - // Find a best match mode - bestmode = _glfwGetClosestVideoMode( w, h, &r, &g, &b, &refresh ); - - // Change mode - _glfwSetVideoModeMODE( bestmode ); -} - - -//************************************************************************ -//**** GLFW user functions **** -//************************************************************************ - -//======================================================================== -// _glfwPlatformGetVideoModes() - Get a list of available video modes -//======================================================================== - -int _glfwPlatformGetVideoModes( GLFWvidmode *list, int maxcount ) -{ - int count, success, mode, i, j; - int m1, m2, bpp, r, g, b; - DEVMODE dm; - - // Loop through all video modes and extract all the UNIQUE modes - count = 0; - mode = 0; - do - { - // Get video mode properties - dm.dmSize = sizeof( DEVMODE ); - success = EnumDisplaySettings( NULL, mode, &dm ); - - // Is it a valid mode? (only list depths >= 15 bpp) - if( success && dm.dmBitsPerPel >= 15 ) - { - // Convert to RGB, and back to bpp ("mask out" alpha bits etc) - _glfwBPP2RGB( dm.dmBitsPerPel, &r, &g, &b ); - bpp = r + g + b; - - // Mode "code" for this mode - m1 = (bpp << 25) | (dm.dmPelsWidth * dm.dmPelsHeight); - - // Insert mode in list (sorted), and avoid duplicates - for( i = 0; i < count; i ++ ) - { - // Mode "code" for already listed mode - bpp = list[i].RedBits + list[i].GreenBits + - list[i].BlueBits; - m2 = (bpp << 25) | (list[i].Width * list[i].Height); - if( m1 <= m2 ) - { - break; - } - } - - // New entry at the end of the list? - if( i >= count ) - { - list[count].Width = dm.dmPelsWidth; - list[count].Height = dm.dmPelsHeight; - list[count].RedBits = r; - list[count].GreenBits = g; - list[count].BlueBits = b; - count ++; - } - // Insert new entry in the list? - else if( m1 < m2 ) - { - for( j = count; j > i; j -- ) - { - list[j] = list[j-1]; - } - list[i].Width = dm.dmPelsWidth; - list[i].Height = dm.dmPelsHeight; - list[i].RedBits = r; - list[i].GreenBits = g; - list[i].BlueBits = b; - count ++; - } - } - mode ++; - } - while( success && (count < maxcount) ); - - return count; -} - - -//======================================================================== -// _glfwPlatformGetDesktopMode() - Get the desktop video mode -//======================================================================== - -void _glfwPlatformGetDesktopMode( GLFWvidmode *mode ) -{ - DEVMODE dm; - - // Get desktop display mode - dm.dmSize = sizeof( DEVMODE ); - (void) EnumDisplaySettings( NULL, ENUM_REGISTRY_SETTINGS, &dm ); - - // Return desktop mode parameters - mode->Width = dm.dmPelsWidth; - mode->Height = dm.dmPelsHeight; - _glfwBPP2RGB( dm.dmBitsPerPel, &mode->RedBits, &mode->GreenBits, - &mode->BlueBits ); -} - - diff --git a/src/engine/external/glfw/lib/win32/win32_glext.c b/src/engine/external/glfw/lib/win32/win32_glext.c deleted file mode 100644 index 3f4ea6f6..00000000 --- a/src/engine/external/glfw/lib/win32/win32_glext.c +++ /dev/null @@ -1,85 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// File: win32_glext.c -// Platform: Windows -// API version: 2.6 -// 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. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Check if an OpenGL extension is available at runtime (Windows version checks -// for WGL extensions) -//======================================================================== - -int _glfwPlatformExtensionSupported( const char *extension ) -{ - const GLubyte *extensions; - - // Try wglGetExtensionsStringEXT - if( _glfwWin.GetExtensionsStringEXT != NULL ) - { - extensions = (GLubyte *) _glfwWin.GetExtensionsStringEXT(); - if( extensions != NULL ) - { - if( _glfwStringInExtensionString( extension, extensions ) ) - { - return GL_TRUE; - } - } - } - - // Try wglGetExtensionsStringARB - if( _glfwWin.GetExtensionsStringARB != NULL ) - { - extensions = (GLubyte *) _glfwWin.GetExtensionsStringARB( _glfwWin.DC ); - if( extensions != NULL ) - { - if( _glfwStringInExtensionString( extension, extensions ) ) - { - return GL_TRUE; - } - } - } - - return GL_FALSE; -} - - -//======================================================================== -// Get the function pointer to an OpenGL function -//======================================================================== - -void * _glfwPlatformGetProcAddress( const char *procname ) -{ - return (void *) wglGetProcAddress( procname ); -} - diff --git a/src/engine/external/glfw/lib/win32/win32_init.c b/src/engine/external/glfw/lib/win32/win32_init.c deleted file mode 100644 index 41d7150a..00000000 --- a/src/engine/external/glfw/lib/win32/win32_init.c +++ /dev/null @@ -1,356 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// File: win32_init.c -// Platform: Windows -// API version: 2.6 -// 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. -// -//======================================================================== - -#include "internal.h" - -// With the Borland C++ compiler, we want to disable FPU exceptions -#ifdef __BORLANDC__ -#include <float.h> -#endif // __BORLANDC__ - - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// _glfwInitLibraries() - Load necessary libraries (DLLs) -//======================================================================== - -static int _glfwInitLibraries( void ) -{ - // gdi32.dll (OpenGL pixel format functions & SwapBuffers) -#ifndef _GLFW_NO_DLOAD_GDI32 - _glfwLibrary.Libs.gdi32 = LoadLibrary( "gdi32.dll" ); - if( _glfwLibrary.Libs.gdi32 != NULL ) - { - _glfwLibrary.Libs.ChoosePixelFormat = (CHOOSEPIXELFORMAT_T) - GetProcAddress( _glfwLibrary.Libs.gdi32, "ChoosePixelFormat" ); - _glfwLibrary.Libs.DescribePixelFormat = (DESCRIBEPIXELFORMAT_T) - GetProcAddress( _glfwLibrary.Libs.gdi32, "DescribePixelFormat" ); - _glfwLibrary.Libs.GetPixelFormat = (GETPIXELFORMAT_T) - GetProcAddress( _glfwLibrary.Libs.gdi32, "GetPixelFormat" ); - _glfwLibrary.Libs.SetPixelFormat = (SETPIXELFORMAT_T) - GetProcAddress( _glfwLibrary.Libs.gdi32, "SetPixelFormat" ); - _glfwLibrary.Libs.SwapBuffers = (SWAPBUFFERS_T) - GetProcAddress( _glfwLibrary.Libs.gdi32, "SwapBuffers" ); - if( _glfwLibrary.Libs.ChoosePixelFormat == NULL || - _glfwLibrary.Libs.DescribePixelFormat == NULL || - _glfwLibrary.Libs.GetPixelFormat == NULL || - _glfwLibrary.Libs.SetPixelFormat == NULL || - _glfwLibrary.Libs.SwapBuffers == NULL ) - { - FreeLibrary( _glfwLibrary.Libs.gdi32 ); - _glfwLibrary.Libs.gdi32 = NULL; - return GL_FALSE; - } - } - else - { - return GL_FALSE; - } -#endif // _GLFW_NO_DLOAD_GDI32 - - // winmm.dll (for joystick and timer support) -#ifndef _GLFW_NO_DLOAD_WINMM - _glfwLibrary.Libs.winmm = LoadLibrary( "winmm.dll" ); - if( _glfwLibrary.Libs.winmm != NULL ) - { - _glfwLibrary.Libs.joyGetDevCapsA = (JOYGETDEVCAPSA_T) - GetProcAddress( _glfwLibrary.Libs.winmm, "joyGetDevCapsA" ); - _glfwLibrary.Libs.joyGetPos = (JOYGETPOS_T) - GetProcAddress( _glfwLibrary.Libs.winmm, "joyGetPos" ); - _glfwLibrary.Libs.joyGetPosEx = (JOYGETPOSEX_T) - GetProcAddress( _glfwLibrary.Libs.winmm, "joyGetPosEx" ); - _glfwLibrary.Libs.timeGetTime = (TIMEGETTIME_T) - GetProcAddress( _glfwLibrary.Libs.winmm, "timeGetTime" ); - if( _glfwLibrary.Libs.joyGetDevCapsA == NULL || - _glfwLibrary.Libs.joyGetPos == NULL || - _glfwLibrary.Libs.joyGetPosEx == NULL || - _glfwLibrary.Libs.timeGetTime == NULL ) - { - FreeLibrary( _glfwLibrary.Libs.winmm ); - _glfwLibrary.Libs.winmm = NULL; - return GL_FALSE; - } - } - else - { - return GL_FALSE; - } -#endif // _GLFW_NO_DLOAD_WINMM - - return GL_TRUE; -} - - -//======================================================================== -// _glfwFreeLibraries() - Unload used libraries (DLLs) -//======================================================================== - -static void _glfwFreeLibraries( void ) -{ - // gdi32.dll -#ifndef _GLFW_NO_DLOAD_GDI32 - if( _glfwLibrary.Libs.gdi32 != NULL ) - { - FreeLibrary( _glfwLibrary.Libs.gdi32 ); - _glfwLibrary.Libs.gdi32 = NULL; - } -#endif // _GLFW_NO_DLOAD_GDI32 - - // winmm.dll -#ifndef _GLFW_NO_DLOAD_WINMM - if( _glfwLibrary.Libs.winmm != NULL ) - { - FreeLibrary( _glfwLibrary.Libs.winmm ); - _glfwLibrary.Libs.winmm = NULL; - } -#endif // _GLFW_NO_DLOAD_WINMM -} - - -//======================================================================== -// _glfwInitThreads() - Initialize GLFW thread package -//======================================================================== - -static void _glfwInitThreads( void ) -{ - // Initialize critical section handle - InitializeCriticalSection( &_glfwThrd.CriticalSection ); - - // The first thread (the main thread) has ID 0 - _glfwThrd.NextID = 0; - - // Fill out information about the main thread (this thread) - _glfwThrd.First.ID = _glfwThrd.NextID ++; - _glfwThrd.First.Function = NULL; - _glfwThrd.First.Handle = GetCurrentThread(); - _glfwThrd.First.WinID = GetCurrentThreadId(); - _glfwThrd.First.Previous = NULL; - _glfwThrd.First.Next = NULL; -} - - -//======================================================================== -// _glfwTerminateThreads() - Terminate GLFW thread package -//======================================================================== - -static void _glfwTerminateThreads( void ) -{ - _GLFWthread *t, *t_next; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Kill all threads (NOTE: THE USER SHOULD WAIT FOR ALL THREADS TO - // DIE, _BEFORE_ CALLING glfwTerminate()!!!) - t = _glfwThrd.First.Next; - while( t != NULL ) - { - // Get pointer to next thread - t_next = t->Next; - - // Simply murder the process, no mercy! - if( TerminateThread( t->Handle, 0 ) ) - { - // Close thread handle - CloseHandle( t->Handle ); - - // Free memory allocated for this thread - free( (void *) t ); - } - - // Select next thread in list - t = t_next; - } - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Delete critical section handle - DeleteCriticalSection( &_glfwThrd.CriticalSection ); -} - - -//======================================================================== -// _glfwTerminate_atexit() - Terminate GLFW when exiting application -//======================================================================== - -void _glfwTerminate_atexit( void ) -{ - glfwTerminate(); -} - - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// _glfwPlatformInit() - Initialize various GLFW state -//======================================================================== - -int _glfwPlatformInit( void ) -{ - OSVERSIONINFO osi; - - // To make SetForegroundWindow() work as we want, we need to fiddle - // with the FOREGROUNDLOCKTIMEOUT system setting (we do this as early - // as possible in the hope of still being the foreground process) - SystemParametersInfo( SPI_GETFOREGROUNDLOCKTIMEOUT, 0, - &_glfwLibrary.Sys.ForegroundLockTimeout, 0 ); - SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)0, - SPIF_SENDCHANGE ); - - // Check which OS version we are running - osi.dwOSVersionInfoSize = sizeof( OSVERSIONINFO ); - GetVersionEx( &osi ); - _glfwLibrary.Sys.WinVer = _GLFW_WIN_UNKNOWN; - if( osi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ) - { - if( osi.dwMajorVersion == 4 && osi.dwMinorVersion < 10 ) - { - _glfwLibrary.Sys.WinVer = _GLFW_WIN_95; - } - else if( osi.dwMajorVersion == 4 && osi.dwMinorVersion < 90 ) - { - _glfwLibrary.Sys.WinVer = _GLFW_WIN_98; - } - else if( osi.dwMajorVersion == 4 && osi.dwMinorVersion == 90 ) - { - _glfwLibrary.Sys.WinVer = _GLFW_WIN_ME; - } - else if( osi.dwMajorVersion >= 4 ) - { - _glfwLibrary.Sys.WinVer = _GLFW_WIN_UNKNOWN_9x; - } - } - else if( osi.dwPlatformId == VER_PLATFORM_WIN32_NT ) - { - if( osi.dwMajorVersion == 4 && osi.dwMinorVersion == 0 ) - { - _glfwLibrary.Sys.WinVer = _GLFW_WIN_NT4; - } - else if( osi.dwMajorVersion == 5 && osi.dwMinorVersion == 0 ) - { - _glfwLibrary.Sys.WinVer = _GLFW_WIN_2K; - } - else if( osi.dwMajorVersion == 5 && osi.dwMinorVersion == 1 ) - { - _glfwLibrary.Sys.WinVer = _GLFW_WIN_XP; - } - else if( osi.dwMajorVersion == 5 && osi.dwMinorVersion == 2 ) - { - _glfwLibrary.Sys.WinVer = _GLFW_WIN_NET_SERVER; - } - else if( osi.dwMajorVersion >= 5 ) - { - _glfwLibrary.Sys.WinVer = _GLFW_WIN_UNKNOWN_NT; - } - } - - // Do we have Unicode support? - if( _glfwLibrary.Sys.WinVer >= _GLFW_WIN_NT4 ) - { - // Windows NT/2000/XP/.NET has Unicode support - _glfwLibrary.Sys.HasUnicode = GL_TRUE; - } - else - { - // Windows 9x/ME does not have Unicode support - _glfwLibrary.Sys.HasUnicode = GL_FALSE; - } - - // Load libraries (DLLs) - if( !_glfwInitLibraries() ) - { - return GL_FALSE; - } - - // With the Borland C++ compiler, we want to disable FPU exceptions - // (this is recommended for OpenGL applications under Windows) -#ifdef __BORLANDC__ - _control87( MCW_EM, MCW_EM ); -#endif - - // Retrieve GLFW instance handle - _glfwLibrary.Instance = GetModuleHandle( NULL ); - - // System keys are not disabled - _glfwWin.KeyboardHook = NULL; - - // Initialise thread package - _glfwInitThreads(); - - // Install atexit() routine - atexit( _glfwTerminate_atexit ); - - // Start the timer - _glfwInitTimer(); - - return GL_TRUE; -} - - -//======================================================================== -// _glfwPlatformTerminate() - Close window and kill all threads -//======================================================================== - -int _glfwPlatformTerminate( void ) -{ - // Only the main thread is allowed to do this... - if( GetCurrentThreadId() != _glfwThrd.First.WinID ) - { - return GL_FALSE; - } - - // Close OpenGL window - glfwCloseWindow(); - - // Kill thread package - _glfwTerminateThreads(); - - // Enable system keys again (if they were disabled) - glfwEnable( GLFW_SYSTEM_KEYS ); - - // Unload libraries (DLLs) - _glfwFreeLibraries(); - - // Restore FOREGROUNDLOCKTIMEOUT system setting - SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT, 0, - (LPVOID)_glfwLibrary.Sys.ForegroundLockTimeout, - SPIF_SENDCHANGE ); - - return GL_TRUE; -} - diff --git a/src/engine/external/glfw/lib/win32/win32_joystick.c b/src/engine/external/glfw/lib/win32/win32_joystick.c deleted file mode 100644 index 5ab00319..00000000 --- a/src/engine/external/glfw/lib/win32/win32_joystick.c +++ /dev/null @@ -1,234 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// File: win32_joystick.c -// Platform: Windows -// API version: 2.6 -// 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. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// _glfwJoystickPresent() - Return GL_TRUE if joystick is present, -// else return GL_FALSE. -//======================================================================== - -static int _glfwJoystickPresent( int joy ) -{ - JOYINFO ji; - - // Windows NT 4.0 MMSYSTEM only supports 2 sticks (other Windows - // versions support 16 sticks) - if( _glfwLibrary.Sys.WinVer == _GLFW_WIN_NT4 && joy > GLFW_JOYSTICK_2 ) - { - return GL_FALSE; - } - - // Is it a valid stick ID (Windows don't support more than 16 sticks)? - if( joy < GLFW_JOYSTICK_1 || joy > GLFW_JOYSTICK_16 ) - { - return GL_FALSE; - } - - // Is the joystick present? - if( _glfw_joyGetPos( joy - GLFW_JOYSTICK_1, &ji ) != JOYERR_NOERROR ) - { - return GL_FALSE; - } - - return GL_TRUE; -} - - -//======================================================================== -// _glfwCalcJoystickPos() - Calculate joystick position -//======================================================================== - -static float _glfwCalcJoystickPos( DWORD pos, DWORD min, DWORD max ) -{ - float fpos = (float) pos; - float fmin = (float) min; - float fmax = (float) max; - return (2.0f*(fpos - fmin) / (fmax - fmin)) - 1.0f; -} - - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// _glfwPlatformGetJoystickParam() - Determine joystick capabilities -//======================================================================== - -int _glfwPlatformGetJoystickParam( int joy, int param ) -{ - JOYCAPS jc; - -// return 0; - - // Is joystick present? - if( !_glfwJoystickPresent( joy ) ) - { - return 0; - } - - // We got this far, the joystick is present - if( param == GLFW_PRESENT ) - { - return GL_TRUE; - } - - // Get joystick capabilities - _glfw_joyGetDevCaps( joy - GLFW_JOYSTICK_1, &jc, sizeof(JOYCAPS) ); - - switch( param ) - { - case GLFW_AXES: - // Return number of joystick axes - return jc.wNumAxes; - - case GLFW_BUTTONS: - // Return number of joystick axes - return jc.wNumButtons; - - default: - break; - } - - return 0; -} - - -//======================================================================== -// _glfwPlatformGetJoystickPos() - Get joystick axis positions -//======================================================================== - -int _glfwPlatformGetJoystickPos( int joy, float *pos, int numaxes ) -{ - JOYCAPS jc; - JOYINFOEX ji; - int axis; - -// return 0; - - // Is joystick present? - if( !_glfwJoystickPresent( joy ) ) - { - return 0; - } - - // Get joystick capabilities - _glfw_joyGetDevCaps( joy - GLFW_JOYSTICK_1, &jc, sizeof(JOYCAPS) ); - - // Get joystick state - ji.dwSize = sizeof( JOYINFOEX ); - ji.dwFlags = JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ | - JOY_RETURNR | JOY_RETURNU | JOY_RETURNV; - _glfw_joyGetPosEx( joy - GLFW_JOYSTICK_1, &ji ); - - // Get position values for all axes - axis = 0; - if( axis < numaxes ) - { - pos[ axis++ ] = _glfwCalcJoystickPos( ji.dwXpos, jc.wXmin, - jc.wXmax ); - } - if( axis < numaxes ) - { - pos[ axis++ ] = -_glfwCalcJoystickPos( ji.dwYpos, jc.wYmin, - jc.wYmax ); - } - if( axis < numaxes && jc.wCaps & JOYCAPS_HASZ ) - { - pos[ axis++ ] = _glfwCalcJoystickPos( ji.dwZpos, jc.wZmin, - jc.wZmax ); - } - if( axis < numaxes && jc.wCaps & JOYCAPS_HASR ) - { - pos[ axis++ ] = _glfwCalcJoystickPos( ji.dwRpos, jc.wRmin, - jc.wRmax ); - } - if( axis < numaxes && jc.wCaps & JOYCAPS_HASU ) - { - pos[ axis++ ] = _glfwCalcJoystickPos( ji.dwUpos, jc.wUmin, - jc.wUmax ); - } - if( axis < numaxes && jc.wCaps & JOYCAPS_HASV ) - { - pos[ axis++ ] = -_glfwCalcJoystickPos( ji.dwVpos, jc.wVmin, - jc.wVmax ); - } - - // Return number of returned axes - return axis; -} - - -//======================================================================== -// _glfwPlatformGetJoystickButtons() - Get joystick button states -//======================================================================== - -int _glfwPlatformGetJoystickButtons( int joy, unsigned char *buttons, - int numbuttons ) -{ - JOYCAPS jc; - JOYINFOEX ji; - int button; - -// return 0; - - // Is joystick present? - if( !_glfwJoystickPresent( joy ) ) - { - return 0; - } - - // Get joystick capabilities - _glfw_joyGetDevCaps( joy - GLFW_JOYSTICK_1, &jc, sizeof(JOYCAPS) ); - - // Get joystick state - ji.dwSize = sizeof( JOYINFOEX ); - ji.dwFlags = JOY_RETURNBUTTONS; - _glfw_joyGetPosEx( joy - GLFW_JOYSTICK_1, &ji ); - - // Get states of all requested buttons - button = 0; - while( button < numbuttons && button < (int) jc.wNumButtons ) - { - buttons[ button ] = (unsigned char) - (ji.dwButtons & (1UL << button) ? GLFW_PRESS : GLFW_RELEASE); - button ++; - } - - return button; -} - diff --git a/src/engine/external/glfw/lib/win32/win32_thread.c b/src/engine/external/glfw/lib/win32/win32_thread.c deleted file mode 100644 index 159347a7..00000000 --- a/src/engine/external/glfw/lib/win32/win32_thread.c +++ /dev/null @@ -1,511 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// File: win32_thread.c -// Platform: Windows -// API version: 2.6 -// 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. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -// This is an implementation of POSIX "compatible" condition variables for -// Win32, as described by Douglas C. Schmidt and Irfan Pyarali: -// http://www.cs.wustl.edu/~schmidt/win32-cv-1.html -//************************************************************************ - -enum { - _GLFW_COND_SIGNAL = 0, - _GLFW_COND_BROADCAST = 1 -}; - -typedef struct { - // Signal and broadcast event HANDLEs - HANDLE events[ 2 ]; - - // Count of the number of waiters - unsigned int waiters_count; - - // Serialize access to <waiters_count> - CRITICAL_SECTION waiters_count_lock; -} _GLFWcond; - - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// _glfwNewThread() - This is simply a "wrapper" for calling the user -// thread function. -//======================================================================== - -DWORD WINAPI _glfwNewThread( LPVOID lpParam ) -{ - GLFWthreadfun threadfun; - _GLFWthread *t; - - // Get pointer to thread information for current thread - t = _glfwGetThreadPointer( _glfwPlatformGetThreadID() ); - if( t == NULL ) - { - return 0; - } - - // Get user thread function pointer - threadfun = t->Function; - - // Call the user thread function - threadfun( (void *) lpParam ); - - // Remove thread from thread list - ENTER_THREAD_CRITICAL_SECTION - _glfwRemoveThread( t ); - LEAVE_THREAD_CRITICAL_SECTION - - // When the thread function returns, the thread will die... - return 0; -} - - - -//************************************************************************ -//**** GLFW user functions **** -//************************************************************************ - -//======================================================================== -// _glfwPlatformCreateThread() - Create a new thread -//======================================================================== - -GLFWthread _glfwPlatformCreateThread( GLFWthreadfun fun, void *arg ) -{ - GLFWthread ID; - _GLFWthread *t, *t_tmp; - HANDLE hThread; - DWORD dwThreadId; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Create a new thread information memory area - t = (_GLFWthread *) malloc( sizeof(_GLFWthread) ); - if( t == NULL ) - { - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - return -1; - } - - // Get a new unique thread id - ID = _glfwThrd.NextID ++; - - // Store thread information in the thread list - t->Function = fun; - t->ID = ID; - - // Create thread - hThread = CreateThread( - NULL, // Default security attributes - 0, // Default stack size (1 MB) - _glfwNewThread, // Thread function (a wrapper function) - (LPVOID)arg, // Argument to thread is the user argument - 0, // Default creation flags - &dwThreadId // Returned thread identifier - ); - - // Did the thread creation fail? - if( hThread == NULL ) - { - free( (void *) t ); - LEAVE_THREAD_CRITICAL_SECTION - return -1; - } - - // Store more thread information in the thread list - t->Handle = hThread; - t->WinID = dwThreadId; - - // Append thread to thread list - t_tmp = &_glfwThrd.First; - while( t_tmp->Next != NULL ) - { - t_tmp = t_tmp->Next; - } - t_tmp->Next = t; - t->Previous = t_tmp; - t->Next = NULL; - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Return the GLFW thread ID - return ID; -} - - -//======================================================================== -// _glfwPlatformDestroyThread() - Kill a thread. NOTE: THIS IS A VERY -// DANGEROUS OPERATION, AND SHOULD NOT BE USED EXCEPT IN EXTREME -// SITUATIONS! -//======================================================================== - -void _glfwPlatformDestroyThread( GLFWthread ID ) -{ - _GLFWthread *t; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Get thread information pointer - t = _glfwGetThreadPointer( ID ); - if( t == NULL ) - { - LEAVE_THREAD_CRITICAL_SECTION - return; - } - - // Simply murder the process, no mercy! - if( TerminateThread( t->Handle, 0 ) ) - { - // Close thread handle - CloseHandle( t->Handle ); - - // Remove thread from thread list - _glfwRemoveThread( t ); - } - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION -} - - -//======================================================================== -// _glfwPlatformWaitThread() - Wait for a thread to die -//======================================================================== - -int _glfwPlatformWaitThread( GLFWthread ID, int waitmode ) -{ - DWORD result; - HANDLE hThread; - _GLFWthread *t; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Get thread information pointer - t = _glfwGetThreadPointer( ID ); - - // Is the thread already dead? - if( t == NULL ) - { - LEAVE_THREAD_CRITICAL_SECTION - return GL_TRUE; - } - - // Get thread handle - hThread = t->Handle; - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Wait for thread to die - if( waitmode == GLFW_WAIT ) - { - result = WaitForSingleObject( hThread, INFINITE ); - } - else if( waitmode == GLFW_NOWAIT ) - { - result = WaitForSingleObject( hThread, 0 ); - } - else - { - return GL_FALSE; - } - - // Did we have a time-out? - if( result == WAIT_TIMEOUT ) - { - return GL_FALSE; - } - return GL_TRUE; -} - - -//======================================================================== -// _glfwPlatformGetThreadID() - Return the thread ID for the current -// thread -//======================================================================== - -GLFWthread _glfwPlatformGetThreadID( void ) -{ - _GLFWthread *t; - GLFWthread ID = -1; - DWORD WinID; - - // Get Windows thread ID - WinID = GetCurrentThreadId(); - - // Enter critical section (to avoid an inconsistent thread list) - ENTER_THREAD_CRITICAL_SECTION - - // Loop through entire list of threads to find the matching Windows - // thread ID - for( t = &_glfwThrd.First; t != NULL; t = t->Next ) - { - if( t->WinID == WinID ) - { - ID = t->ID; - break; - } - } - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Return the found GLFW thread identifier - return ID; -} - - -//======================================================================== -// _glfwPlatformCreateMutex() - Create a mutual exclusion object -//======================================================================== - -GLFWmutex _glfwPlatformCreateMutex( void ) -{ - CRITICAL_SECTION *mutex; - - // Allocate memory for mutex - mutex = (CRITICAL_SECTION *) malloc( sizeof(CRITICAL_SECTION) ); - if( !mutex ) - { - return NULL; - } - - // Initialize mutex - InitializeCriticalSection( mutex ); - - // Cast to GLFWmutex and return - return (GLFWmutex) mutex; -} - - -//======================================================================== -// glfwDestroyMutex() - Destroy a mutual exclusion object -//======================================================================== - -void _glfwPlatformDestroyMutex( GLFWmutex mutex ) -{ - // Destroy mutex - DeleteCriticalSection( (CRITICAL_SECTION *) mutex ); - free( mutex ); -} - - -//======================================================================== -// _glfwPlatformLockMutex() - Request access to a mutex -//======================================================================== - -void _glfwPlatformLockMutex( GLFWmutex mutex ) -{ - // Wait for mutex to be released - EnterCriticalSection( (CRITICAL_SECTION *) mutex ); -} - - -//======================================================================== -// _glfwPlatformUnlockMutex() - Release a mutex -//======================================================================== - -void _glfwPlatformUnlockMutex( GLFWmutex mutex ) -{ - // Release mutex - LeaveCriticalSection( (CRITICAL_SECTION *) mutex ); -} - - -//======================================================================== -// _glfwPlatformCreateCond() - Create a new condition variable object -//======================================================================== - -GLFWcond _glfwPlatformCreateCond( void ) -{ - _GLFWcond *cond; - - // Allocate memory for condition variable - cond = (_GLFWcond *) malloc( sizeof(_GLFWcond) ); - if( !cond ) - { - return NULL; - } - - // Initialize condition variable - cond->waiters_count = 0; - cond->events[ _GLFW_COND_SIGNAL ] = CreateEvent( NULL, FALSE, - FALSE, NULL ); - cond->events[ _GLFW_COND_BROADCAST ] = CreateEvent( NULL, TRUE, - FALSE, NULL ); - InitializeCriticalSection( &cond->waiters_count_lock ); - - // Cast to GLFWcond and return - return (GLFWcond) cond; -} - - -//======================================================================== -// _glfwPlatformDestroyCond() - Destroy a condition variable object -//======================================================================== - -void _glfwPlatformDestroyCond( GLFWcond cond ) -{ - // Close the condition variable handles - CloseHandle( ((_GLFWcond *)cond)->events[ _GLFW_COND_SIGNAL ] ); - CloseHandle( ((_GLFWcond *)cond)->events[ _GLFW_COND_BROADCAST ] ); - - // Delete critical section - DeleteCriticalSection( &((_GLFWcond *)cond)->waiters_count_lock ); - - // Free memory for condition variable - free( (void *) cond ); -} - - -//======================================================================== -// _glfwPlatformWaitCond() - Wait for a condition to be raised -//======================================================================== - -void _glfwPlatformWaitCond( GLFWcond cond, GLFWmutex mutex, - double timeout ) -{ - _GLFWcond *cv = (_GLFWcond *) cond; - int result, last_waiter; - DWORD timeout_ms; - - // Avoid race conditions - EnterCriticalSection( &cv->waiters_count_lock ); - cv->waiters_count ++; - LeaveCriticalSection( &cv->waiters_count_lock ); - - // It's ok to release the mutex here since Win32 manual-reset events - // maintain state when used with SetEvent() - LeaveCriticalSection( (CRITICAL_SECTION *) mutex ); - - // Translate timeout into milliseconds - if( timeout >= GLFW_INFINITY ) - { - timeout_ms = INFINITE; - } - else - { - timeout_ms = (DWORD) (1000.0 * timeout + 0.5); - if( timeout_ms <= 0 ) - { - timeout_ms = 1; - } - } - - // Wait for either event to become signaled due to glfwSignalCond or - // glfwBroadcastCond being called - result = WaitForMultipleObjects( 2, cv->events, FALSE, timeout_ms ); - - // Check if we are the last waiter - EnterCriticalSection( &cv->waiters_count_lock ); - cv->waiters_count --; - last_waiter = (result == WAIT_OBJECT_0 + _GLFW_COND_BROADCAST) && - (cv->waiters_count == 0); - LeaveCriticalSection( &cv->waiters_count_lock ); - - // Some thread called glfwBroadcastCond - if( last_waiter ) - { - // We're the last waiter to be notified or to stop waiting, so - // reset the manual event - ResetEvent( cv->events[ _GLFW_COND_BROADCAST ] ); - } - - // Reacquire the mutex - EnterCriticalSection( (CRITICAL_SECTION *) mutex ); -} - - -//======================================================================== -// _glfwPlatformSignalCond() - Signal a condition to one waiting thread -//======================================================================== - -void _glfwPlatformSignalCond( GLFWcond cond ) -{ - _GLFWcond *cv = (_GLFWcond *) cond; - int have_waiters; - - // Avoid race conditions - EnterCriticalSection( &cv->waiters_count_lock ); - have_waiters = cv->waiters_count > 0; - LeaveCriticalSection( &cv->waiters_count_lock ); - - if( have_waiters ) - { - SetEvent( cv->events[ _GLFW_COND_SIGNAL ] ); - } -} - - -//======================================================================== -// _glfwPlatformBroadcastCond() - Broadcast a condition to all waiting -// threads -//======================================================================== - -void _glfwPlatformBroadcastCond( GLFWcond cond ) -{ - _GLFWcond *cv = (_GLFWcond *) cond; - int have_waiters; - - // Avoid race conditions - EnterCriticalSection( &cv->waiters_count_lock ); - have_waiters = cv->waiters_count > 0; - LeaveCriticalSection( &cv->waiters_count_lock ); - - if( have_waiters ) - { - SetEvent( cv->events[ _GLFW_COND_BROADCAST ] ); - } -} - - -//======================================================================== -// _glfwPlatformGetNumberOfProcessors() - Return the number of processors -// in the system. -//======================================================================== - -int _glfwPlatformGetNumberOfProcessors( void ) -{ - SYSTEM_INFO si; - - // Get hardware system information - GetSystemInfo( &si ); - - return (int) si.dwNumberOfProcessors; -} diff --git a/src/engine/external/glfw/lib/win32/win32_time.c b/src/engine/external/glfw/lib/win32/win32_time.c deleted file mode 100644 index ea35a8e5..00000000 --- a/src/engine/external/glfw/lib/win32/win32_time.c +++ /dev/null @@ -1,146 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// File: win32_time.c -// Platform: Windows -// API version: 2.6 -// 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. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// _glfwInitTimer() - Initialise timer -//======================================================================== - -void _glfwInitTimer( void ) -{ - __int64 freq; - - // Check if we have a performance counter - if( QueryPerformanceFrequency( (LARGE_INTEGER *)&freq ) ) - { - // Performance counter is available => use it! - _glfwLibrary.Timer.HasPerformanceCounter = GL_TRUE; - - // Counter resolution is 1 / counter frequency - _glfwLibrary.Timer.Resolution = 1.0 / (double)freq; - - // Set start time for timer - QueryPerformanceCounter( (LARGE_INTEGER *)&_glfwLibrary.Timer.t0_64 ); - } - else - { - // No performace counter available => use the tick counter - _glfwLibrary.Timer.HasPerformanceCounter = GL_FALSE; - - // Counter resolution is 1 ms - _glfwLibrary.Timer.Resolution = 0.001; - - // Set start time for timer - _glfwLibrary.Timer.t0_32 = _glfw_timeGetTime(); - } -} - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Return timer value in seconds -//======================================================================== - -double _glfwPlatformGetTime( void ) -{ - double t; - __int64 t_64; - - if( _glfwLibrary.Timer.HasPerformanceCounter ) - { - QueryPerformanceCounter( (LARGE_INTEGER *)&t_64 ); - t = (double)(t_64 - _glfwLibrary.Timer.t0_64); - } - else - { - t = (double)(_glfw_timeGetTime() - _glfwLibrary.Timer.t0_32); - } - - // Calculate the current time in seconds - return t * _glfwLibrary.Timer.Resolution; -} - - -//======================================================================== -// Set timer value in seconds -//======================================================================== - -void _glfwPlatformSetTime( double t ) -{ - __int64 t_64; - - if( _glfwLibrary.Timer.HasPerformanceCounter ) - { - QueryPerformanceCounter( (LARGE_INTEGER *)&t_64 ); - _glfwLibrary.Timer.t0_64 = t_64 - (__int64)(t/_glfwLibrary.Timer.Resolution); - } - else - { - _glfwLibrary.Timer.t0_32 = _glfw_timeGetTime() - (int)(t*1000.0); - } -} - - -//======================================================================== -// Put a thread to sleep for a specified amount of time -//======================================================================== - -void _glfwPlatformSleep( double time ) -{ - DWORD t; - - if( time == 0.0 ) - { - t = 0; - } - else if( time < 0.001 ) - { - t = 1; - } - else if( time > 2147483647.0 ) - { - t = 2147483647; - } - else - { - t = (DWORD)(time*1000.0 + 0.5); - } - Sleep( t ); -} - diff --git a/src/engine/external/glfw/lib/win32/win32_window.c b/src/engine/external/glfw/lib/win32/win32_window.c deleted file mode 100644 index 32d6a6d4..00000000 --- a/src/engine/external/glfw/lib/win32/win32_window.c +++ /dev/null @@ -1,1714 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// File: win32_window.c -// Platform: Windows -// API version: 2.6 -// 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. -// -//======================================================================== - -#include "internal.h" - - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -#define _GLFW_WNDCLASSNAME "GLFW26" - - -//======================================================================== -// Enable/disable minimize/restore animations -//======================================================================== - -static int _glfwMinMaxAnimations( int enable ) -{ - ANIMATIONINFO AI; - int old_enable; - - // Get old animation setting - AI.cbSize = sizeof( ANIMATIONINFO ); - SystemParametersInfo( SPI_GETANIMATION, AI.cbSize, &AI, 0 ); - old_enable = AI.iMinAnimate; - - // If requested, change setting - if( old_enable != enable ) - { - AI.iMinAnimate = enable; - SystemParametersInfo( SPI_SETANIMATION, AI.cbSize, &AI, - SPIF_SENDCHANGE ); - } - - return old_enable; -} - - -//======================================================================== -// Function for bringing a window into focus and placing it on top of the -// window z stack. Due to some nastiness with how Win98/ME/2k/XP handles -// SetForegroundWindow, we have to go through some really bizarre measures to -// achieve this (thanks again, MS, for making life so much easier)! -//======================================================================== - -static void _glfwSetForegroundWindow( HWND hWnd ) -{ - int try_count = 0; - int old_animate; - - // Try the standard approach first... - BringWindowToTop( hWnd ); - SetForegroundWindow( hWnd ); - - // If it worked, return now - if( hWnd == GetForegroundWindow() ) - { - // Try to modify the system settings (since this is the foreground - // process, we are allowed to do this) - SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)0, - SPIF_SENDCHANGE ); - return; - } - - // For other Windows versions than 95 & NT4.0, the standard approach - // may not work, so if we failed we have to "trick" Windows into - // making our window the foureground window: Iconify and restore - // again. It is ugly, but it seems to work (we turn off those annoying - // zoom animations to make it look a bit better at least). - - // Turn off minimize/restore animations - old_animate = _glfwMinMaxAnimations( 0 ); - - // We try this a few times, just to be on the safe side of things... - do - { - // Iconify & restore - ShowWindow( hWnd, SW_HIDE ); - ShowWindow( hWnd, SW_SHOWMINIMIZED ); - ShowWindow( hWnd, SW_SHOWNORMAL ); - - // Try to get focus - BringWindowToTop( hWnd ); - SetForegroundWindow( hWnd ); - - // We do not want to keep going on forever, so we keep track of - // how many times we tried - try_count ++; - } - while( hWnd != GetForegroundWindow() && try_count <= 3 ); - - // Restore the system minimize/restore animation setting - (void) _glfwMinMaxAnimations( old_animate ); - - // Try to modify the system settings (since this is now hopefully the - // foreground process, we are probably allowed to do this) - SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)0, - SPIF_SENDCHANGE ); -} - - -//======================================================================== -// Sets the device context pixel format using a PFD -//======================================================================== - -static int _glfwSetPixelFormatPFD( int redbits, int greenbits, int bluebits, - int alphabits, int depthbits, int stencilbits, - int mode, _GLFWhints* hints ) -{ - int PixelFormat; - PIXELFORMATDESCRIPTOR pfd; - - // Set required pixel format - pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); - pfd.nVersion = 1; - pfd.dwFlags = PFD_DRAW_TO_WINDOW | // Draw to window - PFD_SUPPORT_OPENGL | // Support OpenGL - PFD_DOUBLEBUFFER; // Double buffered window - pfd.iPixelType = PFD_TYPE_RGBA; // Request an RGBA format - pfd.cColorBits = (BYTE) (redbits + - greenbits + - bluebits); // Color bits (ex. alpha) - pfd.cRedBits = (BYTE) redbits; // Red bits - pfd.cRedShift = 0; // Red shift ignored - pfd.cGreenBits = (BYTE) greenbits; // Green bits - pfd.cGreenShift = 0; // Green shift ignored - pfd.cBlueBits = (BYTE) bluebits; // Blue bits - pfd.cBlueShift = 0; // Blue shift ignored - pfd.cAlphaBits = (BYTE) alphabits; // Alpha bits - pfd.cAlphaShift = 0; // Alpha shift ignored - pfd.cAccumBits = (BYTE) (hints->AccumRedBits + - hints->AccumGreenBits + - hints->AccumBlueBits + - hints->AccumAlphaBits); // Accum. bits - pfd.cAccumRedBits = (BYTE) hints->AccumRedBits; // Accum. red bits - pfd.cAccumGreenBits = (BYTE) hints->AccumGreenBits; // Accum. green bits - pfd.cAccumBlueBits = (BYTE) hints->AccumBlueBits; // Accum. blue bits - pfd.cAccumAlphaBits = (BYTE) hints->AccumAlphaBits; // Accum. alpha bits - pfd.cDepthBits = (BYTE) depthbits; // Depth buffer bits - pfd.cStencilBits = (BYTE) stencilbits; // Stencil buffer bits - pfd.cAuxBuffers = (BYTE) hints->AuxBuffers; // No. of aux buffers - pfd.iLayerType = PFD_MAIN_PLANE; // Drawing layer: main - pfd.bReserved = 0; // (reserved) - pfd.dwLayerMask = 0; // Ignored - pfd.dwVisibleMask = 0; // " - pfd.dwDamageMask = 0; // " - - if( depthbits <= 0 ) - { - // We do not need a depth buffer - pfd.dwFlags |= PFD_DEPTH_DONTCARE; - } - - if( hints->Stereo ) - { - // Request a stereo mode - pfd.dwFlags |= PFD_STEREO; - } - - // Find a matching pixel format - PixelFormat = _glfw_ChoosePixelFormat( _glfwWin.DC, &pfd ); - if( !PixelFormat ) - { - return GL_FALSE; - } - - // Get actual pixel format description - if( !_glfw_DescribePixelFormat( _glfwWin.DC, PixelFormat, sizeof(pfd), &pfd ) ) - { - return GL_FALSE; - } - - // "stereo" is a strict requirement - if( hints->Stereo && !(pfd.dwFlags & PFD_STEREO) ) - { - return GL_FALSE; - } - - // Set the pixel-format - if( !_glfw_SetPixelFormat( _glfwWin.DC, PixelFormat, &pfd ) ) - { - return GL_FALSE; - } - - return GL_TRUE; -} - - -//======================================================================== -// Sets the device context pixel format using attributes -//======================================================================== - -#define _glfwSetWGLAttribute( _glfwName, _glfwValue ) \ - attribs[ count++ ] = _glfwName; \ - attribs[ count++ ] = _glfwValue; - -static int _glfwSetPixelFormatAttrib( int redbits, int greenbits, int bluebits, - int alphabits, int depthbits, int stencilbits, - int mode, _GLFWhints* hints ) -{ - int PixelFormat, dummy, count = 0; - int attribs[128]; - PIXELFORMATDESCRIPTOR pfd; - - int accumredbits = hints->AccumRedBits; - int accumgreenbits = hints->AccumGreenBits; - int accumbluebits = hints->AccumBlueBits; - int accumalphabits = hints->AccumAlphaBits; - - _glfwSetWGLAttribute( WGL_DRAW_TO_WINDOW_ARB, GL_TRUE ); - _glfwSetWGLAttribute( WGL_ACCELERATION_ARB, WGL_FULL_ACCELERATION_ARB ); - _glfwSetWGLAttribute( WGL_SUPPORT_OPENGL_ARB, GL_TRUE ); - _glfwSetWGLAttribute( WGL_DOUBLE_BUFFER_ARB, GL_TRUE ); - _glfwSetWGLAttribute( WGL_COLOR_BITS_ARB, redbits + greenbits + bluebits ); - _glfwSetWGLAttribute( WGL_RED_BITS_ARB, redbits ); - _glfwSetWGLAttribute( WGL_GREEN_BITS_ARB, greenbits ); - _glfwSetWGLAttribute( WGL_BLUE_BITS_ARB, bluebits ); - _glfwSetWGLAttribute( WGL_ALPHA_BITS_ARB, alphabits ); - _glfwSetWGLAttribute( WGL_DEPTH_BITS_ARB, depthbits ); - _glfwSetWGLAttribute( WGL_STENCIL_BITS_ARB, stencilbits ); - _glfwSetWGLAttribute( WGL_AUX_BUFFERS_ARB, hints->AuxBuffers ); - - if( accumredbits || accumgreenbits || accumbluebits || accumalphabits ) - { - _glfwSetWGLAttribute( WGL_ACCUM_BITS_ARB, accumredbits + - accumgreenbits + - accumbluebits + - accumalphabits ); - - _glfwSetWGLAttribute( WGL_ACCUM_RED_BITS_ARB, accumredbits ); - _glfwSetWGLAttribute( WGL_ACCUM_GREEN_BITS_ARB, accumgreenbits ); - _glfwSetWGLAttribute( WGL_ACCUM_BLUE_BITS_ARB, accumbluebits ); - _glfwSetWGLAttribute( WGL_ACCUM_ALPHA_BITS_ARB, accumalphabits ); - } - - if( hints->Stereo ) - { - _glfwSetWGLAttribute( WGL_STEREO_ARB, GL_TRUE ); - } - - if( hints->Samples > 0 ) - { - _glfwSetWGLAttribute( WGL_SAMPLE_BUFFERS_ARB, 1 ); - _glfwSetWGLAttribute( WGL_SAMPLES_ARB, hints->Samples ); - } - - _glfwSetWGLAttribute( 0, 0 ); - - if( !_glfwWin.ChoosePixelFormat( _glfwWin.DC, attribs, NULL, 1, &PixelFormat, &dummy ) ) - { - return GL_FALSE; - } - - if( !_glfw_DescribePixelFormat( _glfwWin.DC, PixelFormat, sizeof(pfd), &pfd ) ) - { - return GL_FALSE; - } - - // Set the pixel-format - if( !_glfw_SetPixelFormat( _glfwWin.DC, PixelFormat, &pfd ) ) - { - return GL_FALSE; - } - - return GL_TRUE; -} - -#undef _glfwSetWGLAttribute - - -//======================================================================== -// Translates a Windows key to the corresponding GLFW key -//======================================================================== - -static int _glfwTranslateKey( WPARAM wParam, LPARAM lParam ) -{ - MSG next_msg; - DWORD msg_time; - DWORD scan_code; - - // Check which key was pressed or released - switch( wParam ) - { - // The SHIFT keys require special handling - case VK_SHIFT: - // Compare scan code for this key with that of VK_RSHIFT in - // order to determine which shift key was pressed (left or - // right) - scan_code = MapVirtualKey( VK_RSHIFT, 0 ); - if( ((lParam & 0x01ff0000) >> 16) == scan_code ) - { - return GLFW_KEY_RSHIFT; - } - return GLFW_KEY_LSHIFT; - - // The CTRL keys require special handling - case VK_CONTROL: - // Is this an extended key (i.e. right key)? - if( lParam & 0x01000000 ) - { - return GLFW_KEY_RCTRL; - } - // Here is a trick: "Alt Gr" sends LCTRL, then RALT. We only - // want the RALT message, so we try to see if the next message - // is a RALT message. In that case, this is a false LCTRL! - msg_time = GetMessageTime(); - if( PeekMessage( &next_msg, NULL, 0, 0, PM_NOREMOVE ) ) - { - if( next_msg.message == WM_KEYDOWN || - next_msg.message == WM_SYSKEYDOWN ) - { - if( next_msg.wParam == VK_MENU && - (next_msg.lParam & 0x01000000) && - next_msg.time == msg_time ) - { - // Next message is a RALT down message, which - // means that this is NOT a proper LCTRL message! - return GLFW_KEY_UNKNOWN; - } - } - } - return GLFW_KEY_LCTRL; - - // The ALT keys require special handling - case VK_MENU: - // Is this an extended key (i.e. right key)? - if( lParam & 0x01000000 ) - { - return GLFW_KEY_RALT; - } - return GLFW_KEY_LALT; - - // The ENTER keys require special handling - case VK_RETURN: - // Is this an extended key (i.e. right key)? - if( lParam & 0x01000000 ) - { - return GLFW_KEY_KP_ENTER; - } - return GLFW_KEY_ENTER; - - // Special keys (non character keys) - case VK_ESCAPE: return GLFW_KEY_ESC; - case VK_TAB: return GLFW_KEY_TAB; - case VK_BACK: return GLFW_KEY_BACKSPACE; - case VK_HOME: return GLFW_KEY_HOME; - case VK_END: return GLFW_KEY_END; - case VK_PRIOR: return GLFW_KEY_PAGEUP; - case VK_NEXT: return GLFW_KEY_PAGEDOWN; - case VK_INSERT: return GLFW_KEY_INSERT; - case VK_DELETE: return GLFW_KEY_DEL; - case VK_LEFT: return GLFW_KEY_LEFT; - case VK_UP: return GLFW_KEY_UP; - case VK_RIGHT: return GLFW_KEY_RIGHT; - case VK_DOWN: return GLFW_KEY_DOWN; - case VK_F1: return GLFW_KEY_F1; - case VK_F2: return GLFW_KEY_F2; - case VK_F3: return GLFW_KEY_F3; - case VK_F4: return GLFW_KEY_F4; - case VK_F5: return GLFW_KEY_F5; - case VK_F6: return GLFW_KEY_F6; - case VK_F7: return GLFW_KEY_F7; - case VK_F8: return GLFW_KEY_F8; - case VK_F9: return GLFW_KEY_F9; - case VK_F10: return GLFW_KEY_F10; - case VK_F11: return GLFW_KEY_F11; - case VK_F12: return GLFW_KEY_F12; - case VK_F13: return GLFW_KEY_F13; - case VK_F14: return GLFW_KEY_F14; - case VK_F15: return GLFW_KEY_F15; - case VK_F16: return GLFW_KEY_F16; - case VK_F17: return GLFW_KEY_F17; - case VK_F18: return GLFW_KEY_F18; - case VK_F19: return GLFW_KEY_F19; - case VK_F20: return GLFW_KEY_F20; - case VK_F21: return GLFW_KEY_F21; - case VK_F22: return GLFW_KEY_F22; - case VK_F23: return GLFW_KEY_F23; - case VK_F24: return GLFW_KEY_F24; - case VK_SPACE: return GLFW_KEY_SPACE; - - // Numeric keypad - case VK_NUMPAD0: return GLFW_KEY_KP_0; - case VK_NUMPAD1: return GLFW_KEY_KP_1; - case VK_NUMPAD2: return GLFW_KEY_KP_2; - case VK_NUMPAD3: return GLFW_KEY_KP_3; - case VK_NUMPAD4: return GLFW_KEY_KP_4; - case VK_NUMPAD5: return GLFW_KEY_KP_5; - case VK_NUMPAD6: return GLFW_KEY_KP_6; - case VK_NUMPAD7: return GLFW_KEY_KP_7; - case VK_NUMPAD8: return GLFW_KEY_KP_8; - case VK_NUMPAD9: return GLFW_KEY_KP_9; - case VK_DIVIDE: return GLFW_KEY_KP_DIVIDE; - case VK_MULTIPLY: return GLFW_KEY_KP_MULTIPLY; - case VK_SUBTRACT: return GLFW_KEY_KP_SUBTRACT; - case VK_ADD: return GLFW_KEY_KP_ADD; - case VK_DECIMAL: return GLFW_KEY_KP_DECIMAL; - - // The rest (should be printable keys) - default: - // Convert to printable character (ISO-8859-1 or Unicode) - wParam = MapVirtualKey( (UINT) wParam, 2 ) & 0x0000FFFF; - - // Make sure that the character is uppercase - if( _glfwLibrary.Sys.HasUnicode ) - { - wParam = (WPARAM) CharUpperW( (LPWSTR) wParam ); - } - else - { - wParam = (WPARAM) CharUpperA( (LPSTR) wParam ); - } - - // Valid ISO-8859-1 character? - if( (wParam >= 32 && wParam <= 126) || - (wParam >= 160 && wParam <= 255) ) - { - return (int) wParam; - } - return GLFW_KEY_UNKNOWN; - } -} - - -//======================================================================== -// Translates a windows key to Unicode -//======================================================================== - -static void _glfwTranslateChar( DWORD wParam, DWORD lParam, int action ) -{ - BYTE keyboard_state[ 256 ]; - UCHAR char_buf[ 10 ]; - WCHAR unicode_buf[ 10 ]; - UINT scan_code; - int i, num_chars, unicode; - - // Get keyboard state - GetKeyboardState( keyboard_state ); - - // Derive scan code from lParam and action - scan_code = (lParam & 0x01ff0000) >> 16; - if( action == GLFW_RELEASE ) - { - scan_code |= 0x8000000; - } - - // Do we have Unicode support? - if( _glfwLibrary.Sys.HasUnicode ) - { - // Convert to Unicode - num_chars = ToUnicode( - wParam, // virtual-key code - scan_code, // scan code - keyboard_state, // key-state array - unicode_buf, // buffer for translated key - 10, // size of translated key buffer - 0 // active-menu flag - ); - unicode = 1; - } - else - { - // Convert to ISO-8859-1 - num_chars = ToAscii( - wParam, // virtual-key code - scan_code, // scan code - keyboard_state, // key-state array - (LPWORD) char_buf, // buffer for translated key - 0 // active-menu flag - ); - unicode = 0; - } - - // Report characters - for( i = 0; i < num_chars; i++ ) - { - // Get next character from buffer - if( unicode ) - { - _glfwInputChar( (int) unicode_buf[ i ], action ); - } - else - { - _glfwInputChar( (int) char_buf[ i ], action ); - } - } -} - - -//======================================================================== -// Window callback function (handles window events) -//======================================================================== - -static LRESULT CALLBACK _glfwWindowCallback( HWND hWnd, UINT uMsg, - WPARAM wParam, LPARAM lParam ) -{ - int WheelDelta, Iconified; - - // Handle certain window messages - switch( uMsg ) - { - // Window activate message? (iconification?) - case WM_ACTIVATE: - { - _glfwWin.Active = LOWORD(wParam) != WA_INACTIVE ? GL_TRUE : GL_FALSE; - - Iconified = HIWORD(wParam) ? GL_TRUE : GL_FALSE; - - // Were we deactivated/iconified? - if( (!_glfwWin.Active || Iconified) && !_glfwWin.Iconified ) - { - _glfwInputDeactivation(); - - // If we are in fullscreen mode we need to iconify - if( _glfwWin.Opened && _glfwWin.Fullscreen ) - { - // Do we need to manually iconify? - if( !Iconified ) - { - // Minimize window - CloseWindow( _glfwWin.Wnd ); - - // The window is now iconified - Iconified = GL_TRUE; - } - - // Change display settings to the desktop resolution - ChangeDisplaySettings( NULL, CDS_FULLSCREEN ); - } - - // Unlock mouse - if( !_glfwWin.OldMouseLockValid ) - { - _glfwWin.OldMouseLock = _glfwWin.MouseLock; - _glfwWin.OldMouseLockValid = GL_TRUE; - glfwEnable( GLFW_MOUSE_CURSOR ); - } - } - else if( _glfwWin.Active || !Iconified ) - { - // If we are in fullscreen mode we need to maximize - if( _glfwWin.Opened && _glfwWin.Fullscreen && _glfwWin.Iconified ) - { - // Change display settings to the user selected mode - _glfwSetVideoModeMODE( _glfwWin.ModeID ); - - // Do we need to manually restore window? - if( Iconified ) - { - // Restore window - OpenIcon( _glfwWin.Wnd ); - - // The window is no longer iconified - Iconified = GL_FALSE; - - // Activate window - ShowWindow( hWnd, SW_SHOW ); - _glfwSetForegroundWindow( _glfwWin.Wnd ); - SetFocus( _glfwWin.Wnd ); - } - } - - // Lock mouse, if necessary - if( _glfwWin.OldMouseLockValid && _glfwWin.OldMouseLock ) - { - glfwDisable( GLFW_MOUSE_CURSOR ); - } - _glfwWin.OldMouseLockValid = GL_FALSE; - } - - _glfwWin.Iconified = Iconified; - return 0; - } - - // Intercept system commands (forbid certain actions/events) - case WM_SYSCOMMAND: - { - switch( wParam ) - { - // Screensaver trying to start or monitor trying to enter - // powersave? - case SC_SCREENSAVE: - case SC_MONITORPOWER: - if( _glfwWin.Fullscreen ) - { - return 0; - } - else - { - break; - } - - // User trying to access application menu using ALT? - case SC_KEYMENU: - return 0; - } - break; - } - - // Did we receive a close message? - case WM_CLOSE: - PostQuitMessage( 0 ); - return 0; - - // Is a key being pressed? - case WM_KEYDOWN: - case WM_SYSKEYDOWN: - { - // Translate and report key press - _glfwInputKey( _glfwTranslateKey( wParam, lParam ), - GLFW_PRESS ); - - // Translate and report character input - if( _glfwWin.CharCallback ) - { - _glfwTranslateChar( (DWORD) wParam, (DWORD) lParam, GLFW_PRESS ); - } - return 0; - } - - // Is a key being released? - case WM_KEYUP: - case WM_SYSKEYUP: - { - // Special trick: release both shift keys on SHIFT up event - if( wParam == VK_SHIFT ) - { - _glfwInputKey( GLFW_KEY_LSHIFT, GLFW_RELEASE ); - _glfwInputKey( GLFW_KEY_RSHIFT, GLFW_RELEASE ); - } - else - { - // Translate and report key release - _glfwInputKey( _glfwTranslateKey( wParam, lParam ), - GLFW_RELEASE ); - } - - // Translate and report character input - if( _glfwWin.CharCallback ) - { - _glfwTranslateChar( (DWORD) wParam, (DWORD) lParam, GLFW_RELEASE ); - } - - return 0; - } - - // Were any of the mouse-buttons pressed? - case WM_LBUTTONDOWN: - SetCapture(hWnd); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_LEFT, GLFW_PRESS ); - return 0; - case WM_RBUTTONDOWN: - SetCapture(hWnd); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_RIGHT, GLFW_PRESS ); - return 0; - case WM_MBUTTONDOWN: - SetCapture(hWnd); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_MIDDLE, GLFW_PRESS ); - return 0; - case WM_XBUTTONDOWN: - { - if( HIWORD(wParam) == XBUTTON1 ) - { - SetCapture(hWnd); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_4, GLFW_PRESS ); - } - else if( HIWORD(wParam) == XBUTTON2 ) - { - SetCapture(hWnd); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_5, GLFW_PRESS ); - } - return 1; - } - - // Were any of the mouse-buttons released? - case WM_LBUTTONUP: - ReleaseCapture(); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_LEFT, GLFW_RELEASE ); - return 0; - case WM_RBUTTONUP: - ReleaseCapture(); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_RIGHT, GLFW_RELEASE ); - return 0; - case WM_MBUTTONUP: - ReleaseCapture(); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_MIDDLE, GLFW_RELEASE ); - return 0; - case WM_XBUTTONUP: - { - if( HIWORD(wParam) == XBUTTON1 ) - { - ReleaseCapture(); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_4, GLFW_RELEASE ); - } - else if( HIWORD(wParam) == XBUTTON2 ) - { - ReleaseCapture(); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_5, GLFW_RELEASE ); - } - return 1; - } - - // Did the mouse move? - case WM_MOUSEMOVE: - { - { - int NewMouseX, NewMouseY; - - // Get signed (!) mouse position - NewMouseX = (int)((short)LOWORD(lParam)); - NewMouseY = (int)((short)HIWORD(lParam)); - - if( NewMouseX != _glfwInput.OldMouseX || - NewMouseY != _glfwInput.OldMouseY ) - { - if( _glfwWin.MouseLock ) - { - _glfwInput.MousePosX += NewMouseX - - _glfwInput.OldMouseX; - _glfwInput.MousePosY += NewMouseY - - _glfwInput.OldMouseY; - } - else - { - _glfwInput.MousePosX = NewMouseX; - _glfwInput.MousePosY = NewMouseY; - } - _glfwInput.OldMouseX = NewMouseX; - _glfwInput.OldMouseY = NewMouseY; - _glfwInput.MouseMoved = GL_TRUE; - - // Call user callback function - if( _glfwWin.MousePosCallback ) - { - _glfwWin.MousePosCallback( _glfwInput.MousePosX, - _glfwInput.MousePosY ); - } - } - } - return 0; - } - - // Mouse wheel action? - case WM_MOUSEWHEEL: - { - // WM_MOUSEWHEEL is not supported under Windows 95 - if( _glfwLibrary.Sys.WinVer != _GLFW_WIN_95 ) - { - WheelDelta = (((int)wParam) >> 16) / WHEEL_DELTA; - _glfwInput.WheelPos += WheelDelta; - if( _glfwWin.MouseWheelCallback ) - { - _glfwWin.MouseWheelCallback( _glfwInput.WheelPos ); - } - return 0; - } - break; - } - - // Resize the window? - case WM_SIZE: - { - // get the new size - _glfwWin.Width = LOWORD(lParam); - _glfwWin.Height = HIWORD(lParam); - - // If the mouse is locked, update the clipping rect - if( _glfwWin.MouseLock ) - { - RECT ClipWindowRect; - if( GetWindowRect( _glfwWin.Wnd, &ClipWindowRect ) ) - { - ClipCursor( &ClipWindowRect ); - } - } - - // Call the user-supplied callback, if it exists - if( _glfwWin.WindowSizeCallback ) - { - _glfwWin.WindowSizeCallback( LOWORD(lParam), - HIWORD(lParam) ); - } - return 0; - } - - // Move the window? - case WM_MOVE: - { - // If the mouse is locked, update the clipping rect - if( _glfwWin.MouseLock ) - { - RECT ClipWindowRect; - if( GetWindowRect( _glfwWin.Wnd, &ClipWindowRect ) ) - { - ClipCursor( &ClipWindowRect ); - } - } - return 0; - } - - // Was the window contents damaged? - case WM_PAINT: - { - // Call user callback function - if( _glfwWin.WindowRefreshCallback ) - { - _glfwWin.WindowRefreshCallback(); - } - break; - } - - case WM_DISPLAYCHANGE: - { - // TODO: Do stuff here. - - break; - } - } - - // Pass all unhandled messages to DefWindowProc - return DefWindowProc( hWnd, uMsg, wParam, lParam ); -} - - -//======================================================================== -// Translate client window size to full window size (including window borders) -//======================================================================== - -static void _glfwGetFullWindowSize( int w, int h, int *w2, int *h2 ) -{ - RECT rect; - - // Create a window rectangle - rect.left = (long)0; - rect.right = (long)w-1; - rect.top = (long)0; - rect.bottom = (long)h-1; - - // Adjust according to window styles - AdjustWindowRectEx( &rect, _glfwWin.dwStyle, FALSE, - _glfwWin.dwExStyle ); - - // Calculate width and height of full window - *w2 = rect.right-rect.left+1; - *h2 = rect.bottom-rect.top+1; -} - - -//======================================================================== -// Initialize WGL-specific extensions -//======================================================================== - -static void _glfwInitWGLExtensions( void ) -{ - GLubyte *extensions; - int has_swap_control, has_pixel_format; - - _glfwWin.GetExtensionsStringEXT = (WGLGETEXTENSIONSSTRINGEXT_T) - wglGetProcAddress( "wglGetExtensionsStringEXT" ); - if( !_glfwWin.GetExtensionsStringEXT ) - { - // Try wglGetExtensionsStringARB - _glfwWin.GetExtensionsStringARB = (WGLGETEXTENSIONSSTRINGARB_T) - wglGetProcAddress( "wglGetExtensionsStringARB" ); - if( !_glfwWin.GetExtensionsStringARB ) - { - return; - } - } - - // Initialize OpenGL extension: WGL_EXT_swap_control - has_swap_control = GL_FALSE; - has_pixel_format = GL_FALSE; - extensions = (GLubyte *) glGetString( GL_EXTENSIONS ); - - if( extensions != NULL ) - { - has_swap_control = _glfwStringInExtensionString( - "WGL_EXT_swap_control", - extensions - ); - has_pixel_format = _glfwStringInExtensionString( - "WGL_ARB_pixel_format", - extensions - ); - } - - if( !has_swap_control ) - { - has_swap_control = _glfwPlatformExtensionSupported( - "WGL_EXT_swap_control" - ); - } - - if( !has_pixel_format ) - { - has_pixel_format = _glfwPlatformExtensionSupported( - "WGL_ARB_pixel_format" - ); - } - - if( has_swap_control ) - { - _glfwWin.SwapInterval = (WGLSWAPINTERVALEXT_T) - wglGetProcAddress( "wglSwapIntervalEXT" ); - } - else - { - _glfwWin.SwapInterval = NULL; - } - - if( has_pixel_format ) - { - _glfwWin.ChoosePixelFormat = (WGLCHOOSEPIXELFORMATARB_T) - wglGetProcAddress( "wglChoosePixelFormatARB" ); - _glfwWin.GetPixelFormatAttribiv = (WGLGETPIXELFORMATATTRIBIVARB_T) - wglGetProcAddress( "wglGetPixelFormatAttribivARB" ); - } - else - { - _glfwWin.ChoosePixelFormat = NULL; - _glfwWin.GetPixelFormatAttribiv = NULL; - } -} - - -//======================================================================== -// Creates the GLFW window and rendering context -//======================================================================== - -static int _glfwCreateWindow( int redbits, int greenbits, int bluebits, - int alphabits, int depthbits, int stencilbits, - int mode, _GLFWhints* hints ) -{ - int full_width, full_height; - RECT wa; - POINT pos; - - _glfwWin.DC = NULL; - _glfwWin.RC = NULL; - _glfwWin.Wnd = NULL; - - // Set window size to true requested size (adjust for window borders) - _glfwGetFullWindowSize( _glfwWin.Width, _glfwWin.Height, &full_width, - &full_height ); - - // Adjust window position to working area (e.g. if the task bar is at - // the top of the display). Fullscreen windows are always opened in - // the upper left corner regardless of the desktop working area. - if( _glfwWin.Fullscreen ) - { - wa.left = wa.top = 0; - } - else - { - SystemParametersInfo( SPI_GETWORKAREA, 0, &wa, 0 ); - } - - // Create window - _glfwWin.Wnd = CreateWindowEx( - _glfwWin.dwExStyle, // Extended style - _GLFW_WNDCLASSNAME, // Class name - "GLFW Window", // Window title - _glfwWin.dwStyle, // Defined window style - wa.left, wa.top, // Window position - full_width, // Decorated window width - full_height, // Decorated window height - NULL, // No parent window - NULL, // No menu - _glfwLibrary.Instance, // Instance - NULL ); // Nothing to WM_CREATE - - if( !_glfwWin.Wnd ) - { - return GL_FALSE; - } - - // Get a device context - _glfwWin.DC = GetDC( _glfwWin.Wnd ); - if( !_glfwWin.DC ) - { - return GL_FALSE; - } - - if( _glfwWin.ChoosePixelFormat ) - { - if( !_glfwSetPixelFormatAttrib( redbits, greenbits, bluebits, alphabits, - depthbits, stencilbits, mode, hints ) ) - { - return GL_FALSE; - } - } - else - { - if( !_glfwSetPixelFormatPFD( redbits, greenbits, bluebits, alphabits, - depthbits, stencilbits, mode, hints ) ) - { - return GL_FALSE; - } - } - - // Get a rendering context - _glfwWin.RC = wglCreateContext( _glfwWin.DC ); - if( !_glfwWin.RC ) - { - return GL_FALSE; - } - - // Activate the OpenGL rendering context - if( !wglMakeCurrent( _glfwWin.DC, _glfwWin.RC ) ) - { - return GL_FALSE; - } - - // Initialize WGL-specific OpenGL extensions - _glfwInitWGLExtensions(); - - // Initialize mouse position - GetCursorPos( &pos ); - ScreenToClient( _glfwWin.Wnd, &pos ); - _glfwInput.OldMouseX = _glfwInput.MousePosX = pos.x; - _glfwInput.OldMouseY = _glfwInput.MousePosY = pos.y; - - return GL_TRUE; -} - - -//======================================================================== -// Destroys the GLFW window and rendering context -//======================================================================== - -static void _glfwDestroyWindow( void ) -{ - // Do we have a rendering context? - if( _glfwWin.RC ) - { - // Release the DC and RC contexts - wglMakeCurrent( NULL, NULL ); - - // Delete the rendering context - wglDeleteContext( _glfwWin.RC ); - _glfwWin.RC = NULL; - } - - // Do we have a device context? - if( _glfwWin.DC ) - { - // Release the device context - ReleaseDC( _glfwWin.Wnd, _glfwWin.DC ); - _glfwWin.DC = NULL; - } - - // Do we have a window? - if( _glfwWin.Wnd ) - { - // Destroy the window - if( _glfwLibrary.Sys.WinVer <= _GLFW_WIN_NT4 ) - { - // Note: Hiding the window first fixes an annoying W98/NT4 - // remaining icon bug for fullscreen displays - ShowWindow( _glfwWin.Wnd, SW_HIDE ); - } - - DestroyWindow( _glfwWin.Wnd ); - _glfwWin.Wnd = NULL; - } -} - - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Here is where the window is created, and the OpenGL rendering context is -// created -//======================================================================== - -int _glfwPlatformOpenWindow( int width, int height, - int redbits, int greenbits, int bluebits, - int alphabits, int depthbits, int stencilbits, - int mode, _GLFWhints* hints ) -{ - WNDCLASS wc; - DWORD dwStyle, dwExStyle; - - // Clear platform specific GLFW window state - _glfwWin.ClassAtom = 0; - _glfwWin.OldMouseLockValid = GL_FALSE; - _glfwWin.ChoosePixelFormat = NULL; - _glfwWin.GetPixelFormatAttribiv = NULL; - - // Remember desired refresh rate for this window (used only in - // fullscreen mode) - _glfwWin.DesiredRefreshRate = hints->RefreshRate; - - // Set window class parameters - wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; // Redraw on... - wc.lpfnWndProc = (WNDPROC)_glfwWindowCallback; // Message handler - wc.cbClsExtra = 0; // No extra class data - wc.cbWndExtra = 0; // No extra window data - wc.hInstance = _glfwLibrary.Instance; // Set instance - wc.hCursor = LoadCursor( NULL, IDC_ARROW ); // Load arrow pointer - wc.hbrBackground = NULL; // No background - wc.lpszMenuName = NULL; // No menu - wc.lpszClassName = _GLFW_WNDCLASSNAME; // Set class name - - // Load user-provided icon if available - wc.hIcon = LoadIcon( _glfwLibrary.Instance, "GLFW_ICON" ); - if( !wc.hIcon ) - { - // Load default icon - wc.hIcon = LoadIcon( NULL, IDI_WINLOGO ); - } - - // Register the window class - _glfwWin.ClassAtom = RegisterClass( &wc ); - if( !_glfwWin.ClassAtom ) - { - _glfwPlatformCloseWindow(); - return GL_FALSE; - } - - // Do we want full-screen mode? - if( _glfwWin.Fullscreen ) - { - _glfwSetVideoMode( &_glfwWin.Width, &_glfwWin.Height, - redbits, greenbits, bluebits, - hints->RefreshRate ); - } - - // Set common window styles - dwStyle = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE; - dwExStyle = WS_EX_APPWINDOW; - - // Set window style, depending on fullscreen mode - if( _glfwWin.Fullscreen ) - { - dwStyle |= WS_POPUP; - - // Here's a trick for helping us getting window focus - // (SetForegroundWindow doesn't work properly under - // Win98/ME/2K/.NET/+) - /* - if( _glfwLibrary.Sys.WinVer != _GLFW_WIN_95 && - _glfwLibrary.Sys.WinVer != _GLFW_WIN_NT4 && - _glfwLibrary.Sys.WinVer != _GLFW_WIN_XP ) - { - dwStyle |= WS_MINIMIZE; - } - */ - } - else - { - dwStyle |= WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX; - - if( !hints->WindowNoResize ) - { - dwStyle |= ( WS_MAXIMIZEBOX | WS_SIZEBOX ); - dwExStyle |= WS_EX_WINDOWEDGE; - } - } - - // Remember window styles (used by _glfwGetFullWindowSize) - _glfwWin.dwStyle = dwStyle; - _glfwWin.dwExStyle = dwExStyle; - - if( !_glfwCreateWindow( redbits, greenbits, bluebits, alphabits, - depthbits, stencilbits, mode, hints ) ) - { - _glfwPlatformCloseWindow(); - return GL_FALSE; - } - - if( _glfwWin.ChoosePixelFormat && hints->Samples > 0 ) - { - // Iteratively try to create a context with a decreasing number of - // FSAA samples (requires window recreation). - - for (;;) - { - _glfwDestroyWindow(); - - if( _glfwCreateWindow( redbits, greenbits, bluebits, alphabits, - depthbits, stencilbits, mode, hints ) ) - { - break; - } - - if( hints->Samples > 0 ) - { - hints->Samples--; - } - else - { - _glfwPlatformCloseWindow(); - return GL_FALSE; - } - } - } - - // Make sure that our window ends up on top of things - if( _glfwWin.Fullscreen ) - { - // Place the window above all topmost windows - SetWindowPos( _glfwWin.Wnd, HWND_TOPMOST, 0,0,0,0, - SWP_NOMOVE | SWP_NOSIZE ); - } - _glfwSetForegroundWindow( _glfwWin.Wnd ); - SetFocus( _glfwWin.Wnd ); - - // Start by clearing the front buffer to black (avoid ugly desktop - // remains in our OpenGL window) - glClear( GL_COLOR_BUFFER_BIT ); - _glfw_SwapBuffers( _glfwWin.DC ); - - return GL_TRUE; -} - - -//======================================================================== -// Properly kill the window / video display -//======================================================================== - -void _glfwPlatformCloseWindow( void ) -{ - _glfwDestroyWindow(); - - // Do we have an instance? - if( _glfwWin.ClassAtom ) - { - // Unregister class - UnregisterClass( _GLFW_WNDCLASSNAME, _glfwLibrary.Instance ); - _glfwWin.ClassAtom = 0; - } - - // Are we in fullscreen mode? - if( _glfwWin.Fullscreen ) - { - // Switch back to desktop resolution - ChangeDisplaySettings( NULL, CDS_FULLSCREEN ); - } -} - - -//======================================================================== -// Set the window title -//======================================================================== - -void _glfwPlatformSetWindowTitle( const char *title ) -{ - // Set window title - (void) SetWindowText( _glfwWin.Wnd, title ); -} - - -//======================================================================== -// Set the window size. -//======================================================================== - -void _glfwPlatformSetWindowSize( int width, int height ) -{ - int bpp, mode = 0, refresh; - int sizechanged = GL_FALSE; - GLint drawbuffer; - GLfloat clearcolor[4]; - - // If we are in fullscreen mode, get some info about the current mode - if( _glfwWin.Fullscreen ) - { - DEVMODE dm; - - // Get current BPP settings - dm.dmSize = sizeof( DEVMODE ); - if( EnumDisplaySettings( NULL, _glfwWin.ModeID, &dm ) ) - { - // Get bpp - bpp = dm.dmBitsPerPel; - - // Get closest match for target video mode - refresh = _glfwWin.DesiredRefreshRate; - mode = _glfwGetClosestVideoModeBPP( &width, &height, &bpp, - &refresh ); - } - else - { - mode = _glfwWin.ModeID; - } - } - else - { - // If we are in windowed mode, adjust the window size to - // compensate for window decorations - _glfwGetFullWindowSize( width, height, &width, &height ); - } - - // Change window size before changing fullscreen mode? - if( _glfwWin.Fullscreen && (width > _glfwWin.Width) ) - { - SetWindowPos( _glfwWin.Wnd, HWND_TOP, 0, 0, width, height, - SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_NOZORDER ); - sizechanged = GL_TRUE; - } - - // Change fullscreen video mode? - if( _glfwWin.Fullscreen && mode != _glfwWin.ModeID ) - { - // Change video mode - _glfwSetVideoModeMODE( mode ); - - // Clear the front buffer to black (avoid ugly desktop remains in - // our OpenGL window) - glGetIntegerv( GL_DRAW_BUFFER, &drawbuffer ); - glGetFloatv( GL_COLOR_CLEAR_VALUE, clearcolor ); - glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); - glClear( GL_COLOR_BUFFER_BIT ); - if( drawbuffer == GL_BACK ) - { - _glfw_SwapBuffers( _glfwWin.DC ); - } - glClearColor( clearcolor[0], clearcolor[1], clearcolor[2], - clearcolor[3] ); - } - - // Set window size (if not already changed) - if( !sizechanged ) - { - SetWindowPos( _glfwWin.Wnd, HWND_TOP, 0, 0, width, height, - SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_NOZORDER ); - } -} - - -//======================================================================== -// Set the window position -//======================================================================== - -void _glfwPlatformSetWindowPos( int x, int y ) -{ - // Set window position - (void) SetWindowPos( _glfwWin.Wnd, HWND_TOP, x, y, 0, 0, - SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER ); -} - - -//======================================================================== -// Window iconification -//======================================================================== - -void _glfwPlatformIconifyWindow( void ) -{ - // Iconify window - CloseWindow( _glfwWin.Wnd ); - - // Window is now iconified - _glfwWin.Iconified = GL_TRUE; - - // If we are in fullscreen mode we need to change video modes - if( _glfwWin.Fullscreen ) - { - // Change display settings to the desktop resolution - ChangeDisplaySettings( NULL, CDS_FULLSCREEN ); - } - - // Unlock mouse - if( !_glfwWin.OldMouseLockValid ) - { - _glfwWin.OldMouseLock = _glfwWin.MouseLock; - _glfwWin.OldMouseLockValid = GL_TRUE; - glfwEnable( GLFW_MOUSE_CURSOR ); - } -} - - -//======================================================================== -// Window un-iconification -//======================================================================== - -void _glfwPlatformRestoreWindow( void ) -{ - // If we are in fullscreen mode we need to change video modes - if( _glfwWin.Fullscreen ) - { - // Change display settings to the user selected mode - _glfwSetVideoModeMODE( _glfwWin.ModeID ); - } - - // Un-iconify window - OpenIcon( _glfwWin.Wnd ); - - // Make sure that our window ends up on top of things - ShowWindow( _glfwWin.Wnd, SW_SHOW ); - _glfwSetForegroundWindow( _glfwWin.Wnd ); - SetFocus( _glfwWin.Wnd ); - - // Window is no longer iconified - _glfwWin.Iconified = GL_FALSE; - - // Lock mouse, if necessary - if( _glfwWin.OldMouseLockValid && _glfwWin.OldMouseLock ) - { - glfwDisable( GLFW_MOUSE_CURSOR ); - } - _glfwWin.OldMouseLockValid = GL_FALSE; -} - - -//======================================================================== -// Swap buffers (double-buffering) -//======================================================================== - -void _glfwPlatformSwapBuffers( void ) -{ - _glfw_SwapBuffers( _glfwWin.DC ); -} - - -//======================================================================== -// Set double buffering swap interval -//======================================================================== - -void _glfwPlatformSwapInterval( int interval ) -{ - if( _glfwWin.SwapInterval ) - { - _glfwWin.SwapInterval( interval ); - } -} - - -//======================================================================== -// Write back window parameters into GLFW window structure -//======================================================================== - -void _glfwPlatformRefreshWindowParams( void ) -{ - PIXELFORMATDESCRIPTOR pfd; - DEVMODE dm; - int PixelFormat, mode; - - // Obtain a detailed description of current pixel format - PixelFormat = _glfw_GetPixelFormat( _glfwWin.DC ); - - if( !_glfwWin.GetPixelFormatAttribiv ) - { - _glfw_DescribePixelFormat( _glfwWin.DC, PixelFormat, - sizeof(PIXELFORMATDESCRIPTOR), &pfd ); - - // Is current OpenGL context accelerated? - _glfwWin.Accelerated = (pfd.dwFlags & PFD_GENERIC_ACCELERATED) || - !(pfd.dwFlags & PFD_GENERIC_FORMAT) ? 1 : 0; - - // "Standard" window parameters - _glfwWin.RedBits = pfd.cRedBits; - _glfwWin.GreenBits = pfd.cGreenBits; - _glfwWin.BlueBits = pfd.cBlueBits; - _glfwWin.AlphaBits = pfd.cAlphaBits; - _glfwWin.DepthBits = pfd.cDepthBits; - _glfwWin.StencilBits = pfd.cStencilBits; - _glfwWin.AccumRedBits = pfd.cAccumRedBits; - _glfwWin.AccumGreenBits = pfd.cAccumGreenBits; - _glfwWin.AccumBlueBits = pfd.cAccumBlueBits; - _glfwWin.AccumAlphaBits = pfd.cAccumAlphaBits; - _glfwWin.AuxBuffers = pfd.cAuxBuffers; - _glfwWin.Stereo = pfd.dwFlags & PFD_STEREO ? 1 : 0; - _glfwWin.Samples = 0; - } - else - { - const int attribs[] = { - WGL_ACCELERATION_ARB, - WGL_RED_BITS_ARB, - WGL_GREEN_BITS_ARB, - WGL_BLUE_BITS_ARB, - WGL_ALPHA_BITS_ARB, - WGL_DEPTH_BITS_ARB, - WGL_STENCIL_BITS_ARB, - WGL_ACCUM_RED_BITS_ARB, - WGL_ACCUM_GREEN_BITS_ARB, - WGL_ACCUM_BLUE_BITS_ARB, - WGL_ACCUM_ALPHA_BITS_ARB, - WGL_AUX_BUFFERS_ARB, - WGL_STEREO_ARB, - WGL_SAMPLES_ARB - }; - - int values[sizeof(attribs) / sizeof(attribs[0])]; - - _glfwWin.GetPixelFormatAttribiv( _glfwWin.DC, PixelFormat, 0, - sizeof(attribs) / sizeof(attribs[0]), - attribs, values); - - // Is current OpenGL context accelerated? - _glfwWin.Accelerated = (values[0] == WGL_FULL_ACCELERATION_ARB); - - // "Standard" window parameters - _glfwWin.RedBits = values[1]; - _glfwWin.GreenBits = values[2]; - _glfwWin.BlueBits = values[3]; - _glfwWin.AlphaBits = values[4]; - _glfwWin.DepthBits = values[5]; - _glfwWin.StencilBits = values[6]; - _glfwWin.AccumRedBits = values[7]; - _glfwWin.AccumGreenBits = values[8]; - _glfwWin.AccumBlueBits = values[9]; - _glfwWin.AccumAlphaBits = values[10]; - _glfwWin.AuxBuffers = values[11]; - _glfwWin.Stereo = values[12]; - _glfwWin.Samples = values[13]; - } - - // Get refresh rate - mode = _glfwWin.Fullscreen ? _glfwWin.ModeID : ENUM_CURRENT_SETTINGS; - dm.dmSize = sizeof( DEVMODE ); - - if( EnumDisplaySettings( NULL, mode, &dm ) ) - { - _glfwWin.RefreshRate = dm.dmDisplayFrequency; - if( _glfwWin.RefreshRate <= 1 ) - { - _glfwWin.RefreshRate = 0; - } - } - else - { - _glfwWin.RefreshRate = 0; - } -} - - -//======================================================================== -// Poll for new window and input events -//======================================================================== - -void _glfwPlatformPollEvents( void ) -{ - MSG msg; - int winclosed = GL_FALSE; - - // Flag: mouse was not moved (will be changed by _glfwGetNextEvent if - // there was a mouse move event) - _glfwInput.MouseMoved = GL_FALSE; - if( _glfwWin.MouseLock ) - { - _glfwInput.OldMouseX = _glfwWin.Width/2; - _glfwInput.OldMouseY = _glfwWin.Height/2; - } - else - { - _glfwInput.OldMouseX = _glfwInput.MousePosX; - _glfwInput.OldMouseY = _glfwInput.MousePosY; - } - - // Check for new window messages - while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) - { - switch( msg.message ) - { - // QUIT-message (from close window)? - case WM_QUIT: - winclosed = GL_TRUE; - break; - - // Ok, send it to the window message handler - default: - DispatchMessage( &msg ); - break; - } - } - - // LSHIFT/RSHIFT fixup (keys tend to "stick" without this fix) - // This is the only async event handling in GLFW, but it solves some - // nasty problems. - // Caveat: Does not work under Win 9x/ME. - if( _glfwLibrary.Sys.WinVer >= _GLFW_WIN_NT4 ) - { - int lshift_down, rshift_down; - - // Get current state of left and right shift keys - lshift_down = (GetAsyncKeyState( VK_LSHIFT ) >> 15) & 1; - rshift_down = (GetAsyncKeyState( VK_RSHIFT ) >> 15) & 1; - - // See if this differs from our belief of what has happened - // (we only have to check for lost key up events) - if( !lshift_down && _glfwInput.Key[ GLFW_KEY_LSHIFT ] == 1 ) - { - _glfwInputKey( GLFW_KEY_LSHIFT, GLFW_RELEASE ); - } - if( !rshift_down && _glfwInput.Key[ GLFW_KEY_RSHIFT ] == 1 ) - { - _glfwInputKey( GLFW_KEY_RSHIFT, GLFW_RELEASE ); - } - } - - // Did we have mouse movement in locked cursor mode? - if( _glfwInput.MouseMoved && _glfwWin.MouseLock ) - { - _glfwPlatformSetMouseCursorPos( _glfwWin.Width / 2, - _glfwWin.Height / 2 ); - } - - // Was there a window close request? - if( winclosed && _glfwWin.WindowCloseCallback ) - { - // Check if the program wants us to close the window - winclosed = _glfwWin.WindowCloseCallback(); - } - if( winclosed ) - { - glfwCloseWindow(); - } -} - - -//======================================================================== -// _glfwPlatformWaitEvents() - Wait for new window and input events -//======================================================================== - -void _glfwPlatformWaitEvents( void ) -{ - // Wait for new events - WaitMessage(); - - // Poll new events - _glfwPlatformPollEvents(); -} - - -//======================================================================== -// Hide mouse cursor (lock it) -//======================================================================== - -void _glfwPlatformHideMouseCursor( void ) -{ - RECT ClipWindowRect; - - // Hide cursor - ShowCursor( FALSE ); - - // Clip cursor to the window - if( GetWindowRect( _glfwWin.Wnd, &ClipWindowRect ) ) - { - ClipCursor( &ClipWindowRect ); - } - - // Capture cursor to user window - SetCapture( _glfwWin.Wnd ); -} - - -//======================================================================== -// Show mouse cursor (unlock it) -//======================================================================== - -void _glfwPlatformShowMouseCursor( void ) -{ - // Un-capture cursor - ReleaseCapture(); - - // Disable cursor clipping - ClipCursor( NULL ); - - // Show cursor - ShowCursor( TRUE ); -} - - -//======================================================================== -// Set physical mouse cursor position -//======================================================================== - -void _glfwPlatformSetMouseCursorPos( int x, int y ) -{ - POINT pos; - - // Convert client coordinates to screen coordinates - pos.x = x; - pos.y = y; - ClientToScreen( _glfwWin.Wnd, &pos ); - - // Change cursor position - SetCursorPos( pos.x, pos.y ); -} - |