diff --git a/Dengine.vcxproj b/Dengine.vcxproj
index fd65531..ed270ba 100644
--- a/Dengine.vcxproj
+++ b/Dengine.vcxproj
@@ -71,8 +71,8 @@
.\bin\
.\bin\
- extern\glm-0.9.7.5\include;extern\stb-master\include;src\include;extern\glew-1.13.0\include;extern\glfw-3.1.2.bin.WIN32\include;$(IncludePath)
- extern\glew-1.13.0\lib\Release\Win32;extern\glfw-3.1.2.bin.WIN32\lib-vc2015;$(LibraryPath)
+ extern\glm-0.9.7.5\include;extern\stb-master\include;src\include;extern\glew-1.13.0\include;extern\glfw-3.2.bin.WIN32\include;$(IncludePath)
+ extern\glew-1.13.0\lib\Release\Win32;extern\glfw-3.2.bin.WIN32\lib-vc2015;$(LibraryPath)
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-mingw-w64/glfw3.dll b/extern/glfw-3.1.2.bin.WIN32/lib-mingw-w64/glfw3.dll
deleted file mode 100644
index 18ecf88..0000000
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-mingw-w64/glfw3.dll and /dev/null differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-mingw-w64/libglfw3.a b/extern/glfw-3.1.2.bin.WIN32/lib-mingw-w64/libglfw3.a
deleted file mode 100644
index 5d58e18..0000000
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-mingw-w64/libglfw3.a and /dev/null differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-mingw/glfw3.dll b/extern/glfw-3.1.2.bin.WIN32/lib-mingw/glfw3.dll
deleted file mode 100644
index c5fa9f5..0000000
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-mingw/glfw3.dll and /dev/null differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-mingw/libglfw3.a b/extern/glfw-3.1.2.bin.WIN32/lib-mingw/libglfw3.a
deleted file mode 100644
index 247b6e7..0000000
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-mingw/libglfw3.a and /dev/null differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-vc2010/glfw3.dll b/extern/glfw-3.1.2.bin.WIN32/lib-vc2010/glfw3.dll
deleted file mode 100644
index 5ae2e30..0000000
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-vc2010/glfw3.dll and /dev/null differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-vc2010/glfw3.lib b/extern/glfw-3.1.2.bin.WIN32/lib-vc2010/glfw3.lib
deleted file mode 100644
index eb678e1..0000000
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-vc2010/glfw3.lib and /dev/null differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-vc2010/glfw3dll.lib b/extern/glfw-3.1.2.bin.WIN32/lib-vc2010/glfw3dll.lib
deleted file mode 100644
index 3cb5b64..0000000
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-vc2010/glfw3dll.lib and /dev/null differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-vc2012/glfw3.dll b/extern/glfw-3.1.2.bin.WIN32/lib-vc2012/glfw3.dll
deleted file mode 100644
index fed70ea..0000000
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-vc2012/glfw3.dll and /dev/null differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-vc2012/glfw3.lib b/extern/glfw-3.1.2.bin.WIN32/lib-vc2012/glfw3.lib
deleted file mode 100644
index 24057ff..0000000
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-vc2012/glfw3.lib and /dev/null differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-vc2012/glfw3dll.lib b/extern/glfw-3.1.2.bin.WIN32/lib-vc2012/glfw3dll.lib
deleted file mode 100644
index 051fcb8..0000000
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-vc2012/glfw3dll.lib and /dev/null differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-vc2013/glfw3.dll b/extern/glfw-3.1.2.bin.WIN32/lib-vc2013/glfw3.dll
deleted file mode 100644
index 9fc0aad..0000000
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-vc2013/glfw3.dll and /dev/null differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-vc2013/glfw3.lib b/extern/glfw-3.1.2.bin.WIN32/lib-vc2013/glfw3.lib
deleted file mode 100644
index 7cac1dd..0000000
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-vc2013/glfw3.lib and /dev/null differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-vc2013/glfw3dll.lib b/extern/glfw-3.1.2.bin.WIN32/lib-vc2013/glfw3dll.lib
deleted file mode 100644
index a04a083..0000000
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-vc2013/glfw3dll.lib and /dev/null differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-vc2015/glfw3.dll b/extern/glfw-3.1.2.bin.WIN32/lib-vc2015/glfw3.dll
deleted file mode 100644
index c63b001..0000000
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-vc2015/glfw3.dll and /dev/null differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-vc2015/glfw3.lib b/extern/glfw-3.1.2.bin.WIN32/lib-vc2015/glfw3.lib
deleted file mode 100644
index d9422fa..0000000
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-vc2015/glfw3.lib and /dev/null differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-vc2015/glfw3dll.lib b/extern/glfw-3.1.2.bin.WIN32/lib-vc2015/glfw3dll.lib
deleted file mode 100644
index 8ae8f34..0000000
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-vc2015/glfw3dll.lib and /dev/null differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/COPYING.txt b/extern/glfw-3.2.bin.WIN32/COPYING.txt
similarity index 92%
rename from extern/glfw-3.1.2.bin.WIN32/COPYING.txt
rename to extern/glfw-3.2.bin.WIN32/COPYING.txt
index b30c701..ad16462 100644
--- a/extern/glfw-3.1.2.bin.WIN32/COPYING.txt
+++ b/extern/glfw-3.2.bin.WIN32/COPYING.txt
@@ -1,5 +1,5 @@
Copyright (c) 2002-2006 Marcus Geelnard
-Copyright (c) 2006-2010 Camilla Berglund
+Copyright (c) 2006-2016 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
diff --git a/extern/glfw-3.1.2.bin.WIN32/include/GLFW/glfw3.h b/extern/glfw-3.2.bin.WIN32/include/GLFW/glfw3.h
similarity index 61%
rename from extern/glfw-3.1.2.bin.WIN32/include/GLFW/glfw3.h
rename to extern/glfw-3.2.bin.WIN32/include/GLFW/glfw3.h
index 6623209..5a0c450 100644
--- a/extern/glfw-3.1.2.bin.WIN32/include/GLFW/glfw3.h
+++ b/extern/glfw-3.2.bin.WIN32/include/GLFW/glfw3.h
@@ -1,9 +1,9 @@
/*************************************************************************
- * GLFW 3.1 - www.glfw.org
+ * GLFW 3.2 - www.glfw.org
* A library for OpenGL, window and input
*------------------------------------------------------------------------
* Copyright (c) 2002-2006 Marcus Geelnard
- * Copyright (c) 2006-2010 Camilla Berglund
+ * Copyright (c) 2006-2016 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
@@ -38,32 +38,45 @@ extern "C" {
* Doxygen documentation
*************************************************************************/
-/*! @defgroup context Context handling
+/*! @file glfw3.h
+ * @brief The header of the GLFW 3 API.
*
- * This is the reference documentation for context related functions. For more
- * information, see the @ref context.
+ * This is the header file of the GLFW 3 API. It defines all its types and
+ * declares all its functions.
+ *
+ * For more information about how to use this file, see @ref build_include.
*/
-/*! @defgroup init Initialization, version and errors
+/*! @defgroup context Context reference
+ *
+ * This is the reference documentation for OpenGL and OpenGL ES context related
+ * functions. For more task-oriented information, see the @ref context_guide.
+ */
+/*! @defgroup vulkan Vulkan reference
+ *
+ * This is the reference documentation for Vulkan related functions and types.
+ * For more task-oriented information, see the @ref vulkan_guide.
+ */
+/*! @defgroup init Initialization, version and error reference
*
* This is the reference documentation for initialization and termination of
- * the library, version management and error handling. For more information,
- * see the @ref intro.
+ * the library, version management and error handling. For more task-oriented
+ * information, see the @ref intro_guide.
*/
-/*! @defgroup input Input handling
+/*! @defgroup input Input reference
*
* This is the reference documentation for input related functions and types.
- * For more information, see the @ref input.
+ * For more task-oriented information, see the @ref input_guide.
*/
-/*! @defgroup monitor Monitor handling
+/*! @defgroup monitor Monitor reference
*
* This is the reference documentation for monitor related functions and types.
- * For more information, see the @ref monitor.
+ * For more task-oriented information, see the @ref monitor_guide.
*/
-/*! @defgroup window Window handling
+/*! @defgroup window Window reference
*
* This is the reference documentation for window related functions and types,
- * including creation, deletion and event polling. For more information, see
- * the @ref window.
+ * including creation, deletion and event polling. For more task-oriented
+ * information, see the @ref window_guide.
*/
@@ -104,14 +117,14 @@ extern "C" {
/* Most Windows GLU headers need wchar_t.
* The OS X OpenGL header blocks the definition of ptrdiff_t by glext.h.
+ * Include it unconditionally to avoid surprising side-effects.
*/
-#if !defined(GLFW_INCLUDE_NONE)
- #include
-#endif
+#include
+#include
/* Include the chosen client API headers.
*/
-#if defined(__APPLE_CC__)
+#if defined(__APPLE__)
#if defined(GLFW_INCLUDE_GLCOREARB)
#include
#if defined(GLFW_INCLUDE_GLEXT)
@@ -142,13 +155,15 @@ extern "C" {
#elif defined(GLFW_INCLUDE_ES3)
#include
#if defined(GLFW_INCLUDE_GLEXT)
- #include
+ #include
#endif
#elif defined(GLFW_INCLUDE_ES31)
#include
#if defined(GLFW_INCLUDE_GLEXT)
- #include
+ #include
#endif
+ #elif defined(GLFW_INCLUDE_VULKAN)
+ #include
#elif !defined(GLFW_INCLUDE_NONE)
#include
#if defined(GLFW_INCLUDE_GLEXT)
@@ -165,7 +180,7 @@ extern "C" {
* version of the GLFW library. _GLFW_BUILD_DLL is defined by the GLFW
* configuration header when compiling the DLL version of the library.
*/
- #error "You may not have both GLFW_DLL and _GLFW_BUILD_DLL defined"
+ #error "You must not have both GLFW_DLL and _GLFW_BUILD_DLL defined"
#endif
/* GLFWAPI is used to declare public API functions for export
@@ -204,14 +219,32 @@ extern "C" {
* backward-compatible.
* @ingroup init
*/
-#define GLFW_VERSION_MINOR 1
+#define GLFW_VERSION_MINOR 2
/*! @brief The revision number of the GLFW library.
*
* This is incremented when a bug fix release is made that does not contain any
* API changes.
* @ingroup init
*/
-#define GLFW_VERSION_REVISION 2
+#define GLFW_VERSION_REVISION 0
+/*! @} */
+
+/*! @name Boolean values
+ * @{ */
+/*! @brief One.
+ *
+ * One. Seriously. You don't _need_ to use this symbol in your code. It's
+ * just semantic sugar for the number 1. You can use `1` or `true` or `_True`
+ * or `GL_TRUE` or whatever you want.
+ */
+#define GLFW_TRUE 1
+/*! @brief Zero.
+ *
+ * Zero. Seriously. You don't _need_ to use this symbol in your code. It's
+ * just just semantic sugar for the number 0. You can use `0` or `false` or
+ * `_False` or `GL_FALSE` or whatever you want.
+ */
+#define GLFW_FALSE 0
/*! @} */
/*! @name Key and button actions
@@ -388,6 +421,7 @@ extern "C" {
#define GLFW_KEY_RIGHT_ALT 346
#define GLFW_KEY_RIGHT_SUPER 347
#define GLFW_KEY_MENU 348
+
#define GLFW_KEY_LAST GLFW_KEY_MENU
/*! @} */
@@ -467,12 +501,11 @@ extern "C" {
* @{ */
/*! @brief GLFW has not been initialized.
*
- * This occurs if a GLFW function was called that may not be called unless the
+ * This occurs if a GLFW function was called that must not be called unless the
* library is [initialized](@ref intro_init).
*
- * @par Analysis
- * Application programmer error. Initialize GLFW before calling any function
- * that requires initialization.
+ * @analysis Application programmer error. Initialize GLFW before calling any
+ * function that requires initialization.
*/
#define GLFW_NOT_INITIALIZED 0x00010001
/*! @brief No context is current for this thread.
@@ -481,9 +514,8 @@ extern "C" {
* current OpenGL or OpenGL ES context but no context is current on the calling
* thread. One such function is @ref glfwSwapInterval.
*
- * @par Analysis
- * Application programmer error. Ensure a context is current before calling
- * functions that require a current context.
+ * @analysis Application programmer error. Ensure a context is current before
+ * calling functions that require a current context.
*/
#define GLFW_NO_CURRENT_CONTEXT 0x00010002
/*! @brief One of the arguments to the function was an invalid enum value.
@@ -492,8 +524,7 @@ extern "C" {
* requesting [GLFW_RED_BITS](@ref window_hints_fb) with @ref
* glfwGetWindowAttrib.
*
- * @par Analysis
- * Application programmer error. Fix the offending call.
+ * @analysis Application programmer error. Fix the offending call.
*/
#define GLFW_INVALID_ENUM 0x00010003
/*! @brief One of the arguments to the function was an invalid value.
@@ -504,37 +535,31 @@ extern "C" {
* Requesting a valid but unavailable OpenGL or OpenGL ES version will instead
* result in a @ref GLFW_VERSION_UNAVAILABLE error.
*
- * @par Analysis
- * Application programmer error. Fix the offending call.
+ * @analysis Application programmer error. Fix the offending call.
*/
#define GLFW_INVALID_VALUE 0x00010004
/*! @brief A memory allocation failed.
*
* A memory allocation failed.
*
- * @par Analysis
- * A bug in GLFW or the underlying operating system. Report the bug to our
- * [issue tracker](https://github.com/glfw/glfw/issues).
+ * @analysis A bug in GLFW or the underlying operating system. Report the bug
+ * to our [issue tracker](https://github.com/glfw/glfw/issues).
*/
#define GLFW_OUT_OF_MEMORY 0x00010005
-/*! @brief GLFW could not find support for the requested client API on the
- * system.
+/*! @brief GLFW could not find support for the requested API on the system.
*
- * GLFW could not find support for the requested client API on the system. If
- * emitted by functions other than @ref glfwCreateWindow, no supported client
- * API was found.
+ * GLFW could not find support for the requested API on the system.
*
- * @par Analysis
- * The installed graphics driver does not support the requested client API, or
- * does not support it via the chosen context creation backend. Below are
- * a few examples.
+ * @analysis The installed graphics driver does not support the requested
+ * API, or does not support it via the chosen context creation backend.
+ * Below are a few examples.
*
* @par
* Some pre-installed Windows graphics drivers do not support OpenGL. AMD only
* supports OpenGL ES via EGL, while Nvidia and Intel only support it via
* a WGL or GLX extension. OS X does not provide OpenGL ES at all. The Mesa
* EGL, OpenGL and OpenGL ES libraries do not interface with the Nvidia binary
- * driver.
+ * driver. Older graphics drivers do not support Vulkan.
*/
#define GLFW_API_UNAVAILABLE 0x00010006
/*! @brief The requested OpenGL or OpenGL ES version is not available.
@@ -542,10 +567,9 @@ extern "C" {
* The requested OpenGL or OpenGL ES version (including any requested context
* or framebuffer hints) is not available on this machine.
*
- * @par Analysis
- * The machine does not support your requirements. If your application is
- * sufficiently flexible, downgrade your requirements and try again.
- * Otherwise, inform the user that their machine does not match your
+ * @analysis The machine does not support your requirements. If your
+ * application is sufficiently flexible, downgrade your requirements and try
+ * again. Otherwise, inform the user that their machine does not match your
* requirements.
*
* @par
@@ -561,10 +585,9 @@ extern "C" {
* A platform-specific error occurred that does not match any of the more
* specific categories.
*
- * @par Analysis
- * A bug or configuration error in GLFW, the underlying operating system or
- * its drivers, or a lack of required resources. Report the issue to our
- * [issue tracker](https://github.com/glfw/glfw/issues).
+ * @analysis A bug or configuration error in GLFW, the underlying operating
+ * system or its drivers, or a lack of required resources. Report the issue to
+ * our [issue tracker](https://github.com/glfw/glfw/issues).
*/
#define GLFW_PLATFORM_ERROR 0x00010008
/*! @brief The requested format is not supported or available.
@@ -575,8 +598,7 @@ extern "C" {
* If emitted when querying the clipboard, the contents of the clipboard could
* not be converted to the requested format.
*
- * @par Analysis
- * If emitted during window creation, one or more
+ * @analysis If emitted during window creation, one or more
* [hard constraints](@ref window_hints_hard) did not match any of the
* available pixel formats. If your application is sufficiently flexible,
* downgrade your requirements and try again. Otherwise, inform the user that
@@ -587,6 +609,14 @@ extern "C" {
* the user, as appropriate.
*/
#define GLFW_FORMAT_UNAVAILABLE 0x00010009
+/*! @brief The specified window does not have an OpenGL or OpenGL ES context.
+ *
+ * A window that does not have an OpenGL or OpenGL ES context was passed to
+ * a function that requires it to have one.
+ *
+ * @analysis Application programmer error. Fix the offending call.
+ */
+#define GLFW_NO_WINDOW_CONTEXT 0x0001000A
/*! @} */
#define GLFW_FOCUSED 0x00020001
@@ -596,6 +626,7 @@ extern "C" {
#define GLFW_DECORATED 0x00020005
#define GLFW_AUTO_ICONIFY 0x00020006
#define GLFW_FLOATING 0x00020007
+#define GLFW_MAXIMIZED 0x00020008
#define GLFW_RED_BITS 0x00021001
#define GLFW_GREEN_BITS 0x00021002
@@ -623,7 +654,10 @@ extern "C" {
#define GLFW_OPENGL_DEBUG_CONTEXT 0x00022007
#define GLFW_OPENGL_PROFILE 0x00022008
#define GLFW_CONTEXT_RELEASE_BEHAVIOR 0x00022009
+#define GLFW_CONTEXT_NO_ERROR 0x0002200A
+#define GLFW_CONTEXT_CREATION_API 0x0002200B
+#define GLFW_NO_API 0
#define GLFW_OPENGL_API 0x00030001
#define GLFW_OPENGL_ES_API 0x00030002
@@ -647,6 +681,9 @@ extern "C" {
#define GLFW_RELEASE_BEHAVIOR_FLUSH 0x00035001
#define GLFW_RELEASE_BEHAVIOR_NONE 0x00035002
+#define GLFW_NATIVE_CONTEXT_API 0x00036001
+#define GLFW_EGL_CONTEXT_API 0x00036002
+
/*! @defgroup shapes Standard cursor shapes
*
* See [standard cursor creation](@ref cursor_standard) for how these are used.
@@ -701,14 +738,37 @@ extern "C" {
* Generic function pointer used for returning client API function pointers
* without forcing a cast from a regular pointer.
*
+ * @sa @ref context_glext
+ * @sa glfwGetProcAddress
+ *
+ * @since Added in version 3.0.
+
* @ingroup context
*/
typedef void (*GLFWglproc)(void);
+/*! @brief Vulkan API function pointer type.
+ *
+ * Generic function pointer used for returning Vulkan API function pointers
+ * without forcing a cast from a regular pointer.
+ *
+ * @sa @ref vulkan_proc
+ * @sa glfwGetInstanceProcAddress
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup vulkan
+ */
+typedef void (*GLFWvkproc)(void);
+
/*! @brief Opaque monitor object.
*
* Opaque monitor object.
*
+ * @see @ref monitor_object
+ *
+ * @since Added in version 3.0.
+ *
* @ingroup monitor
*/
typedef struct GLFWmonitor GLFWmonitor;
@@ -717,6 +777,10 @@ typedef struct GLFWmonitor GLFWmonitor;
*
* Opaque window object.
*
+ * @see @ref window_object
+ *
+ * @since Added in version 3.0.
+ *
* @ingroup window
*/
typedef struct GLFWwindow GLFWwindow;
@@ -725,6 +789,10 @@ typedef struct GLFWwindow GLFWwindow;
*
* Opaque cursor object.
*
+ * @see @ref cursor_object
+ *
+ * @since Added in version 3.1.
+ *
* @ingroup cursor
*/
typedef struct GLFWcursor GLFWcursor;
@@ -736,8 +804,11 @@ typedef struct GLFWcursor GLFWcursor;
* @param[in] error An [error code](@ref errors).
* @param[in] description A UTF-8 encoded string describing the error.
*
+ * @sa @ref error_handling
* @sa glfwSetErrorCallback
*
+ * @since Added in version 3.0.
+ *
* @ingroup init
*/
typedef void (* GLFWerrorfun)(int,const char*);
@@ -752,8 +823,11 @@ typedef void (* GLFWerrorfun)(int,const char*);
* @param[in] ypos The new y-coordinate, in screen coordinates, of the
* upper-left corner of the client area of the window.
*
+ * @sa @ref window_pos
* @sa glfwSetWindowPosCallback
*
+ * @since Added in version 3.0.
+ *
* @ingroup window
*/
typedef void (* GLFWwindowposfun)(GLFWwindow*,int,int);
@@ -766,8 +840,12 @@ typedef void (* GLFWwindowposfun)(GLFWwindow*,int,int);
* @param[in] width The new width, in screen coordinates, of the window.
* @param[in] height The new height, in screen coordinates, of the window.
*
+ * @sa @ref window_size
* @sa glfwSetWindowSizeCallback
*
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter.
+ *
* @ingroup window
*/
typedef void (* GLFWwindowsizefun)(GLFWwindow*,int,int);
@@ -778,8 +856,12 @@ typedef void (* GLFWwindowsizefun)(GLFWwindow*,int,int);
*
* @param[in] window The window that the user attempted to close.
*
+ * @sa @ref window_close
* @sa glfwSetWindowCloseCallback
*
+ * @since Added in version 2.5.
+ * @glfw3 Added window handle parameter.
+ *
* @ingroup window
*/
typedef void (* GLFWwindowclosefun)(GLFWwindow*);
@@ -790,8 +872,12 @@ typedef void (* GLFWwindowclosefun)(GLFWwindow*);
*
* @param[in] window The window whose content needs to be refreshed.
*
+ * @sa @ref window_refresh
* @sa glfwSetWindowRefreshCallback
*
+ * @since Added in version 2.5.
+ * @glfw3 Added window handle parameter.
+ *
* @ingroup window
*/
typedef void (* GLFWwindowrefreshfun)(GLFWwindow*);
@@ -801,11 +887,14 @@ typedef void (* GLFWwindowrefreshfun)(GLFWwindow*);
* This is the function signature for window focus callback functions.
*
* @param[in] window The window that gained or lost input focus.
- * @param[in] focused `GL_TRUE` if the window was given input focus, or
- * `GL_FALSE` if it lost it.
+ * @param[in] focused `GLFW_TRUE` if the window was given input focus, or
+ * `GLFW_FALSE` if it lost it.
*
+ * @sa @ref window_focus
* @sa glfwSetWindowFocusCallback
*
+ * @since Added in version 3.0.
+ *
* @ingroup window
*/
typedef void (* GLFWwindowfocusfun)(GLFWwindow*,int);
@@ -816,11 +905,14 @@ typedef void (* GLFWwindowfocusfun)(GLFWwindow*,int);
* functions.
*
* @param[in] window The window that was iconified or restored.
- * @param[in] iconified `GL_TRUE` if the window was iconified, or `GL_FALSE`
- * if it was restored.
+ * @param[in] iconified `GLFW_TRUE` if the window was iconified, or
+ * `GLFW_FALSE` if it was restored.
*
+ * @sa @ref window_iconify
* @sa glfwSetWindowIconifyCallback
*
+ * @since Added in version 3.0.
+ *
* @ingroup window
*/
typedef void (* GLFWwindowiconifyfun)(GLFWwindow*,int);
@@ -834,8 +926,11 @@ typedef void (* GLFWwindowiconifyfun)(GLFWwindow*,int);
* @param[in] width The new width, in pixels, of the framebuffer.
* @param[in] height The new height, in pixels, of the framebuffer.
*
+ * @sa @ref window_fbsize
* @sa glfwSetFramebufferSizeCallback
*
+ * @since Added in version 3.0.
+ *
* @ingroup window
*/
typedef void (* GLFWframebuffersizefun)(GLFWwindow*,int,int);
@@ -851,8 +946,12 @@ typedef void (* GLFWframebuffersizefun)(GLFWwindow*,int,int);
* @param[in] mods Bit field describing which [modifier keys](@ref mods) were
* held down.
*
+ * @sa @ref input_mouse_button
* @sa glfwSetMouseButtonCallback
*
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle and modifier mask parameters.
+ *
* @ingroup input
*/
typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int,int);
@@ -862,11 +961,16 @@ typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int,int);
* This is the function signature for cursor position callback functions.
*
* @param[in] window The window that received the event.
- * @param[in] xpos The new x-coordinate, in screen coordinates, of the cursor.
- * @param[in] ypos The new y-coordinate, in screen coordinates, of the cursor.
+ * @param[in] xpos The new cursor x-coordinate, relative to the left edge of
+ * the client area.
+ * @param[in] ypos The new cursor y-coordinate, relative to the top edge of the
+ * client area.
*
+ * @sa @ref cursor_pos
* @sa glfwSetCursorPosCallback
*
+ * @since Added in version 3.0. Replaces `GLFWmouseposfun`.
+ *
* @ingroup input
*/
typedef void (* GLFWcursorposfun)(GLFWwindow*,double,double);
@@ -876,11 +980,14 @@ typedef void (* GLFWcursorposfun)(GLFWwindow*,double,double);
* This is the function signature for cursor enter/leave callback functions.
*
* @param[in] window The window that received the event.
- * @param[in] entered `GL_TRUE` if the cursor entered the window's client
- * area, or `GL_FALSE` if it left it.
+ * @param[in] entered `GLFW_TRUE` if the cursor entered the window's client
+ * area, or `GLFW_FALSE` if it left it.
*
+ * @sa @ref cursor_enter
* @sa glfwSetCursorEnterCallback
*
+ * @since Added in version 3.0.
+ *
* @ingroup input
*/
typedef void (* GLFWcursorenterfun)(GLFWwindow*,int);
@@ -893,8 +1000,11 @@ typedef void (* GLFWcursorenterfun)(GLFWwindow*,int);
* @param[in] xoffset The scroll offset along the x-axis.
* @param[in] yoffset The scroll offset along the y-axis.
*
+ * @sa @ref scrolling
* @sa glfwSetScrollCallback
*
+ * @since Added in version 3.0. Replaces `GLFWmousewheelfun`.
+ *
* @ingroup input
*/
typedef void (* GLFWscrollfun)(GLFWwindow*,double,double);
@@ -910,8 +1020,12 @@ typedef void (* GLFWscrollfun)(GLFWwindow*,double,double);
* @param[in] mods Bit field describing which [modifier keys](@ref mods) were
* held down.
*
+ * @sa @ref input_key
* @sa glfwSetKeyCallback
*
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle, scancode and modifier mask parameters.
+ *
* @ingroup input
*/
typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int);
@@ -923,8 +1037,12 @@ typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int);
* @param[in] window The window that received the event.
* @param[in] codepoint The Unicode code point of the character.
*
+ * @sa @ref input_char
* @sa glfwSetCharCallback
*
+ * @since Added in version 2.4.
+ * @glfw3 Added window handle parameter.
+ *
* @ingroup input
*/
typedef void (* GLFWcharfun)(GLFWwindow*,unsigned int);
@@ -941,8 +1059,11 @@ typedef void (* GLFWcharfun)(GLFWwindow*,unsigned int);
* @param[in] mods Bit field describing which [modifier keys](@ref mods) were
* held down.
*
+ * @sa @ref input_char
* @sa glfwSetCharModsCallback
*
+ * @since Added in version 3.1.
+ *
* @ingroup input
*/
typedef void (* GLFWcharmodsfun)(GLFWwindow*,unsigned int,int);
@@ -955,8 +1076,11 @@ typedef void (* GLFWcharmodsfun)(GLFWwindow*,unsigned int,int);
* @param[in] count The number of dropped files.
* @param[in] paths The UTF-8 encoded file and/or directory path names.
*
+ * @sa @ref path_drop
* @sa glfwSetDropCallback
*
+ * @since Added in version 3.1.
+ *
* @ingroup input
*/
typedef void (* GLFWdropfun)(GLFWwindow*,int,const char**);
@@ -968,16 +1092,42 @@ typedef void (* GLFWdropfun)(GLFWwindow*,int,const char**);
* @param[in] monitor The monitor that was connected or disconnected.
* @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`.
*
+ * @sa @ref monitor_event
* @sa glfwSetMonitorCallback
*
+ * @since Added in version 3.0.
+ *
* @ingroup monitor
*/
typedef void (* GLFWmonitorfun)(GLFWmonitor*,int);
+/*! @brief The function signature for joystick configuration callbacks.
+ *
+ * This is the function signature for joystick configuration callback
+ * functions.
+ *
+ * @param[in] joy The joystick that was connected or disconnected.
+ * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`.
+ *
+ * @sa @ref joystick_event
+ * @sa glfwSetJoystickCallback
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup input
+ */
+typedef void (* GLFWjoystickfun)(int,int);
+
/*! @brief Video mode type.
*
* This describes a single video mode.
*
+ * @sa @ref monitor_modes
+ * @sa glfwGetVideoMode glfwGetVideoModes
+ *
+ * @since Added in version 1.0.
+ * @glfw3 Added refresh rate member.
+ *
* @ingroup monitor
*/
typedef struct GLFWvidmode
@@ -1006,8 +1156,11 @@ typedef struct GLFWvidmode
*
* This describes the gamma ramp for a monitor.
*
+ * @sa @ref monitor_gamma
* @sa glfwGetGammaRamp glfwSetGammaRamp
*
+ * @since Added in version 3.0.
+ *
* @ingroup monitor
*/
typedef struct GLFWgammaramp
@@ -1027,6 +1180,11 @@ typedef struct GLFWgammaramp
} GLFWgammaramp;
/*! @brief Image data.
+ *
+ * @sa @ref cursor_custom
+ *
+ * @since Added in version 2.1.
+ * @glfw3 Removed format and bytes-per-pixel members.
*/
typedef struct GLFWimage
{
@@ -1057,23 +1215,24 @@ typedef struct GLFWimage
* succeeds, you should call @ref glfwTerminate before the application exits.
*
* Additional calls to this function after successful initialization but before
- * termination will return `GL_TRUE` immediately.
+ * termination will return `GLFW_TRUE` immediately.
*
- * @return `GL_TRUE` if successful, or `GL_FALSE` if an
+ * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an
* [error](@ref error_handling) occurred.
*
- * @remarks __OS X:__ This function will change the current directory of the
+ * @errors Possible errors include @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark @osx This function will change the current directory of the
* application to the `Contents/Resources` subdirectory of the application's
* bundle, if present. This can be disabled with a
* [compile-time option](@ref compile_options_osx).
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref intro_init
* @sa glfwTerminate
*
- * @since Added in GLFW 1.0.
+ * @since Added in version 1.0.
*
* @ingroup init
*/
@@ -1091,21 +1250,21 @@ GLFWAPI int glfwInit(void);
* call this function, as it is called by @ref glfwInit before it returns
* failure.
*
- * @remarks This function may be called before @ref glfwInit.
+ * @errors Possible errors include @ref GLFW_PLATFORM_ERROR.
*
- * @warning No window's context may be current on another thread when this
- * function is called.
+ * @remark This function may be called before @ref glfwInit.
*
- * @par Reentrancy
- * This function may not be called from a callback.
+ * @warning The contexts of any remaining windows must not be current on any
+ * other thread when this function is called.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @reentrancy This function must not be called from a callback.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref intro_init
* @sa glfwInit
*
- * @since Added in GLFW 1.0.
+ * @since Added in version 1.0.
*
* @ingroup init
*/
@@ -1117,22 +1276,22 @@ GLFWAPI void glfwTerminate(void);
* library. It is intended for when you are using GLFW as a shared library and
* want to ensure that you are using the minimum required version.
*
- * Any or all of the version arguments may be `NULL`. This function always
- * succeeds.
+ * Any or all of the version arguments may be `NULL`.
*
* @param[out] major Where to store the major version number, or `NULL`.
* @param[out] minor Where to store the minor version number, or `NULL`.
* @param[out] rev Where to store the revision number, or `NULL`.
*
- * @remarks This function may be called before @ref glfwInit.
+ * @errors None.
*
- * @par Thread Safety
- * This function may be called from any thread.
+ * @remark This function may be called before @ref glfwInit.
+ *
+ * @thread_safety This function may be called from any thread.
*
* @sa @ref intro_version
* @sa glfwGetVersionString
*
- * @since Added in GLFW 1.0.
+ * @since Added in version 1.0.
*
* @ingroup init
*/
@@ -1143,28 +1302,27 @@ GLFWAPI void glfwGetVersion(int* major, int* minor, int* rev);
* This function returns the compile-time generated
* [version string](@ref intro_version_string) of the GLFW library binary. It
* describes the version, platform, compiler and any platform-specific
- * compile-time options.
+ * compile-time options. It should not be confused with the OpenGL or OpenGL
+ * ES version string, queried with `glGetString`.
*
* __Do not use the version string__ to parse the GLFW library version. The
- * @ref glfwGetVersion function already provides the version of the running
- * library binary.
+ * @ref glfwGetVersion function provides the version of the running library
+ * binary in numerical format.
*
- * This function always succeeds.
+ * @return The ASCII encoded GLFW version string.
*
- * @return The GLFW version string.
+ * @errors None.
*
- * @remarks This function may be called before @ref glfwInit.
+ * @remark This function may be called before @ref glfwInit.
*
- * @par Pointer Lifetime
- * The returned string is static and compile-time generated.
+ * @pointer_lifetime The returned string is static and compile-time generated.
*
- * @par Thread Safety
- * This function may be called from any thread.
+ * @thread_safety This function may be called from any thread.
*
* @sa @ref intro_version
* @sa glfwGetVersion
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup init
*/
@@ -1190,14 +1348,15 @@ GLFWAPI const char* glfwGetVersionString(void);
* callback.
* @return The previously set callback, or `NULL` if no callback was set.
*
- * @remarks This function may be called before @ref glfwInit.
+ * @errors None.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @remark This function may be called before @ref glfwInit.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref error_handling
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup init
*/
@@ -1214,19 +1373,19 @@ GLFWAPI GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun cbfun);
* @return An array of monitor handles, or `NULL` if no monitors were found or
* if an [error](@ref error_handling) occurred.
*
- * @par Pointer Lifetime
- * The returned array is allocated and freed by GLFW. You should not free it
- * yourself. It is guaranteed to be valid only until the monitor configuration
- * changes or the library is terminated.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @pointer_lifetime The returned array is allocated and freed by GLFW. You
+ * should not free it yourself. It is guaranteed to be valid only until the
+ * monitor configuration changes or the library is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref monitor_monitors
* @sa @ref monitor_event
* @sa glfwGetPrimaryMonitor
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup monitor
*/
@@ -1240,16 +1399,17 @@ GLFWAPI GLFWmonitor** glfwGetMonitors(int* count);
* @return The primary monitor, or `NULL` if no monitors were found or if an
* [error](@ref error_handling) occurred.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
*
- * @remarks The primary monitor is always first in the array returned by @ref
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @remark The primary monitor is always first in the array returned by @ref
* glfwGetMonitors.
*
* @sa @ref monitor_monitors
* @sa glfwGetMonitors
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup monitor
*/
@@ -1267,12 +1427,14 @@ GLFWAPI GLFWmonitor* glfwGetPrimaryMonitor(void);
* @param[out] xpos Where to store the monitor x-coordinate, or `NULL`.
* @param[out] ypos Where to store the monitor y-coordinate, or `NULL`.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref monitor_properties
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup monitor
*/
@@ -1297,15 +1459,16 @@ GLFWAPI void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos);
* @param[out] heightMM Where to store the height, in millimetres, of the
* monitor's display area, or `NULL`.
*
- * @remarks __Windows:__ The OS calculates the returned physical size from the
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @remark @win32 calculates the returned physical size from the
* current resolution and system DPI instead of querying the monitor EDID data.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref monitor_properties
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup monitor
*/
@@ -1321,17 +1484,17 @@ GLFWAPI void glfwGetMonitorPhysicalSize(GLFWmonitor* monitor, int* widthMM, int*
* @return The UTF-8 encoded name of the monitor, or `NULL` if an
* [error](@ref error_handling) occurred.
*
- * @par Pointer Lifetime
- * The returned string is allocated and freed by GLFW. You should not free it
- * yourself. It is valid until the specified monitor is disconnected or the
- * library is terminated.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @pointer_lifetime The returned string is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the specified monitor is
+ * disconnected or the library is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref monitor_properties
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup monitor
*/
@@ -1348,15 +1511,13 @@ GLFWAPI const char* glfwGetMonitorName(GLFWmonitor* monitor);
* @return The previously set callback, or `NULL` if no callback was set or the
* library had not been [initialized](@ref intro_init).
*
- * @bug __X11:__ This callback is not yet called on monitor configuration
- * changes.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref monitor_event
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup monitor
*/
@@ -1375,21 +1536,21 @@ GLFWAPI GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun cbfun);
* @return An array of video modes, or `NULL` if an
* [error](@ref error_handling) occurred.
*
- * @par Pointer Lifetime
- * The returned array is allocated and freed by GLFW. You should not free it
- * yourself. It is valid until the specified monitor is disconnected, this
- * function is called again for that monitor or the library is terminated.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @pointer_lifetime The returned array is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the specified monitor is
+ * disconnected, this function is called again for that monitor or the library
+ * is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref monitor_modes
* @sa glfwGetVideoMode
*
- * @since Added in GLFW 1.0.
- *
- * @par
- * __GLFW 3:__ Changed to return an array of modes for a specific monitor.
+ * @since Added in version 1.0.
+ * @glfw3 Changed to return an array of modes for a specific monitor.
*
* @ingroup monitor
*/
@@ -1405,18 +1566,19 @@ GLFWAPI const GLFWvidmode* glfwGetVideoModes(GLFWmonitor* monitor, int* count);
* @return The current mode of the monitor, or `NULL` if an
* [error](@ref error_handling) occurred.
*
- * @par Pointer Lifetime
- * The returned array is allocated and freed by GLFW. You should not free it
- * yourself. It is valid until the specified monitor is disconnected or the
- * library is terminated.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @pointer_lifetime The returned array is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the specified monitor is
+ * disconnected or the library is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref monitor_modes
* @sa glfwGetVideoModes
*
- * @since Added in GLFW 3.0. Replaces `glfwGetDesktopMode`.
+ * @since Added in version 3.0. Replaces `glfwGetDesktopMode`.
*
* @ingroup monitor
*/
@@ -1431,12 +1593,14 @@ GLFWAPI const GLFWvidmode* glfwGetVideoMode(GLFWmonitor* monitor);
* @param[in] monitor The monitor whose gamma ramp to set.
* @param[in] gamma The desired exponent.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref monitor_gamma
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup monitor
*/
@@ -1450,18 +1614,19 @@ GLFWAPI void glfwSetGamma(GLFWmonitor* monitor, float gamma);
* @return The current gamma ramp, or `NULL` if an
* [error](@ref error_handling) occurred.
*
- * @par Pointer Lifetime
- * The returned structure and its arrays are allocated and freed by GLFW. You
- * should not free them yourself. They are valid until the specified monitor
- * is disconnected, this function is called again for that monitor or the
- * library is terminated.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @pointer_lifetime The returned structure and its arrays are allocated and
+ * freed by GLFW. You should not free them yourself. They are valid until the
+ * specified monitor is disconnected, this function is called again for that
+ * monitor or the library is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref monitor_gamma
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup monitor
*/
@@ -1476,20 +1641,22 @@ GLFWAPI const GLFWgammaramp* glfwGetGammaRamp(GLFWmonitor* monitor);
* @param[in] monitor The monitor whose gamma ramp to set.
* @param[in] ramp The gamma ramp to use.
*
- * @remarks Gamma ramp sizes other than 256 are not supported by all platforms
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @remark Gamma ramp sizes other than 256 are not supported by all platforms
* or graphics hardware.
*
- * @remarks __Windows:__ The gamma ramp size must be 256.
+ * @remark @win32 The gamma ramp size must be 256.
*
- * @par Pointer Lifetime
- * The specified gamma ramp is copied before this function returns.
+ * @pointer_lifetime The specified gamma ramp is copied before this function
+ * returns.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref monitor_gamma
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup monitor
*/
@@ -1500,13 +1667,14 @@ GLFWAPI void glfwSetGammaRamp(GLFWmonitor* monitor, const GLFWgammaramp* ramp);
* This function resets all window hints to their
* [default values](@ref window_hints_values).
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_hints
* @sa glfwWindowHint
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup window
*/
@@ -1519,20 +1687,26 @@ GLFWAPI void glfwDefaultWindowHints(void);
* glfwWindowHint or @ref glfwDefaultWindowHints, or until the library is
* terminated.
*
- * @param[in] target The [window hint](@ref window_hints) to set.
- * @param[in] hint The new value of the window hint.
+ * This function does not check whether the specified hint values are valid.
+ * If you set hints to invalid values this will instead be reported by the next
+ * call to @ref glfwCreateWindow.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @param[in] hint The [window hint](@ref window_hints) to set.
+ * @param[in] value The new value of the window hint.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_INVALID_ENUM.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_hints
* @sa glfwDefaultWindowHints
*
- * @since Added in GLFW 3.0. Replaces `glfwOpenWindowHint`.
+ * @since Added in version 3.0. Replaces `glfwOpenWindowHint`.
*
* @ingroup window
*/
-GLFWAPI void glfwWindowHint(int target, int hint);
+GLFWAPI void glfwWindowHint(int hint, int value);
/*! @brief Creates a window and its associated context.
*
@@ -1553,17 +1727,17 @@ GLFWAPI void glfwWindowHint(int target, int hint);
* glfwGetWindowAttrib, @ref glfwGetWindowSize and @ref glfwGetFramebufferSize.
*
* To create a full screen window, you need to specify the monitor the window
- * will cover. If no monitor is specified, windowed mode will be used. Unless
- * you have a way for the user to choose a specific monitor, it is recommended
- * that you pick the primary monitor. For more information on how to query
- * connected monitors, see @ref monitor_monitors.
+ * will cover. If no monitor is specified, the window will be windowed mode.
+ * Unless you have a way for the user to choose a specific monitor, it is
+ * recommended that you pick the primary monitor. For more information on how
+ * to query connected monitors, see @ref monitor_monitors.
*
* For full screen windows, the specified size becomes the resolution of the
- * window's _desired video mode_. As long as a full screen window has input
- * focus, the supported video mode most closely matching the desired video mode
- * is set for the specified monitor. For more information about full screen
- * windows, including the creation of so called _windowed full screen_ or
- * _borderless full screen_ windows, see @ref window_windowed_full_screen.
+ * window's _desired video mode_. As long as a full screen window is not
+ * iconified, the supported video mode most closely matching the desired video
+ * mode is set for the specified monitor. For more information about full
+ * screen windows, including the creation of so called _windowed full screen_
+ * or _borderless full screen_ windows, see @ref window_windowed_full_screen.
*
* By default, newly created windows use the placement recommended by the
* window system. To create the window at a specific position, make it
@@ -1571,8 +1745,8 @@ GLFWAPI void glfwWindowHint(int target, int hint);
* hint, set its [position](@ref window_pos) and then [show](@ref window_hide)
* it.
*
- * If a full screen window has input focus, the screensaver is prohibited from
- * starting.
+ * As long as at least one full screen window is not iconified, the screensaver
+ * is prohibited from starting.
*
* Window systems put limits on window sizes. Very large or very small window
* dimensions may be overridden by the window system on creation. Check the
@@ -1586,64 +1760,66 @@ GLFWAPI void glfwWindowHint(int target, int hint);
* @param[in] height The desired height, in screen coordinates, of the window.
* This must be greater than zero.
* @param[in] title The initial, UTF-8 encoded window title.
- * @param[in] monitor The monitor to use for full screen mode, or `NULL` to use
+ * @param[in] monitor The monitor to use for full screen mode, or `NULL` for
* windowed mode.
* @param[in] share The window whose context to share resources with, or `NULL`
* to not share resources.
* @return The handle of the created window, or `NULL` if an
* [error](@ref error_handling) occurred.
*
- * @remarks __Windows:__ Window creation will fail if the Microsoft GDI
- * software OpenGL implementation is the only one available.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM, @ref GLFW_INVALID_VALUE, @ref GLFW_API_UNAVAILABLE, @ref
+ * GLFW_VERSION_UNAVAILABLE, @ref GLFW_FORMAT_UNAVAILABLE and @ref
+ * GLFW_PLATFORM_ERROR.
*
- * @remarks __Windows:__ If the executable has an icon resource named
- * `GLFW_ICON,` it will be set as the icon for the window. If no such icon is
- * present, the `IDI_WINLOGO` icon will be used instead.
+ * @remark @win32 Window creation will fail if the Microsoft GDI software
+ * OpenGL implementation is the only one available.
*
- * @remarks __Windows:__ The context to share resources with may not be current
- * on any other thread.
+ * @remark @win32 If the executable has an icon resource named `GLFW_ICON,` it
+ * will be set as the initial icon for the window. If no such icon is present,
+ * the `IDI_WINLOGO` icon will be used instead. To set a different icon, see
+ * @ref glfwSetWindowIcon.
*
- * @remarks __OS X:__ The GLFW window has no icon, as it is not a document
+ * @remark @win32 The context to share resources with must not be current on
+ * any other thread.
+ *
+ * @remark @osx The GLFW window has no icon, as it is not a document
* window, but the dock icon will be the same as the application bundle's icon.
* For more information on bundles, see the
* [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/)
* in the Mac Developer Library.
*
- * @remarks __OS X:__ The first time a window is created the menu bar is
- * populated with common commands like Hide, Quit and About. The About entry
- * opens a minimal about dialog with information from the application's bundle.
- * The menu bar can be disabled with a
+ * @remark @osx The first time a window is created the menu bar is populated
+ * with common commands like Hide, Quit and About. The About entry opens
+ * a minimal about dialog with information from the application's bundle. The
+ * menu bar can be disabled with a
* [compile-time option](@ref compile_options_osx).
*
- * @remarks __OS X:__ On OS X 10.10 and later the window frame will not be
- * rendered at full resolution on Retina displays unless the
- * `NSHighResolutionCapable` key is enabled in the application bundle's
- * `Info.plist`. For more information, see
+ * @remark @osx On OS X 10.10 and later the window frame will not be rendered
+ * at full resolution on Retina displays unless the `NSHighResolutionCapable`
+ * key is enabled in the application bundle's `Info.plist`. For more
+ * information, see
* [High Resolution Guidelines for OS X](https://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Explained/Explained.html)
* in the Mac Developer Library. The GLFW test and example programs use
* a custom `Info.plist` template for this, which can be found as
* `CMake/MacOSXBundleInfo.plist.in` in the source tree.
*
- * @remarks __X11:__ There is no mechanism for setting the window icon yet.
- *
- * @remarks __X11:__ Some window managers will not respect the placement of
+ * @remark @x11 Some window managers will not respect the placement of
* initially hidden windows.
*
- * @remarks __X11:__ Due to the asynchronous nature of X11, it may take
- * a moment for a window to reach its requested state. This means you may not
- * be able to query the final size, position or other attributes directly after
- * window creation.
+ * @remark @x11 Due to the asynchronous nature of X11, it may take a moment for
+ * a window to reach its requested state. This means you may not be able to
+ * query the final size, position or other attributes directly after window
+ * creation.
*
- * @par Reentrancy
- * This function may not be called from a callback.
+ * @reentrancy This function must not be called from a callback.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_creation
* @sa glfwDestroyWindow
*
- * @since Added in GLFW 3.0. Replaces `glfwOpenWindow`.
+ * @since Added in version 3.0. Replaces `glfwOpenWindow`.
*
* @ingroup window
*/
@@ -1659,19 +1835,20 @@ GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, G
*
* @param[in] window The window to destroy.
*
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
* @note The context of the specified window must not be current on any other
* thread when this function is called.
*
- * @par Reentrancy
- * This function may not be called from a callback.
+ * @reentrancy This function must not be called from a callback.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_creation
* @sa glfwCreateWindow
*
- * @since Added in GLFW 3.0. Replaces `glfwCloseWindow`.
+ * @since Added in version 3.0. Replaces `glfwCloseWindow`.
*
* @ingroup window
*/
@@ -1684,12 +1861,14 @@ GLFWAPI void glfwDestroyWindow(GLFWwindow* window);
* @param[in] window The window to query.
* @return The value of the close flag.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
* @sa @ref window_close
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup window
*/
@@ -1704,12 +1883,14 @@ GLFWAPI int glfwWindowShouldClose(GLFWwindow* window);
* @param[in] window The window whose flag to change.
* @param[in] value The new value.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
* @sa @ref window_close
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup window
*/
@@ -1723,23 +1904,62 @@ GLFWAPI void glfwSetWindowShouldClose(GLFWwindow* window, int value);
* @param[in] window The window whose title to change.
* @param[in] title The UTF-8 encoded window title.
*
- * @remarks __OS X:__ The window title will not be updated until the next time
- * you process events.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @remark @osx The window title will not be updated until the next time you
+ * process events.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_title
*
- * @since Added in GLFW 1.0.
- *
- * @par
- * __GLFW 3:__ Added window handle parameter.
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter.
*
* @ingroup window
*/
GLFWAPI void glfwSetWindowTitle(GLFWwindow* window, const char* title);
+/*! @brief Sets the icon for the specified window.
+ *
+ * This function sets the icon of the specified window. If passed an array of
+ * candidate images, those of or closest to the sizes desired by the system are
+ * selected. If no images are specified, the window reverts to its default
+ * icon.
+ *
+ * The desired image sizes varies depending on platform and system settings.
+ * The selected images will be rescaled as needed. Good sizes include 16x16,
+ * 32x32 and 48x48.
+ *
+ * @param[in] window The window whose icon to set.
+ * @param[in] count The number of images in the specified array, or zero to
+ * revert to the default window icon.
+ * @param[in] images The images to create the icon from. This is ignored if
+ * count is zero.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @pointer_lifetime The specified image data is copied before this function
+ * returns.
+ *
+ * @remark @osx The GLFW window has no icon, as it is not a document
+ * window, so this function does nothing. The dock icon will be the same as
+ * the application bundle's icon. For more information on bundles, see the
+ * [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/)
+ * in the Mac Developer Library.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_icon
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup window
+ */
+GLFWAPI void glfwSetWindowIcon(GLFWwindow* window, int count, const GLFWimage* images);
+
/*! @brief Retrieves the position of the client area of the specified window.
*
* This function retrieves the position, in screen coordinates, of the
@@ -1754,13 +1974,15 @@ GLFWAPI void glfwSetWindowTitle(GLFWwindow* window, const char* title);
* @param[out] ypos Where to store the y-coordinate of the upper-left corner of
* the client area, or `NULL`.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_pos
* @sa glfwSetWindowPos
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup window
*/
@@ -1782,16 +2004,16 @@ GLFWAPI void glfwGetWindowPos(GLFWwindow* window, int* xpos, int* ypos);
* @param[in] xpos The x-coordinate of the upper-left corner of the client area.
* @param[in] ypos The y-coordinate of the upper-left corner of the client area.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_pos
* @sa glfwGetWindowPos
*
- * @since Added in GLFW 1.0.
- *
- * @par
- * __GLFW 3:__ Added window handle parameter.
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter.
*
* @ingroup window
*/
@@ -1812,48 +2034,134 @@ GLFWAPI void glfwSetWindowPos(GLFWwindow* window, int xpos, int ypos);
* @param[out] height Where to store the height, in screen coordinates, of the
* client area, or `NULL`.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_size
* @sa glfwSetWindowSize
*
- * @since Added in GLFW 1.0.
- *
- * @par
- * __GLFW 3:__ Added window handle parameter.
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter.
*
* @ingroup window
*/
GLFWAPI void glfwGetWindowSize(GLFWwindow* window, int* width, int* height);
+/*! @brief Sets the size limits of the specified window.
+ *
+ * This function sets the size limits of the client area of the specified
+ * window. If the window is full screen, the size limits only take effect
+ * once it is made windowed. If the window is not resizable, this function
+ * does nothing.
+ *
+ * The size limits are applied immediately to a windowed mode window and may
+ * cause it to be resized.
+ *
+ * The maximum dimensions must be greater than or equal to the minimum
+ * dimensions and all must be greater than or equal to zero.
+ *
+ * @param[in] window The window to set limits for.
+ * @param[in] minwidth The minimum width, in screen coordinates, of the client
+ * area, or `GLFW_DONT_CARE`.
+ * @param[in] minheight The minimum height, in screen coordinates, of the
+ * client area, or `GLFW_DONT_CARE`.
+ * @param[in] maxwidth The maximum width, in screen coordinates, of the client
+ * area, or `GLFW_DONT_CARE`.
+ * @param[in] maxheight The maximum height, in screen coordinates, of the
+ * client area, or `GLFW_DONT_CARE`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark If you set size limits and an aspect ratio that conflict, the
+ * results are undefined.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_sizelimits
+ * @sa glfwSetWindowAspectRatio
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup window
+ */
+GLFWAPI void glfwSetWindowSizeLimits(GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight);
+
+/*! @brief Sets the aspect ratio of the specified window.
+ *
+ * This function sets the required aspect ratio of the client area of the
+ * specified window. If the window is full screen, the aspect ratio only takes
+ * effect once it is made windowed. If the window is not resizable, this
+ * function does nothing.
+ *
+ * The aspect ratio is specified as a numerator and a denominator and both
+ * values must be greater than zero. For example, the common 16:9 aspect ratio
+ * is specified as 16 and 9, respectively.
+ *
+ * If the numerator and denominator is set to `GLFW_DONT_CARE` then the aspect
+ * ratio limit is disabled.
+ *
+ * The aspect ratio is applied immediately to a windowed mode window and may
+ * cause it to be resized.
+ *
+ * @param[in] window The window to set limits for.
+ * @param[in] numer The numerator of the desired aspect ratio, or
+ * `GLFW_DONT_CARE`.
+ * @param[in] denom The denominator of the desired aspect ratio, or
+ * `GLFW_DONT_CARE`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark If you set size limits and an aspect ratio that conflict, the
+ * results are undefined.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_sizelimits
+ * @sa glfwSetWindowSizeLimits
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup window
+ */
+GLFWAPI void glfwSetWindowAspectRatio(GLFWwindow* window, int numer, int denom);
+
/*! @brief Sets the size of the client area of the specified window.
*
* This function sets the size, in screen coordinates, of the client area of
* the specified window.
*
- * For full screen windows, this function selects and switches to the resolution
- * closest to the specified size, without affecting the window's context. As
- * the context is unaffected, the bit depths of the framebuffer remain
- * unchanged.
+ * For full screen windows, this function updates the resolution of its desired
+ * video mode and switches to the video mode closest to it, without affecting
+ * the window's context. As the context is unaffected, the bit depths of the
+ * framebuffer remain unchanged.
+ *
+ * If you wish to update the refresh rate of the desired video mode in addition
+ * to its resolution, see @ref glfwSetWindowMonitor.
*
* The window manager may put limits on what sizes are allowed. GLFW cannot
* and should not override these limits.
*
* @param[in] window The window to resize.
- * @param[in] width The desired width of the specified window.
- * @param[in] height The desired height of the specified window.
+ * @param[in] width The desired width, in screen coordinates, of the window
+ * client area.
+ * @param[in] height The desired height, in screen coordinates, of the window
+ * client area.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_size
* @sa glfwGetWindowSize
+ * @sa glfwSetWindowMonitor
*
- * @since Added in GLFW 1.0.
- *
- * @par
- * __GLFW 3:__ Added window handle parameter.
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter.
*
* @ingroup window
*/
@@ -1874,13 +2182,15 @@ GLFWAPI void glfwSetWindowSize(GLFWwindow* window, int width, int height);
* @param[out] height Where to store the height, in pixels, of the framebuffer,
* or `NULL`.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_fbsize
* @sa glfwSetFramebufferSizeCallback
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup window
*/
@@ -1910,12 +2220,14 @@ GLFWAPI void glfwGetFramebufferSize(GLFWwindow* window, int* width, int* height)
* @param[out] bottom Where to store the size, in screen coordinates, of the
* bottom edge of the window frame, or `NULL`.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_size
*
- * @since Added in GLFW 3.1.
+ * @since Added in version 3.1.
*
* @ingroup window
*/
@@ -1932,16 +2244,17 @@ GLFWAPI void glfwGetWindowFrameSize(GLFWwindow* window, int* left, int* top, int
*
* @param[in] window The window to iconify.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_iconify
* @sa glfwRestoreWindow
+ * @sa glfwMaximizeWindow
*
- * @since Added in GLFW 2.1.
- *
- * @par
- * __GLFW 3:__ Added window handle parameter.
+ * @since Added in version 2.1.
+ * @glfw3 Added window handle parameter.
*
* @ingroup window
*/
@@ -1950,27 +2263,54 @@ GLFWAPI void glfwIconifyWindow(GLFWwindow* window);
/*! @brief Restores the specified window.
*
* This function restores the specified window if it was previously iconified
- * (minimized). If the window is already restored, this function does nothing.
+ * (minimized) or maximized. If the window is already restored, this function
+ * does nothing.
*
* If the specified window is a full screen window, the resolution chosen for
* the window is restored on the selected monitor.
*
* @param[in] window The window to restore.
*
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_iconify
+ * @sa glfwIconifyWindow
+ * @sa glfwMaximizeWindow
+ *
+ * @since Added in version 2.1.
+ * @glfw3 Added window handle parameter.
+ *
+ * @ingroup window
+ */
+GLFWAPI void glfwRestoreWindow(GLFWwindow* window);
+
+/*! @brief Maximizes the specified window.
+ *
+ * This function maximizes the specified window if it was previously not
+ * maximized. If the window is already maximized, this function does nothing.
+ *
+ * If the specified window is a full screen window, this function does nothing.
+ *
+ * @param[in] window The window to maximize.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
* @par Thread Safety
* This function may only be called from the main thread.
*
* @sa @ref window_iconify
* @sa glfwIconifyWindow
+ * @sa glfwRestoreWindow
*
- * @since Added in GLFW 2.1.
- *
- * @par
- * __GLFW 3:__ Added window handle parameter.
+ * @since Added in GLFW 3.2.
*
* @ingroup window
*/
-GLFWAPI void glfwRestoreWindow(GLFWwindow* window);
+GLFWAPI void glfwMaximizeWindow(GLFWwindow* window);
/*! @brief Makes the specified window visible.
*
@@ -1980,13 +2320,15 @@ GLFWAPI void glfwRestoreWindow(GLFWwindow* window);
*
* @param[in] window The window to make visible.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_hide
* @sa glfwHideWindow
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup window
*/
@@ -2000,18 +2342,48 @@ GLFWAPI void glfwShowWindow(GLFWwindow* window);
*
* @param[in] window The window to hide.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_hide
* @sa glfwShowWindow
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup window
*/
GLFWAPI void glfwHideWindow(GLFWwindow* window);
+/*! @brief Brings the specified window to front and sets input focus.
+ *
+ * This function brings the specified window to front and sets input focus.
+ * The window should already be visible and not iconified.
+ *
+ * By default, both windowed and full screen mode windows are focused when
+ * initially created. Set the [GLFW_FOCUSED](@ref window_hints_wnd) to disable
+ * this behavior.
+ *
+ * __Do not use this function__ to steal focus from other applications unless
+ * you are certain that is what the user wants. Focus stealing can be
+ * extremely disruptive.
+ *
+ * @param[in] window The window to give input focus.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_focus
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup window
+ */
+GLFWAPI void glfwFocusWindow(GLFWwindow* window);
+
/*! @brief Returns the monitor that the window uses for full screen mode.
*
* This function returns the handle of the monitor that the specified window is
@@ -2021,17 +2393,68 @@ GLFWAPI void glfwHideWindow(GLFWwindow* window);
* @return The monitor, or `NULL` if the window is in windowed mode or an error
* occurred.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_monitor
+ * @sa glfwSetWindowMonitor
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup window
*/
GLFWAPI GLFWmonitor* glfwGetWindowMonitor(GLFWwindow* window);
+/*! @brief Sets the mode, monitor, video mode and placement of a window.
+ *
+ * This function sets the monitor that the window uses for full screen mode or,
+ * if the monitor is `NULL`, makes it windowed mode.
+ *
+ * When setting a monitor, this function updates the width, height and refresh
+ * rate of the desired video mode and switches to the video mode closest to it.
+ * The window position is ignored when setting a monitor.
+ *
+ * When the monitor is `NULL`, the position, width and height are used to
+ * place the window client area. The refresh rate is ignored when no monitor
+ * is specified.
+ *
+ * If you only wish to update the resolution of a full screen window or the
+ * size of a windowed mode window, see @ref glfwSetWindowSize.
+ *
+ * When a window transitions from full screen to windowed mode, this function
+ * restores any previous window settings such as whether it is decorated,
+ * floating, resizable, has size or aspect ratio limits, etc..
+ *
+ * @param[in] window The window whose monitor, size or video mode to set.
+ * @param[in] monitor The desired monitor, or `NULL` to set windowed mode.
+ * @param[in] xpos The desired x-coordinate of the upper-left corner of the
+ * client area.
+ * @param[in] ypos The desired y-coordinate of the upper-left corner of the
+ * client area.
+ * @param[in] width The desired with, in screen coordinates, of the client area
+ * or video mode.
+ * @param[in] height The desired height, in screen coordinates, of the client
+ * area or video mode.
+ * @param[in] refreshRate The desired refresh rate, in Hz, of the video mode,
+ * or `GLFW_DONT_CARE`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref window_monitor
+ * @sa @ref window_full_screen
+ * @sa glfwGetWindowMonitor
+ * @sa glfwSetWindowSize
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup window
+ */
+GLFWAPI void glfwSetWindowMonitor(GLFWwindow* window, GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate);
+
/*! @brief Returns an attribute of the specified window.
*
* This function returns the value of an attribute of the specified window or
@@ -2043,20 +2466,22 @@ GLFWAPI GLFWmonitor* glfwGetWindowMonitor(GLFWwindow* window);
* @return The value of the attribute, or zero if an
* [error](@ref error_handling) occurred.
*
- * @remarks Framebuffer related hints are not window attributes. See @ref
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark Framebuffer related hints are not window attributes. See @ref
* window_attribs_fb for more information.
*
- * @remarks Zero is a valid value for many window and context related
+ * @remark Zero is a valid value for many window and context related
* attributes so you cannot use a return value of zero as an indication of
* errors. However, this function should not fail as long as it is passed
* valid arguments and the library has been [initialized](@ref intro_init).
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_attribs
*
- * @since Added in GLFW 3.0. Replaces `glfwGetWindowParam` and
+ * @since Added in version 3.0. Replaces `glfwGetWindowParam` and
* `glfwGetGLVersion`.
*
* @ingroup window
@@ -2072,13 +2497,15 @@ GLFWAPI int glfwGetWindowAttrib(GLFWwindow* window, int attrib);
* @param[in] window The window whose pointer to set.
* @param[in] pointer The new value.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
* @sa @ref window_userptr
* @sa glfwGetWindowUserPointer
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup window
*/
@@ -2091,13 +2518,15 @@ GLFWAPI void glfwSetWindowUserPointer(GLFWwindow* window, void* pointer);
*
* @param[in] window The window whose pointer to return.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
* @sa @ref window_userptr
* @sa glfwSetWindowUserPointer
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup window
*/
@@ -2115,12 +2544,13 @@ GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow* window);
* @return The previously set callback, or `NULL` if no callback was set or the
* library had not been [initialized](@ref intro_init).
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_pos
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup window
*/
@@ -2138,15 +2568,14 @@ GLFWAPI GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow* window, GLFWwindow
* @return The previously set callback, or `NULL` if no callback was set or the
* library had not been [initialized](@ref intro_init).
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_size
*
- * @since Added in GLFW 1.0.
- *
- * @par
- * __GLFW 3:__ Added window handle parameter. Updated callback signature.
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter and return value.
*
* @ingroup window
*/
@@ -2169,18 +2598,17 @@ GLFWAPI GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow* window, GLFWwind
* @return The previously set callback, or `NULL` if no callback was set or the
* library had not been [initialized](@ref intro_init).
*
- * @remarks __OS X:__ Selecting Quit from the application menu will
- * trigger the close callback for all windows.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @remark @osx Selecting Quit from the application menu will trigger the close
+ * callback for all windows.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_close
*
- * @since Added in GLFW 2.5.
- *
- * @par
- * __GLFW 3:__ Added window handle parameter. Updated callback signature.
+ * @since Added in version 2.5.
+ * @glfw3 Added window handle parameter and return value.
*
* @ingroup window
*/
@@ -2202,15 +2630,14 @@ GLFWAPI GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow* window, GLFWwi
* @return The previously set callback, or `NULL` if no callback was set or the
* library had not been [initialized](@ref intro_init).
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_refresh
*
- * @since Added in GLFW 2.5.
- *
- * @par
- * __GLFW 3:__ Added window handle parameter. Updated callback signature.
+ * @since Added in version 2.5.
+ * @glfw3 Added window handle parameter and return value.
*
* @ingroup window
*/
@@ -2232,12 +2659,13 @@ GLFWAPI GLFWwindowrefreshfun glfwSetWindowRefreshCallback(GLFWwindow* window, GL
* @return The previously set callback, or `NULL` if no callback was set or the
* library had not been [initialized](@ref intro_init).
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_focus
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup window
*/
@@ -2254,12 +2682,13 @@ GLFWAPI GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow* window, GLFWwi
* @return The previously set callback, or `NULL` if no callback was set or the
* library had not been [initialized](@ref intro_init).
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_iconify
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup window
*/
@@ -2276,12 +2705,13 @@ GLFWAPI GLFWwindowiconifyfun glfwSetWindowIconifyCallback(GLFWwindow* window, GL
* @return The previously set callback, or `NULL` if no callback was set or the
* library had not been [initialized](@ref intro_init).
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref window_fbsize
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup window
*/
@@ -2305,16 +2735,18 @@ GLFWAPI GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow* window
*
* Event processing is not required for joystick input to work.
*
- * @par Reentrancy
- * This function may not be called from a callback.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @reentrancy This function must not be called from a callback.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref events
* @sa glfwWaitEvents
+ * @sa glfwWaitEventsTimeout
*
- * @since Added in GLFW 1.0.
+ * @since Added in version 1.0.
*
* @ingroup window
*/
@@ -2348,21 +2780,69 @@ GLFWAPI void glfwPollEvents(void);
*
* Event processing is not required for joystick input to work.
*
- * @par Reentrancy
- * This function may not be called from a callback.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @reentrancy This function must not be called from a callback.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref events
* @sa glfwPollEvents
+ * @sa glfwWaitEventsTimeout
*
- * @since Added in GLFW 2.5.
+ * @since Added in version 2.5.
*
* @ingroup window
*/
GLFWAPI void glfwWaitEvents(void);
+/*! @brief Waits with timeout until events are queued and processes them.
+ *
+ * This function puts the calling thread to sleep until at least one event is
+ * available in the event queue, or until the specified timeout is reached. If
+ * one or more events are available, it behaves exactly like @ref
+ * glfwPollEvents, i.e. the events in the queue are processed and the function
+ * then returns immediately. Processing events will cause the window and input
+ * callbacks associated with those events to be called.
+ *
+ * The timeout value must be a positive finite number.
+ *
+ * Since not all events are associated with callbacks, this function may return
+ * without a callback having been called even if you are monitoring all
+ * callbacks.
+ *
+ * On some platforms, a window move, resize or menu operation will cause event
+ * processing to block. This is due to how event processing is designed on
+ * those platforms. You can use the
+ * [window refresh callback](@ref window_refresh) to redraw the contents of
+ * your window when necessary during such operations.
+ *
+ * On some platforms, certain callbacks may be called outside of a call to one
+ * of the event processing functions.
+ *
+ * If no windows exist, this function returns immediately. For synchronization
+ * of threads in applications that do not create windows, use your threading
+ * library of choice.
+ *
+ * Event processing is not required for joystick input to work.
+ *
+ * @param[in] timeout The maximum amount of time, in seconds, to wait.
+ *
+ * @reentrancy This function must not be called from a callback.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref events
+ * @sa glfwPollEvents
+ * @sa glfwWaitEvents
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup window
+ */
+GLFWAPI void glfwWaitEventsTimeout(double timeout);
+
/*! @brief Posts an empty event to the event queue.
*
* This function posts an empty event from the current thread to the event
@@ -2372,13 +2852,15 @@ GLFWAPI void glfwWaitEvents(void);
* of threads in applications that do not create windows, use your threading
* library of choice.
*
- * @par Thread Safety
- * This function may be called from any thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function may be called from any thread.
*
* @sa @ref events
* @sa glfwWaitEvents
*
- * @since Added in GLFW 3.1.
+ * @since Added in version 3.1.
*
* @ingroup window
*/
@@ -2394,12 +2876,14 @@ GLFWAPI void glfwPostEmptyEvent(void);
* @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or
* `GLFW_STICKY_MOUSE_BUTTONS`.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_INVALID_ENUM.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa glfwSetInputMode
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup input
*/
@@ -2420,37 +2904,96 @@ GLFWAPI int glfwGetInputMode(GLFWwindow* window, int mode);
* and unlimited cursor movement. This is useful for implementing for
* example 3D camera controls.
*
- * If the mode is `GLFW_STICKY_KEYS`, the value must be either `GL_TRUE` to
- * enable sticky keys, or `GL_FALSE` to disable it. If sticky keys are
+ * If the mode is `GLFW_STICKY_KEYS`, the value must be either `GLFW_TRUE` to
+ * enable sticky keys, or `GLFW_FALSE` to disable it. If sticky keys are
* enabled, a key press will ensure that @ref glfwGetKey returns `GLFW_PRESS`
* the next time it is called even if the key had been released before the
* call. This is useful when you are only interested in whether keys have been
* pressed but not when or in which order.
*
* If the mode is `GLFW_STICKY_MOUSE_BUTTONS`, the value must be either
- * `GL_TRUE` to enable sticky mouse buttons, or `GL_FALSE` to disable it. If
- * sticky mouse buttons are enabled, a mouse button press will ensure that @ref
- * glfwGetMouseButton returns `GLFW_PRESS` the next time it is called even if
- * the mouse button had been released before the call. This is useful when you
- * are only interested in whether mouse buttons have been pressed but not when
- * or in which order.
+ * `GLFW_TRUE` to enable sticky mouse buttons, or `GLFW_FALSE` to disable it.
+ * If sticky mouse buttons are enabled, a mouse button press will ensure that
+ * @ref glfwGetMouseButton returns `GLFW_PRESS` the next time it is called even
+ * if the mouse button had been released before the call. This is useful when
+ * you are only interested in whether mouse buttons have been pressed but not
+ * when or in which order.
*
* @param[in] window The window whose input mode to set.
* @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or
* `GLFW_STICKY_MOUSE_BUTTONS`.
* @param[in] value The new value of the specified input mode.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa glfwGetInputMode
*
- * @since Added in GLFW 3.0. Replaces `glfwEnable` and `glfwDisable`.
+ * @since Added in version 3.0. Replaces `glfwEnable` and `glfwDisable`.
*
* @ingroup input
*/
GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value);
+/*! @brief Returns the localized name of the specified printable key.
+ *
+ * This function returns the localized name of the specified printable key.
+ * This is intended for displaying key bindings to the user.
+ *
+ * If the key is `GLFW_KEY_UNKNOWN`, the scancode is used instead, otherwise
+ * the scancode is ignored. If a non-printable key or (if the key is
+ * `GLFW_KEY_UNKNOWN`) a scancode that maps to a non-printable key is
+ * specified, this function returns `NULL`.
+ *
+ * This behavior allows you to pass in the arguments passed to the
+ * [key callback](@ref input_key) without modification.
+ *
+ * The printable keys are:
+ * - `GLFW_KEY_APOSTROPHE`
+ * - `GLFW_KEY_COMMA`
+ * - `GLFW_KEY_MINUS`
+ * - `GLFW_KEY_PERIOD`
+ * - `GLFW_KEY_SLASH`
+ * - `GLFW_KEY_SEMICOLON`
+ * - `GLFW_KEY_EQUAL`
+ * - `GLFW_KEY_LEFT_BRACKET`
+ * - `GLFW_KEY_RIGHT_BRACKET`
+ * - `GLFW_KEY_BACKSLASH`
+ * - `GLFW_KEY_WORLD_1`
+ * - `GLFW_KEY_WORLD_2`
+ * - `GLFW_KEY_0` to `GLFW_KEY_9`
+ * - `GLFW_KEY_A` to `GLFW_KEY_Z`
+ * - `GLFW_KEY_KP_0` to `GLFW_KEY_KP_9`
+ * - `GLFW_KEY_KP_DECIMAL`
+ * - `GLFW_KEY_KP_DIVIDE`
+ * - `GLFW_KEY_KP_MULTIPLY`
+ * - `GLFW_KEY_KP_SUBTRACT`
+ * - `GLFW_KEY_KP_ADD`
+ * - `GLFW_KEY_KP_EQUAL`
+ *
+ * @param[in] key The key to query, or `GLFW_KEY_UNKNOWN`.
+ * @param[in] scancode The scancode of the key to query.
+ * @return The localized name of the key, or `NULL`.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @pointer_lifetime The returned string is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the next call to @ref
+ * glfwGetKeyName, or until the library is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref input_key_name
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup input
+ */
+GLFWAPI const char* glfwGetKeyName(int key, int scancode);
+
/*! @brief Returns the last reported state of a keyboard key for the specified
* window.
*
@@ -2470,20 +3013,22 @@ GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value);
* The [modifier key bit masks](@ref mods) are not key tokens and cannot be
* used with this function.
*
+ * __Do not use this function__ to implement [text input](@ref input_char).
+ *
* @param[in] window The desired window.
* @param[in] key The desired [keyboard key](@ref keys). `GLFW_KEY_UNKNOWN` is
* not a valid key for this function.
* @return One of `GLFW_PRESS` or `GLFW_RELEASE`.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_INVALID_ENUM.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref input_key
*
- * @since Added in GLFW 1.0.
- *
- * @par
- * __GLFW 3:__ Added window handle parameter.
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter.
*
* @ingroup input
*/
@@ -2504,15 +3049,15 @@ GLFWAPI int glfwGetKey(GLFWwindow* window, int key);
* @param[in] button The desired [mouse button](@ref buttons).
* @return One of `GLFW_PRESS` or `GLFW_RELEASE`.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_INVALID_ENUM.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref input_mouse_button
*
- * @since Added in GLFW 1.0.
- *
- * @par
- * __GLFW 3:__ Added window handle parameter.
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter.
*
* @ingroup input
*/
@@ -2542,13 +3087,15 @@ GLFWAPI int glfwGetMouseButton(GLFWwindow* window, int button);
* @param[out] ypos Where to store the cursor y-coordinate, relative to the to
* top edge of the client area, or `NULL`.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref cursor_pos
* @sa glfwSetCursorPos
*
- * @since Added in GLFW 3.0. Replaces `glfwGetMousePos`.
+ * @since Added in version 3.0. Replaces `glfwGetMousePos`.
*
* @ingroup input
*/
@@ -2577,17 +3124,15 @@ GLFWAPI void glfwGetCursorPos(GLFWwindow* window, double* xpos, double* ypos);
* @param[in] ypos The desired y-coordinate, relative to the top edge of the
* client area.
*
- * @remarks __X11:__ Due to the asynchronous nature of X11, it may take
- * a moment for the window focus event to arrive. This means you may not be
- * able to set the cursor position directly after window creation.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref cursor_pos
* @sa glfwGetCursorPos
*
- * @since Added in GLFW 3.0. Replaces `glfwSetMousePos`.
+ * @since Added in version 3.0. Replaces `glfwSetMousePos`.
*
* @ingroup input
*/
@@ -2610,24 +3155,24 @@ GLFWAPI void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos);
* @param[in] image The desired cursor image.
* @param[in] xhot The desired x-coordinate, in pixels, of the cursor hotspot.
* @param[in] yhot The desired y-coordinate, in pixels, of the cursor hotspot.
- *
* @return The handle of the created cursor, or `NULL` if an
* [error](@ref error_handling) occurred.
*
- * @par Pointer Lifetime
- * The specified image data is copied before this function returns.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
*
- * @par Reentrancy
- * This function may not be called from a callback.
+ * @pointer_lifetime The specified image data is copied before this function
+ * returns.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @reentrancy This function must not be called from a callback.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref cursor_object
* @sa glfwDestroyCursor
* @sa glfwCreateStandardCursor
*
- * @since Added in GLFW 3.1.
+ * @since Added in version 3.1.
*
* @ingroup input
*/
@@ -2639,20 +3184,20 @@ GLFWAPI GLFWcursor* glfwCreateCursor(const GLFWimage* image, int xhot, int yhot)
* a window with @ref glfwSetCursor.
*
* @param[in] shape One of the [standard shapes](@ref shapes).
- *
* @return A new cursor ready to use or `NULL` if an
* [error](@ref error_handling) occurred.
*
- * @par Reentrancy
- * This function may not be called from a callback.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @reentrancy This function must not be called from a callback.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref cursor_object
* @sa glfwCreateCursor
*
- * @since Added in GLFW 3.1.
+ * @since Added in version 3.1.
*
* @ingroup input
*/
@@ -2666,16 +3211,17 @@ GLFWAPI GLFWcursor* glfwCreateStandardCursor(int shape);
*
* @param[in] cursor The cursor object to destroy.
*
- * @par Reentrancy
- * This function may not be called from a callback.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @reentrancy This function must not be called from a callback.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref cursor_object
* @sa glfwCreateCursor
*
- * @since Added in GLFW 3.1.
+ * @since Added in version 3.1.
*
* @ingroup input
*/
@@ -2695,12 +3241,14 @@ GLFWAPI void glfwDestroyCursor(GLFWcursor* cursor);
* @param[in] cursor The cursor to set, or `NULL` to switch back to the default
* arrow cursor.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref cursor_object
*
- * @since Added in GLFW 3.1.
+ * @since Added in version 3.1.
*
* @ingroup input
*/
@@ -2736,15 +3284,14 @@ GLFWAPI void glfwSetCursor(GLFWwindow* window, GLFWcursor* cursor);
* @return The previously set callback, or `NULL` if no callback was set or the
* library had not been [initialized](@ref intro_init).
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref input_key
*
- * @since Added in GLFW 1.0.
- *
- * @par
- * __GLFW 3:__ Added window handle parameter. Updated callback signature.
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter and return value.
*
* @ingroup input
*/
@@ -2775,15 +3322,14 @@ GLFWAPI GLFWkeyfun glfwSetKeyCallback(GLFWwindow* window, GLFWkeyfun cbfun);
* @return The previously set callback, or `NULL` if no callback was set or the
* library had not been [initialized](@ref intro_init).
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref input_char
*
- * @since Added in GLFW 2.4.
- *
- * @par
- * __GLFW 3:__ Added window handle parameter. Updated callback signature.
+ * @since Added in version 2.4.
+ * @glfw3 Added window handle parameter and return value.
*
* @ingroup input
*/
@@ -2810,12 +3356,13 @@ GLFWAPI GLFWcharfun glfwSetCharCallback(GLFWwindow* window, GLFWcharfun cbfun);
* @return The previously set callback, or `NULL` if no callback was set or an
* error occurred.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref input_char
*
- * @since Added in GLFW 3.1.
+ * @since Added in version 3.1.
*
* @ingroup input
*/
@@ -2838,15 +3385,14 @@ GLFWAPI GLFWcharmodsfun glfwSetCharModsCallback(GLFWwindow* window, GLFWcharmods
* @return The previously set callback, or `NULL` if no callback was set or the
* library had not been [initialized](@ref intro_init).
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref input_mouse_button
*
- * @since Added in GLFW 1.0.
- *
- * @par
- * __GLFW 3:__ Added window handle parameter. Updated callback signature.
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter and return value.
*
* @ingroup input
*/
@@ -2865,12 +3411,13 @@ GLFWAPI GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow* window, GLFWmo
* @return The previously set callback, or `NULL` if no callback was set or the
* library had not been [initialized](@ref intro_init).
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref cursor_pos
*
- * @since Added in GLFW 3.0. Replaces `glfwSetMousePosCallback`.
+ * @since Added in version 3.0. Replaces `glfwSetMousePosCallback`.
*
* @ingroup input
*/
@@ -2888,12 +3435,13 @@ GLFWAPI GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow* window, GLFWcursor
* @return The previously set callback, or `NULL` if no callback was set or the
* library had not been [initialized](@ref intro_init).
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref cursor_enter
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup input
*/
@@ -2914,12 +3462,13 @@ GLFWAPI GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow* window, GLFWcu
* @return The previously set callback, or `NULL` if no callback was set or the
* library had not been [initialized](@ref intro_init).
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref scrolling
*
- * @since Added in GLFW 3.0. Replaces `glfwSetMouseWheelCallback`.
+ * @since Added in version 3.0. Replaces `glfwSetMouseWheelCallback`.
*
* @ingroup input
*/
@@ -2941,12 +3490,13 @@ GLFWAPI GLFWscrollfun glfwSetScrollCallback(GLFWwindow* window, GLFWscrollfun cb
* @return The previously set callback, or `NULL` if no callback was set or the
* library had not been [initialized](@ref intro_init).
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref path_drop
*
- * @since Added in GLFW 3.1.
+ * @since Added in version 3.1.
*
* @ingroup input
*/
@@ -2957,14 +3507,16 @@ GLFWAPI GLFWdropfun glfwSetDropCallback(GLFWwindow* window, GLFWdropfun cbfun);
* This function returns whether the specified joystick is present.
*
* @param[in] joy The [joystick](@ref joysticks) to query.
- * @return `GL_TRUE` if the joystick is present, or `GL_FALSE` otherwise.
+ * @return `GLFW_TRUE` if the joystick is present, or `GLFW_FALSE` otherwise.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref joystick
*
- * @since Added in GLFW 3.0. Replaces `glfwGetJoystickParam`.
+ * @since Added in version 3.0. Replaces `glfwGetJoystickParam`.
*
* @ingroup input
*/
@@ -2975,22 +3527,28 @@ GLFWAPI int glfwJoystickPresent(int joy);
* This function returns the values of all axes of the specified joystick.
* Each element in the array is a value between -1.0 and 1.0.
*
+ * Querying a joystick slot with no device present is not an error, but will
+ * cause this function to return `NULL`. Call @ref glfwJoystickPresent to
+ * check device presence.
+ *
* @param[in] joy The [joystick](@ref joysticks) to query.
* @param[out] count Where to store the number of axis values in the returned
* array. This is set to zero if an error occurred.
* @return An array of axis values, or `NULL` if the joystick is not present.
*
- * @par Pointer Lifetime
- * The returned array is allocated and freed by GLFW. You should not free it
- * yourself. It is valid until the specified joystick is disconnected, this
- * function is called again for that joystick or the library is terminated.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @pointer_lifetime The returned array is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the specified joystick is
+ * disconnected, this function is called again for that joystick or the library
+ * is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref joystick_axis
*
- * @since Added in GLFW 3.0. Replaces `glfwGetJoystickPos`.
+ * @since Added in version 3.0. Replaces `glfwGetJoystickPos`.
*
* @ingroup input
*/
@@ -3001,25 +3559,29 @@ GLFWAPI const float* glfwGetJoystickAxes(int joy, int* count);
* This function returns the state of all buttons of the specified joystick.
* Each element in the array is either `GLFW_PRESS` or `GLFW_RELEASE`.
*
+ * Querying a joystick slot with no device present is not an error, but will
+ * cause this function to return `NULL`. Call @ref glfwJoystickPresent to
+ * check device presence.
+ *
* @param[in] joy The [joystick](@ref joysticks) to query.
* @param[out] count Where to store the number of button states in the returned
* array. This is set to zero if an error occurred.
* @return An array of button states, or `NULL` if the joystick is not present.
*
- * @par Pointer Lifetime
- * The returned array is allocated and freed by GLFW. You should not free it
- * yourself. It is valid until the specified joystick is disconnected, this
- * function is called again for that joystick or the library is terminated.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @pointer_lifetime The returned array is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the specified joystick is
+ * disconnected, this function is called again for that joystick or the library
+ * is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref joystick_button
*
- * @since Added in GLFW 2.2.
- *
- * @par
- * __GLFW 3:__ Changed to return a dynamic array.
+ * @since Added in version 2.2.
+ * @glfw3 Changed to return a dynamic array.
*
* @ingroup input
*/
@@ -3031,26 +3593,55 @@ GLFWAPI const unsigned char* glfwGetJoystickButtons(int joy, int* count);
* The returned string is allocated and freed by GLFW. You should not free it
* yourself.
*
+ * Querying a joystick slot with no device present is not an error, but will
+ * cause this function to return `NULL`. Call @ref glfwJoystickPresent to
+ * check device presence.
+ *
* @param[in] joy The [joystick](@ref joysticks) to query.
* @return The UTF-8 encoded name of the joystick, or `NULL` if the joystick
* is not present.
*
- * @par Pointer Lifetime
- * The returned string is allocated and freed by GLFW. You should not free it
- * yourself. It is valid until the specified joystick is disconnected, this
- * function is called again for that joystick or the library is terminated.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @pointer_lifetime The returned string is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the specified joystick is
+ * disconnected, this function is called again for that joystick or the library
+ * is terminated.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref joystick_name
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup input
*/
GLFWAPI const char* glfwGetJoystickName(int joy);
+/*! @brief Sets the joystick configuration callback.
+ *
+ * This function sets the joystick configuration callback, or removes the
+ * currently set callback. This is called when a joystick is connected to or
+ * disconnected from the system.
+ *
+ * @param[in] cbfun The new callback, or `NULL` to remove the currently set
+ * callback.
+ * @return The previously set callback, or `NULL` if no callback was set or the
+ * library had not been [initialized](@ref intro_init).
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function must only be called from the main thread.
+ *
+ * @sa @ref joystick_event
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup input
+ */
+GLFWAPI GLFWjoystickfun glfwSetJoystickCallback(GLFWjoystickfun cbfun);
+
/*! @brief Sets the clipboard to the specified string.
*
* This function sets the system clipboard to the specified, UTF-8 encoded
@@ -3059,16 +3650,18 @@ GLFWAPI const char* glfwGetJoystickName(int joy);
* @param[in] window The window that will own the clipboard contents.
* @param[in] string A UTF-8 encoded string.
*
- * @par Pointer Lifetime
- * The specified string is copied before this function returns.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @pointer_lifetime The specified string is copied before this function
+ * returns.
+ *
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref clipboard
* @sa glfwGetClipboardString
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup input
*/
@@ -3085,19 +3678,20 @@ GLFWAPI void glfwSetClipboardString(GLFWwindow* window, const char* string);
* @return The contents of the clipboard as a UTF-8 encoded string, or `NULL`
* if an [error](@ref error_handling) occurred.
*
- * @par Pointer Lifetime
- * The returned string is allocated and freed by GLFW. You should not free it
- * yourself. It is valid until the next call to @ref
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @pointer_lifetime The returned string is allocated and freed by GLFW. You
+ * should not free it yourself. It is valid until the next call to @ref
* glfwGetClipboardString or @ref glfwSetClipboardString, or until the library
* is terminated.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @thread_safety This function must only be called from the main thread.
*
* @sa @ref clipboard
* @sa glfwSetClipboardString
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup input
*/
@@ -3116,12 +3710,15 @@ GLFWAPI const char* glfwGetClipboardString(GLFWwindow* window);
* @return The current value, in seconds, or zero if an
* [error](@ref error_handling) occurred.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread. Reading and
+ * writing of the internal timer offset is not atomic, so it needs to be
+ * externally synchronized with calls to @ref glfwSetTime.
*
* @sa @ref time
*
- * @since Added in GLFW 1.0.
+ * @since Added in version 1.0.
*
* @ingroup input
*/
@@ -3135,21 +3732,67 @@ GLFWAPI double glfwGetTime(void);
*
* @param[in] time The new value, in seconds.
*
- * @remarks The upper limit of the timer is calculated as
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_INVALID_VALUE.
+ *
+ * @remark The upper limit of the timer is calculated as
* floor((264 - 1) / 109) and is due to implementations
* storing nanoseconds in 64 bits. The limit may be increased in the future.
*
- * @par Thread Safety
- * This function may only be called from the main thread.
+ * @thread_safety This function may be called from any thread. Reading and
+ * writing of the internal timer offset is not atomic, so it needs to be
+ * externally synchronized with calls to @ref glfwGetTime.
*
* @sa @ref time
*
- * @since Added in GLFW 2.2.
+ * @since Added in version 2.2.
*
* @ingroup input
*/
GLFWAPI void glfwSetTime(double time);
+/*! @brief Returns the current value of the raw timer.
+ *
+ * This function returns the current value of the raw timer, measured in
+ * 1 / frequency seconds. To get the frequency, call @ref
+ * glfwGetTimerFrequency.
+ *
+ * @return The value of the timer, or zero if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref time
+ * @sa glfwGetTimerFrequency
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup input
+ */
+GLFWAPI uint64_t glfwGetTimerValue(void);
+
+/*! @brief Returns the frequency, in Hz, of the raw timer.
+ *
+ * This function returns the frequency, in Hz, of the raw timer.
+ *
+ * @return The frequency of the timer, in Hz, or zero if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref time
+ * @sa glfwGetTimerValue
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup input
+ */
+GLFWAPI uint64_t glfwGetTimerFrequency(void);
+
/*! @brief Makes the context of the specified window current for the calling
* thread.
*
@@ -3163,16 +3806,22 @@ GLFWAPI void glfwSetTime(double time);
* whether a context performs this flush by setting the
* [GLFW_CONTEXT_RELEASE_BEHAVIOR](@ref window_hints_ctx) window hint.
*
+ * The specified window must have an OpenGL or OpenGL ES context. Specifying
+ * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT
+ * error.
+ *
* @param[in] window The window whose context to make current, or `NULL` to
* detach the current context.
*
- * @par Thread Safety
- * This function may be called from any thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function may be called from any thread.
*
* @sa @ref context_current
* @sa glfwGetCurrentContext
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup context
*/
@@ -3186,13 +3835,14 @@ GLFWAPI void glfwMakeContextCurrent(GLFWwindow* window);
* @return The window whose context is current, or `NULL` if no window's
* context is current.
*
- * @par Thread Safety
- * This function may be called from any thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread.
*
* @sa @ref context_current
* @sa glfwMakeContextCurrent
*
- * @since Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup context
*/
@@ -3200,22 +3850,33 @@ GLFWAPI GLFWwindow* glfwGetCurrentContext(void);
/*! @brief Swaps the front and back buffers of the specified window.
*
- * This function swaps the front and back buffers of the specified window. If
- * the swap interval is greater than zero, the GPU driver waits the specified
- * number of screen updates before swapping the buffers.
+ * This function swaps the front and back buffers of the specified window when
+ * rendering with OpenGL or OpenGL ES. If the swap interval is greater than
+ * zero, the GPU driver waits the specified number of screen updates before
+ * swapping the buffers.
+ *
+ * The specified window must have an OpenGL or OpenGL ES context. Specifying
+ * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT
+ * error.
+ *
+ * This function does not apply to Vulkan. If you are rendering with Vulkan,
+ * see `vkQueuePresentKHR` instead.
*
* @param[in] window The window whose buffers to swap.
*
- * @par Thread Safety
- * This function may be called from any thread.
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark __EGL:__ The context of the specified window must be current on the
+ * calling thread.
+ *
+ * @thread_safety This function may be called from any thread.
*
* @sa @ref buffer_swap
* @sa glfwSwapInterval
*
- * @since Added in GLFW 1.0.
- *
- * @par
- * __GLFW 3:__ Added window handle parameter.
+ * @since Added in version 1.0.
+ * @glfw3 Added window handle parameter.
*
* @ingroup window
*/
@@ -3223,11 +3884,11 @@ GLFWAPI void glfwSwapBuffers(GLFWwindow* window);
/*! @brief Sets the swap interval for the current context.
*
- * This function sets the swap interval for the current context, i.e. the
- * number of screen updates to wait from the time @ref glfwSwapBuffers was
- * called before swapping the buffers and returning. This is sometimes called
- * _vertical synchronization_, _vertical retrace synchronization_ or just
- * _vsync_.
+ * This function sets the swap interval for the current OpenGL or OpenGL ES
+ * context, i.e. the number of screen updates to wait from the time @ref
+ * glfwSwapBuffers was called before swapping the buffers and returning. This
+ * is sometimes called _vertical synchronization_, _vertical retrace
+ * synchronization_ or just _vsync_.
*
* Contexts that support either of the `WGL_EXT_swap_control_tear` and
* `GLX_EXT_swap_control_tear` extensions also accept negative swap intervals,
@@ -3239,25 +3900,30 @@ GLFWAPI void glfwSwapBuffers(GLFWwindow* window);
* A context must be current on the calling thread. Calling this function
* without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error.
*
+ * This function does not apply to Vulkan. If you are rendering with Vulkan,
+ * see the present mode of your swapchain instead.
+ *
* @param[in] interval The minimum number of screen updates to wait for
* until the buffers are swapped by @ref glfwSwapBuffers.
*
- * @remarks This function is not called during context creation, leaving the
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark This function is not called during context creation, leaving the
* swap interval set to whatever is the default on that platform. This is done
* because some swap interval extensions used by GLFW do not allow the swap
* interval to be reset to zero once it has been set to a non-zero value.
*
- * @remarks Some GPU drivers do not honor the requested swap interval, either
+ * @remark Some GPU drivers do not honor the requested swap interval, either
* because of a user setting that overrides the application's request or due to
* bugs in the driver.
*
- * @par Thread Safety
- * This function may be called from any thread.
+ * @thread_safety This function may be called from any thread.
*
* @sa @ref buffer_swap
* @sa glfwSwapBuffers
*
- * @since Added in GLFW 1.0.
+ * @since Added in version 1.0.
*
* @ingroup context
*/
@@ -3266,9 +3932,9 @@ GLFWAPI void glfwSwapInterval(int interval);
/*! @brief Returns whether the specified extension is available.
*
* This function returns whether the specified
- * [client API extension](@ref context_glext) is supported by the current
- * OpenGL or OpenGL ES context. It searches both for OpenGL and OpenGL ES
- * extension and platform-specific context creation API extensions.
+ * [API extension](@ref context_glext) is supported by the current OpenGL or
+ * OpenGL ES context. It searches both for client API extension and context
+ * creation API extensions.
*
* A context must be current on the calling thread. Calling this function
* without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error.
@@ -3278,16 +3944,24 @@ GLFWAPI void glfwSwapInterval(int interval);
* frequently. The extension strings will not change during the lifetime of
* a context, so there is no danger in doing this.
*
- * @param[in] extension The ASCII encoded name of the extension.
- * @return `GL_TRUE` if the extension is available, or `GL_FALSE` otherwise.
+ * This function does not apply to Vulkan. If you are using Vulkan, see @ref
+ * glfwGetRequiredInstanceExtensions, `vkEnumerateInstanceExtensionProperties`
+ * and `vkEnumerateDeviceExtensionProperties` instead.
*
- * @par Thread Safety
- * This function may be called from any thread.
+ * @param[in] extension The ASCII encoded name of the extension.
+ * @return `GLFW_TRUE` if the extension is available, or `GLFW_FALSE`
+ * otherwise.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_NO_CURRENT_CONTEXT, @ref GLFW_INVALID_VALUE and @ref
+ * GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function may be called from any thread.
*
* @sa @ref context_glext
* @sa glfwGetProcAddress
*
- * @since Added in GLFW 1.0.
+ * @since Added in version 1.0.
*
* @ingroup context
*/
@@ -3296,40 +3970,243 @@ GLFWAPI int glfwExtensionSupported(const char* extension);
/*! @brief Returns the address of the specified function for the current
* context.
*
- * This function returns the address of the specified
+ * This function returns the address of the specified OpenGL or OpenGL ES
* [core or extension function](@ref context_glext), if it is supported
* by the current context.
*
* A context must be current on the calling thread. Calling this function
* without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error.
*
- * @param[in] procname The ASCII encoded name of the function.
- * @return The address of the function, or `NULL` if an [error](@ref
- * error_handling) occurred.
+ * This function does not apply to Vulkan. If you are rendering with Vulkan,
+ * see @ref glfwGetInstanceProcAddress, `vkGetInstanceProcAddr` and
+ * `vkGetDeviceProcAddr` instead.
*
- * @remarks The address of a given function is not guaranteed to be the same
+ * @param[in] procname The ASCII encoded name of the function.
+ * @return The address of the function, or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remark The address of a given function is not guaranteed to be the same
* between contexts.
*
- * @remarks This function may return a non-`NULL` address despite the
+ * @remark This function may return a non-`NULL` address despite the
* associated version or extension not being available. Always check the
* context version or extension string first.
*
- * @par Pointer Lifetime
- * The returned function pointer is valid until the context is destroyed or the
- * library is terminated.
+ * @pointer_lifetime The returned function pointer is valid until the context
+ * is destroyed or the library is terminated.
*
- * @par Thread Safety
- * This function may be called from any thread.
+ * @thread_safety This function may be called from any thread.
*
* @sa @ref context_glext
* @sa glfwExtensionSupported
*
- * @since Added in GLFW 1.0.
+ * @since Added in version 1.0.
*
* @ingroup context
*/
GLFWAPI GLFWglproc glfwGetProcAddress(const char* procname);
+/*! @brief Returns whether the Vulkan loader has been found.
+ *
+ * This function returns whether the Vulkan loader has been found. This check
+ * is performed by @ref glfwInit.
+ *
+ * The availability of a Vulkan loader does not by itself guarantee that window
+ * surface creation or even device creation is possible. Call @ref
+ * glfwGetRequiredInstanceExtensions to check whether the extensions necessary
+ * for Vulkan surface creation are available and @ref
+ * glfwGetPhysicalDevicePresentationSupport to check whether a queue family of
+ * a physical device supports image presentation.
+ *
+ * @return `GLFW_TRUE` if Vulkan is available, or `GLFW_FALSE` otherwise.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref vulkan_support
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup vulkan
+ */
+GLFWAPI int glfwVulkanSupported(void);
+
+/*! @brief Returns the Vulkan instance extensions required by GLFW.
+ *
+ * This function returns an array of names of Vulkan instance extensions required
+ * by GLFW for creating Vulkan surfaces for GLFW windows. If successful, the
+ * list will always contains `VK_KHR_surface`, so if you don't require any
+ * additional extensions you can pass this list directly to the
+ * `VkInstanceCreateInfo` struct.
+ *
+ * If Vulkan is not available on the machine, this function returns `NULL` and
+ * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported
+ * to check whether Vulkan is available.
+ *
+ * If Vulkan is available but no set of extensions allowing window surface
+ * creation was found, this function returns `NULL`. You may still use Vulkan
+ * for off-screen rendering and compute work.
+ *
+ * @param[out] count Where to store the number of extensions in the returned
+ * array. This is set to zero if an error occurred.
+ * @return An array of ASCII encoded extension names, or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_API_UNAVAILABLE.
+ *
+ * @remarks Additional extensions may be required by future versions of GLFW.
+ * You should check if any extensions you wish to enable are already in the
+ * returned array, as it is an error to specify an extension more than once in
+ * the `VkInstanceCreateInfo` struct.
+ *
+ * @pointer_lifetime The returned array is allocated and freed by GLFW. You
+ * should not free it yourself. It is guaranteed to be valid only until the
+ * library is terminated.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref vulkan_ext
+ * @sa glfwCreateWindowSurface
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup vulkan
+ */
+GLFWAPI const char** glfwGetRequiredInstanceExtensions(uint32_t* count);
+
+#if defined(VK_VERSION_1_0)
+
+/*! @brief Returns the address of the specified Vulkan instance function.
+ *
+ * This function returns the address of the specified Vulkan core or extension
+ * function for the specified instance. If instance is set to `NULL` it can
+ * return any function exported from the Vulkan loader, including at least the
+ * following functions:
+ *
+ * - `vkEnumerateInstanceExtensionProperties`
+ * - `vkEnumerateInstanceLayerProperties`
+ * - `vkCreateInstance`
+ * - `vkGetInstanceProcAddr`
+ *
+ * If Vulkan is not available on the machine, this function returns `NULL` and
+ * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported
+ * to check whether Vulkan is available.
+ *
+ * This function is equivalent to calling `vkGetInstanceProcAddr` with
+ * a platform-specific query of the Vulkan loader as a fallback.
+ *
+ * @param[in] instance The Vulkan instance to query, or `NULL` to retrieve
+ * functions related to instance creation.
+ * @param[in] procname The ASCII encoded name of the function.
+ * @return The address of the function, or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
+ * GLFW_API_UNAVAILABLE.
+ *
+ * @pointer_lifetime The returned function pointer is valid until the library
+ * is terminated.
+ *
+ * @thread_safety This function may be called from any thread.
+ *
+ * @sa @ref vulkan_proc
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup vulkan
+ */
+GLFWAPI GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, const char* procname);
+
+/*! @brief Returns whether the specified queue family can present images.
+ *
+ * This function returns whether the specified queue family of the specified
+ * physical device supports presentation to the platform GLFW was built for.
+ *
+ * If Vulkan or the required window surface creation instance extensions are
+ * not available on the machine, or if the specified instance was not created
+ * with the required extensions, this function returns `GLFW_FALSE` and
+ * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported
+ * to check whether Vulkan is available and @ref
+ * glfwGetRequiredInstanceExtensions to check what instance extensions are
+ * required.
+ *
+ * @param[in] instance The instance that the physical device belongs to.
+ * @param[in] device The physical device that the queue family belongs to.
+ * @param[in] queuefamily The index of the queue family to query.
+ * @return `GLFW_TRUE` if the queue family supports presentation, or
+ * `GLFW_FALSE` otherwise.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_API_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @thread_safety This function may be called from any thread. For
+ * synchronization details of Vulkan objects, see the Vulkan specification.
+ *
+ * @sa @ref vulkan_present
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup vulkan
+ */
+GLFWAPI int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily);
+
+/*! @brief Creates a Vulkan surface for the specified window.
+ *
+ * This function creates a Vulkan surface for the specified window.
+ *
+ * If the Vulkan loader was not found at initialization, this function returns
+ * `VK_ERROR_INITIALIZATION_FAILED` and generates a @ref GLFW_API_UNAVAILABLE
+ * error. Call @ref glfwVulkanSupported to check whether the Vulkan loader was
+ * found.
+ *
+ * If the required window surface creation instance extensions are not
+ * available or if the specified instance was not created with these extensions
+ * enabled, this function returns `VK_ERROR_EXTENSION_NOT_PRESENT` and
+ * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref
+ * glfwGetRequiredInstanceExtensions to check what instance extensions are
+ * required.
+ *
+ * The window surface must be destroyed before the specified Vulkan instance.
+ * It is the responsibility of the caller to destroy the window surface. GLFW
+ * does not destroy it for you. Call `vkDestroySurfaceKHR` to destroy the
+ * surface.
+ *
+ * @param[in] instance The Vulkan instance to create the surface in.
+ * @param[in] window The window to create the surface for.
+ * @param[in] allocator The allocator to use, or `NULL` to use the default
+ * allocator.
+ * @param[out] surface Where to store the handle of the surface. This is set
+ * to `VK_NULL_HANDLE` if an error occurred.
+ * @return `VK_SUCCESS` if successful, or a Vulkan error code if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
+ * GLFW_API_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR.
+ *
+ * @remarks If an error occurs before the creation call is made, GLFW returns
+ * the Vulkan error code most appropriate for the error. Appropriate use of
+ * @ref glfwVulkanSupported and @ref glfwGetRequiredInstanceExtensions should
+ * eliminate almost all occurrences of these errors.
+ *
+ * @thread_safety This function may be called from any thread. For
+ * synchronization details of Vulkan objects, see the Vulkan specification.
+ *
+ * @sa @ref vulkan_surface
+ * @sa glfwGetRequiredInstanceExtensions
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup vulkan
+ */
+GLFWAPI VkResult glfwCreateWindowSurface(VkInstance instance, GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface);
+
+#endif /*VK_VERSION_1_0*/
+
/*************************************************************************
* Global definition cleanup
diff --git a/extern/glfw-3.1.2.bin.WIN32/include/GLFW/glfw3native.h b/extern/glfw-3.2.bin.WIN32/include/GLFW/glfw3native.h
similarity index 57%
rename from extern/glfw-3.1.2.bin.WIN32/include/GLFW/glfw3native.h
rename to extern/glfw-3.2.bin.WIN32/include/GLFW/glfw3native.h
index b3ce748..30e1a57 100644
--- a/extern/glfw-3.1.2.bin.WIN32/include/GLFW/glfw3native.h
+++ b/extern/glfw-3.2.bin.WIN32/include/GLFW/glfw3native.h
@@ -1,9 +1,9 @@
/*************************************************************************
- * GLFW 3.1 - www.glfw.org
+ * GLFW 3.2 - www.glfw.org
* A library for OpenGL, window and input
*------------------------------------------------------------------------
* Copyright (c) 2002-2006 Marcus Geelnard
- * Copyright (c) 2006-2010 Camilla Berglund
+ * Copyright (c) 2006-2016 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
@@ -38,20 +38,30 @@ extern "C" {
* Doxygen documentation
*************************************************************************/
+/*! @file glfw3native.h
+ * @brief The header of the native access functions.
+ *
+ * This is the header file of the native access functions. See @ref native for
+ * more information.
+ */
/*! @defgroup native Native access
*
* **By using the native access functions you assert that you know what you're
* doing and how to fix problems caused by using them. If you don't, you
* shouldn't be using them.**
*
- * Before the inclusion of @ref glfw3native.h, you must define exactly one
- * window system API macro and exactly one context creation API macro. Failure
- * to do this will cause a compile-time error.
+ * Before the inclusion of @ref glfw3native.h, you may define exactly one
+ * window system API macro and zero or more context creation API macros.
+ *
+ * The chosen backends must match those the library was compiled for. Failure
+ * to do this will cause a link-time error.
*
* The available window API macros are:
* * `GLFW_EXPOSE_NATIVE_WIN32`
* * `GLFW_EXPOSE_NATIVE_COCOA`
* * `GLFW_EXPOSE_NATIVE_X11`
+ * * `GLFW_EXPOSE_NATIVE_WAYLAND`
+ * * `GLFW_EXPOSE_NATIVE_MIR`
*
* The available context API macros are:
* * `GLFW_EXPOSE_NATIVE_WGL`
@@ -86,20 +96,23 @@ extern "C" {
#elif defined(GLFW_EXPOSE_NATIVE_X11)
#include
#include
-#else
- #error "No window API selected"
+#elif defined(GLFW_EXPOSE_NATIVE_WAYLAND)
+ #include
+#elif defined(GLFW_EXPOSE_NATIVE_MIR)
+ #include
#endif
#if defined(GLFW_EXPOSE_NATIVE_WGL)
/* WGL is declared by windows.h */
-#elif defined(GLFW_EXPOSE_NATIVE_NSGL)
+#endif
+#if defined(GLFW_EXPOSE_NATIVE_NSGL)
/* NSGL is declared by Cocoa.h */
-#elif defined(GLFW_EXPOSE_NATIVE_GLX)
+#endif
+#if defined(GLFW_EXPOSE_NATIVE_GLX)
#include
-#elif defined(GLFW_EXPOSE_NATIVE_EGL)
+#endif
+#if defined(GLFW_EXPOSE_NATIVE_EGL)
#include
-#else
- #error "No context API selected"
#endif
@@ -114,11 +127,10 @@ extern "C" {
* of the specified monitor, or `NULL` if an [error](@ref error_handling)
* occurred.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
- * @par History
- * Added in GLFW 3.1.
+ * @since Added in version 3.1.
*
* @ingroup native
*/
@@ -130,11 +142,10 @@ GLFWAPI const char* glfwGetWin32Adapter(GLFWmonitor* monitor);
* `\\.\DISPLAY1\Monitor0`) of the specified monitor, or `NULL` if an
* [error](@ref error_handling) occurred.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
- * @par History
- * Added in GLFW 3.1.
+ * @since Added in version 3.1.
*
* @ingroup native
*/
@@ -145,11 +156,10 @@ GLFWAPI const char* glfwGetWin32Monitor(GLFWmonitor* monitor);
* @return The `HWND` of the specified window, or `NULL` if an
* [error](@ref error_handling) occurred.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
- * @par History
- * Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup native
*/
@@ -162,11 +172,10 @@ GLFWAPI HWND glfwGetWin32Window(GLFWwindow* window);
* @return The `HGLRC` of the specified window, or `NULL` if an
* [error](@ref error_handling) occurred.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
- * @par History
- * Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup native
*/
@@ -179,11 +188,10 @@ GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow* window);
* @return The `CGDirectDisplayID` of the specified monitor, or
* `kCGNullDirectDisplay` if an [error](@ref error_handling) occurred.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
- * @par History
- * Added in GLFW 3.1.
+ * @since Added in version 3.1.
*
* @ingroup native
*/
@@ -194,11 +202,10 @@ GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* monitor);
* @return The `NSWindow` of the specified window, or `nil` if an
* [error](@ref error_handling) occurred.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
- * @par History
- * Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup native
*/
@@ -211,11 +218,10 @@ GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window);
* @return The `NSOpenGLContext` of the specified window, or `nil` if an
* [error](@ref error_handling) occurred.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
- * @par History
- * Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup native
*/
@@ -228,11 +234,10 @@ GLFWAPI id glfwGetNSGLContext(GLFWwindow* window);
* @return The `Display` used by GLFW, or `NULL` if an
* [error](@ref error_handling) occurred.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
- * @par History
- * Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup native
*/
@@ -243,11 +248,10 @@ GLFWAPI Display* glfwGetX11Display(void);
* @return The `RRCrtc` of the specified monitor, or `None` if an
* [error](@ref error_handling) occurred.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
- * @par History
- * Added in GLFW 3.1.
+ * @since Added in version 3.1.
*
* @ingroup native
*/
@@ -258,11 +262,10 @@ GLFWAPI RRCrtc glfwGetX11Adapter(GLFWmonitor* monitor);
* @return The `RROutput` of the specified monitor, or `None` if an
* [error](@ref error_handling) occurred.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
- * @par History
- * Added in GLFW 3.1.
+ * @since Added in version 3.1.
*
* @ingroup native
*/
@@ -273,11 +276,10 @@ GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* monitor);
* @return The `Window` of the specified window, or `None` if an
* [error](@ref error_handling) occurred.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
- * @par History
- * Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup native
*/
@@ -290,15 +292,116 @@ GLFWAPI Window glfwGetX11Window(GLFWwindow* window);
* @return The `GLXContext` of the specified window, or `NULL` if an
* [error](@ref error_handling) occurred.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
- * @par History
- * Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup native
*/
GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* window);
+
+/*! @brief Returns the `GLXWindow` of the specified window.
+ *
+ * @return The `GLXWindow` of the specified window, or `None` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup native
+ */
+GLFWAPI GLXWindow glfwGetGLXWindow(GLFWwindow* window);
+#endif
+
+#if defined(GLFW_EXPOSE_NATIVE_WAYLAND)
+/*! @brief Returns the `struct wl_display*` used by GLFW.
+ *
+ * @return The `struct wl_display*` used by GLFW, or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup native
+ */
+GLFWAPI struct wl_display* glfwGetWaylandDisplay(void);
+
+/*! @brief Returns the `struct wl_output*` of the specified monitor.
+ *
+ * @return The `struct wl_output*` of the specified monitor, or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup native
+ */
+GLFWAPI struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* monitor);
+
+/*! @brief Returns the main `struct wl_surface*` of the specified window.
+ *
+ * @return The main `struct wl_surface*` of the specified window, or `NULL` if
+ * an [error](@ref error_handling) occurred.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup native
+ */
+GLFWAPI struct wl_surface* glfwGetWaylandWindow(GLFWwindow* window);
+#endif
+
+#if defined(GLFW_EXPOSE_NATIVE_MIR)
+/*! @brief Returns the `MirConnection*` used by GLFW.
+ *
+ * @return The `MirConnection*` used by GLFW, or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup native
+ */
+GLFWAPI MirConnection* glfwGetMirDisplay(void);
+
+/*! @brief Returns the Mir output ID of the specified monitor.
+ *
+ * @return The Mir output ID of the specified monitor, or zero if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup native
+ */
+GLFWAPI int glfwGetMirMonitor(GLFWmonitor* monitor);
+
+/*! @brief Returns the `MirSurface*` of the specified window.
+ *
+ * @return The `MirSurface*` of the specified window, or `NULL` if an
+ * [error](@ref error_handling) occurred.
+ *
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
+ *
+ * @since Added in version 3.2.
+ *
+ * @ingroup native
+ */
+GLFWAPI MirSurface* glfwGetMirWindow(GLFWwindow* window);
#endif
#if defined(GLFW_EXPOSE_NATIVE_EGL)
@@ -307,11 +410,10 @@ GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* window);
* @return The `EGLDisplay` used by GLFW, or `EGL_NO_DISPLAY` if an
* [error](@ref error_handling) occurred.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
- * @par History
- * Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup native
*/
@@ -322,11 +424,10 @@ GLFWAPI EGLDisplay glfwGetEGLDisplay(void);
* @return The `EGLContext` of the specified window, or `EGL_NO_CONTEXT` if an
* [error](@ref error_handling) occurred.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
- * @par History
- * Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup native
*/
@@ -337,11 +438,10 @@ GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window);
* @return The `EGLSurface` of the specified window, or `EGL_NO_SURFACE` if an
* [error](@ref error_handling) occurred.
*
- * @par Thread Safety
- * This function may be called from any thread. Access is not synchronized.
+ * @thread_safety This function may be called from any thread. Access is not
+ * synchronized.
*
- * @par History
- * Added in GLFW 3.0.
+ * @since Added in version 3.0.
*
* @ingroup native
*/
diff --git a/extern/glfw-3.2.bin.WIN32/lib-mingw-w64/glfw3.dll b/extern/glfw-3.2.bin.WIN32/lib-mingw-w64/glfw3.dll
new file mode 100644
index 0000000..d1b9f3a
Binary files /dev/null and b/extern/glfw-3.2.bin.WIN32/lib-mingw-w64/glfw3.dll differ
diff --git a/extern/glfw-3.2.bin.WIN32/lib-mingw-w64/libglfw3.a b/extern/glfw-3.2.bin.WIN32/lib-mingw-w64/libglfw3.a
new file mode 100644
index 0000000..5aac479
Binary files /dev/null and b/extern/glfw-3.2.bin.WIN32/lib-mingw-w64/libglfw3.a differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-mingw/glfw3dll.a b/extern/glfw-3.2.bin.WIN32/lib-mingw-w64/libglfw3dll.a
similarity index 58%
rename from extern/glfw-3.1.2.bin.WIN32/lib-mingw/glfw3dll.a
rename to extern/glfw-3.2.bin.WIN32/lib-mingw-w64/libglfw3dll.a
index 1d69cf0..1f07e33 100644
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-mingw/glfw3dll.a and b/extern/glfw-3.2.bin.WIN32/lib-mingw-w64/libglfw3dll.a differ
diff --git a/extern/glfw-3.2.bin.WIN32/lib-mingw/glfw3.dll b/extern/glfw-3.2.bin.WIN32/lib-mingw/glfw3.dll
new file mode 100644
index 0000000..9f5d40f
Binary files /dev/null and b/extern/glfw-3.2.bin.WIN32/lib-mingw/glfw3.dll differ
diff --git a/extern/glfw-3.2.bin.WIN32/lib-mingw/libglfw3.a b/extern/glfw-3.2.bin.WIN32/lib-mingw/libglfw3.a
new file mode 100644
index 0000000..d50ffa7
Binary files /dev/null and b/extern/glfw-3.2.bin.WIN32/lib-mingw/libglfw3.a differ
diff --git a/extern/glfw-3.1.2.bin.WIN32/lib-mingw-w64/glfw3dll.a b/extern/glfw-3.2.bin.WIN32/lib-mingw/libglfw3dll.a
similarity index 58%
rename from extern/glfw-3.1.2.bin.WIN32/lib-mingw-w64/glfw3dll.a
rename to extern/glfw-3.2.bin.WIN32/lib-mingw/libglfw3dll.a
index d8c9993..a42a400 100644
Binary files a/extern/glfw-3.1.2.bin.WIN32/lib-mingw-w64/glfw3dll.a and b/extern/glfw-3.2.bin.WIN32/lib-mingw/libglfw3dll.a differ
diff --git a/extern/glfw-3.2.bin.WIN32/lib-vc2010/glfw3.dll b/extern/glfw-3.2.bin.WIN32/lib-vc2010/glfw3.dll
new file mode 100644
index 0000000..0b1e663
Binary files /dev/null and b/extern/glfw-3.2.bin.WIN32/lib-vc2010/glfw3.dll differ
diff --git a/extern/glfw-3.2.bin.WIN32/lib-vc2010/glfw3.lib b/extern/glfw-3.2.bin.WIN32/lib-vc2010/glfw3.lib
new file mode 100644
index 0000000..31ab841
Binary files /dev/null and b/extern/glfw-3.2.bin.WIN32/lib-vc2010/glfw3.lib differ
diff --git a/extern/glfw-3.2.bin.WIN32/lib-vc2010/glfw3dll.lib b/extern/glfw-3.2.bin.WIN32/lib-vc2010/glfw3dll.lib
new file mode 100644
index 0000000..46aa244
Binary files /dev/null and b/extern/glfw-3.2.bin.WIN32/lib-vc2010/glfw3dll.lib differ
diff --git a/extern/glfw-3.2.bin.WIN32/lib-vc2012/glfw3.dll b/extern/glfw-3.2.bin.WIN32/lib-vc2012/glfw3.dll
new file mode 100644
index 0000000..cea626d
Binary files /dev/null and b/extern/glfw-3.2.bin.WIN32/lib-vc2012/glfw3.dll differ
diff --git a/extern/glfw-3.2.bin.WIN32/lib-vc2012/glfw3.lib b/extern/glfw-3.2.bin.WIN32/lib-vc2012/glfw3.lib
new file mode 100644
index 0000000..5b079c2
Binary files /dev/null and b/extern/glfw-3.2.bin.WIN32/lib-vc2012/glfw3.lib differ
diff --git a/extern/glfw-3.2.bin.WIN32/lib-vc2012/glfw3dll.lib b/extern/glfw-3.2.bin.WIN32/lib-vc2012/glfw3dll.lib
new file mode 100644
index 0000000..3f19da4
Binary files /dev/null and b/extern/glfw-3.2.bin.WIN32/lib-vc2012/glfw3dll.lib differ
diff --git a/extern/glfw-3.2.bin.WIN32/lib-vc2013/glfw3.dll b/extern/glfw-3.2.bin.WIN32/lib-vc2013/glfw3.dll
new file mode 100644
index 0000000..a81bd05
Binary files /dev/null and b/extern/glfw-3.2.bin.WIN32/lib-vc2013/glfw3.dll differ
diff --git a/extern/glfw-3.2.bin.WIN32/lib-vc2013/glfw3.lib b/extern/glfw-3.2.bin.WIN32/lib-vc2013/glfw3.lib
new file mode 100644
index 0000000..86ec8b3
Binary files /dev/null and b/extern/glfw-3.2.bin.WIN32/lib-vc2013/glfw3.lib differ
diff --git a/extern/glfw-3.2.bin.WIN32/lib-vc2013/glfw3dll.lib b/extern/glfw-3.2.bin.WIN32/lib-vc2013/glfw3dll.lib
new file mode 100644
index 0000000..cbef963
Binary files /dev/null and b/extern/glfw-3.2.bin.WIN32/lib-vc2013/glfw3dll.lib differ
diff --git a/extern/glfw-3.2.bin.WIN32/lib-vc2015/glfw3.dll b/extern/glfw-3.2.bin.WIN32/lib-vc2015/glfw3.dll
new file mode 100644
index 0000000..3e2a7f3
Binary files /dev/null and b/extern/glfw-3.2.bin.WIN32/lib-vc2015/glfw3.dll differ
diff --git a/extern/glfw-3.2.bin.WIN32/lib-vc2015/glfw3.lib b/extern/glfw-3.2.bin.WIN32/lib-vc2015/glfw3.lib
new file mode 100644
index 0000000..bec8cfc
Binary files /dev/null and b/extern/glfw-3.2.bin.WIN32/lib-vc2015/glfw3.lib differ
diff --git a/extern/glfw-3.2.bin.WIN32/lib-vc2015/glfw3dll.lib b/extern/glfw-3.2.bin.WIN32/lib-vc2015/glfw3dll.lib
new file mode 100644
index 0000000..8e87d64
Binary files /dev/null and b/extern/glfw-3.2.bin.WIN32/lib-vc2015/glfw3dll.lib differ
diff --git a/src/build.bat b/src/build.bat
index 3cb7e2f..93f0ac8 100644
--- a/src/build.bat
+++ b/src/build.bat
@@ -4,7 +4,7 @@ IF NOT EXIST ..\bin mkdir ..\bin
pushd ..\bin
set GLEW=..\extern\glew-1.13.0
-set GLFW=..\extern\glfw-3.1.2.bin.WIN32
+set GLFW=..\extern\glfw-3.2.bin.WIN32
set STB=..\extern\stb-master
set GLM=..\extern\glm-0.9.7.5
diff --git a/src/dengine.cpp b/src/dengine.cpp
index 045d0c4..2fb6b80 100644
--- a/src/dengine.cpp
+++ b/src/dengine.cpp
@@ -14,6 +14,7 @@
#include
#include
#include
+#include
#include
void key_callback(GLFWwindow *window, int key, int scancode, int action, int mode)
@@ -49,7 +50,7 @@ int main()
glm::ivec2 windowSize = glm::ivec2(1280, 720);
- GLFWwindow *window = glfwCreateWindow(windowSize.x, windowSize.y, "Breakout", nullptr, nullptr);
+ GLFWwindow *window = glfwCreateWindow(windowSize.x, windowSize.y, "Dengine", nullptr, nullptr);
if (!window)
{
@@ -91,20 +92,23 @@ int main()
glfwSetWindowUserPointer(window, static_cast(&game));
- f32 deltaTime = 0.0f; // Time between current frame and last frame
- f32 lastFrame = 0.0f; // Time of last frame
+ f32 secondsElapsed = 0.0f; // Time between current frame and last frame
+
+ // TODO(doyle): Get actual monitor refresh rate
+ i32 monitorRefreshHz = 60;
+ f32 targetSecondsPerFrame = 1.0f / static_cast(monitorRefreshHz);
+ f32 startTime = static_cast(glfwGetTime());
+
+ //glfwSwapInterval(1);
/* Main game loop */
while (!glfwWindowShouldClose(window))
{
- f32 currentFrame = static_cast(glfwGetTime());
- deltaTime = currentFrame - lastFrame;
- lastFrame = currentFrame;
/* Check and call events */
glfwPollEvents();
- game.update(deltaTime);
+ game.update(secondsElapsed);
/* Rendering commands here*/
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
@@ -115,6 +119,31 @@ int main()
/* Swap the buffers */
glfwSwapBuffers(window);
+
+ f32 endTime = static_cast(glfwGetTime());
+ secondsElapsed = endTime - startTime;
+
+ // TODO(doyle): Busy waiting, should sleep
+ while (secondsElapsed < targetSecondsPerFrame)
+ {
+ endTime = static_cast(glfwGetTime());
+ secondsElapsed = endTime - startTime;
+ }
+
+ LOCAL_PERSIST f32 titleUpdateFrequencyInSeconds = 0.5f;
+
+ titleUpdateFrequencyInSeconds -= secondsElapsed;
+ if (titleUpdateFrequencyInSeconds <= 0)
+ {
+ f32 msPerFrame = secondsElapsed * 1000.0f;
+ f32 framesPerSecond = 1.0f / secondsElapsed;
+ std::stringstream ss;
+ ss << "Dengine | " << msPerFrame << " ms/f | " << framesPerSecond << " fps";
+ glfwSetWindowTitle(window, ss.str().c_str());
+ titleUpdateFrequencyInSeconds = 0.5f;
+ }
+
+ startTime = endTime;
}
glfwTerminate();
diff --git a/src/include/Dengine/Common.h b/src/include/Dengine/Common.h
index 88cde63..795c69d 100644
--- a/src/include/Dengine/Common.h
+++ b/src/include/Dengine/Common.h
@@ -5,11 +5,13 @@
typedef uint8_t u8;
typedef uint32_t u32;
+typedef uint64_t u64;
typedef int32_t i32;
typedef i32 b32;
typedef float f32;
+typedef double f64;
#define TRUE 1
#define FALSE 0