| /*! |
| |
| @page intro Introduction to the GLFW API |
| |
| @tableofcontents |
| |
| This guide will introduce the basic concepts of GLFW and describes |
| initialization, error handling and version management. There are other guides |
| for the various areas of the GLFW API. |
| |
| - @ref window |
| - @ref context |
| - @ref monitor |
| - @ref input |
| |
| |
| @section intro_init Initialization and termination |
| |
| Before most GLFW functions may be called, the library must be initialized. |
| This initialization checks what features are available on the machine, |
| enumerates monitors and joysticks, initializes the timer and performs any |
| required platform-specific initialization. |
| |
| Only the following functions may be called before the library has been |
| successfully initialized. |
| |
| - @ref glfwGetVersion |
| - @ref glfwGetVersionString |
| - @ref glfwSetErrorCallback |
| - @ref glfwInit |
| - @ref glfwTerminate |
| |
| Calling any other function before that time will cause a `GLFW_NOT_INITIALIZED` |
| error. |
| |
| |
| @subsection intro_init_init Initializing GLFW |
| |
| The library is initialized with @ref glfwInit, which returns `GL_FALSE` if an |
| error occurred. |
| |
| @code |
| if (!glfwInit()) |
| { |
| // Handle initialization failure |
| } |
| @endcode |
| |
| If any part of initialization fails, all remaining bits are terminated as if |
| @ref glfwTerminate was called. The library only needs to be initialized once |
| and additional calls to an already initialized library will simply return |
| `GL_TRUE` immediately. |
| |
| Once the library has been successfully initialized, it should be terminated |
| before the application exits. |
| |
| |
| @subsection intro_init_terminate Terminating GLFW |
| |
| Before your application exits, you should terminate the GLFW library if it has |
| been initialized. This is done with @ref glfwTerminate. |
| |
| @code |
| glfwTerminate(); |
| @endcode |
| |
| This will destroy any remaining window, monitor and cursor objects, restore any |
| modified gamma ramps, re-enable the screensaver if it had been disabled and free |
| any resources allocated by GLFW. |
| |
| Once the library is terminated, it is as if it had never been initialized and |
| you will need to initialize it again before being able to use GLFW. If the |
| library had not been successfully initialized or had already been terminated, |
| additional calls return immediately. |
| |
| |
| @section intro_error Error handling |
| |
| Some GLFW functions have return values that indicate an error, but this is often |
| not very helpful when trying to figure out *why* the error occurred. Also, far |
| from all GLFW functions have such return values. |
| |
| This is where the error callback comes in. This callback is called whenever an |
| error occurs. It is set with @ref glfwSetErrorCallback, a function that may be |
| called before @ref glfwInit and after @ref glfwTerminate. |
| |
| @code |
| glfwSetErrorCallback(error_callback); |
| @endcode |
| |
| The error callback receives a human-readable description of the error and (when |
| possible) its cause. The description is a regular C string using the UTF-8 |
| encoding. The callback is also provided with an [error code](@ref errors). |
| |
| @code |
| void error_callback(int error, const char* description) |
| { |
| puts(description); |
| } |
| @endcode |
| |
| The error code indicates the general category of the error. Some error codes, |
| such as `GLFW_NOT_INITIALIZED` has only a single meaning, whereas others like |
| `GLFW_PLATFORM_ERROR` are used for many different errors. |
| |
| @note The description string is only valid until the error callback returns, as |
| it may have been generated specifically for that error. This lets GLFW provide |
| much more specific error descriptions but means you must make a copy if you want |
| to keep the description string. |
| |
| |
| @section intro_version Version management |
| |
| GLFW provides mechanisms for identifying what version of GLFW your application |
| was compiled against as well as what version it is currently using. The GLFW |
| API is binary-compatible with later minor versions, i.e. an executable using the |
| 3.0 API will be able to use a version 3.2 DLL. |
| |
| As long as an executable does not use any newer functions, it can also use an |
| older minor version DLL, although any window hints or other tokens added since |
| that older version will cause errors to be reported. |
| |
| |
| @subsection intro_version_compile Compile-time version |
| |
| The compile-time version of GLFW is provided by the GLFW header with the |
| `GLFW_VERSION_MAJOR`, `GLFW_VERSION_MINOR` and `GLFW_VERSION_REVISION` macros. |
| |
| |
| @subsection intro_version_runtime Run-time version |
| |
| The run-time version can be retrieved with @ref glfwGetVersion, a function that |
| may be called before @ref glfwInit and after @ref glfwTerminate |
| |
| @code |
| int major, minor, revision; |
| glfwGetVersion(&major, &minor, &revision); |
| @endcode |
| |
| |
| @subsection intro_version_string Version string |
| |
| GLFW 3 also provides a compile-time generated version string that describes the |
| version, platform, compiler and any platform-specific compile-time options. |
| This is primarily intended for submitting bug reports, to allow developers to |
| see which code paths are enabled in a binary. |
| |
| The version string is returned by @ref glfwGetVersionString, a function that may |
| be called before @ref glfwInit and after @ref glfwTerminate. |
| |
| The format of the string is as follows: |
| - The version of GLFW |
| - The name of the window system API |
| - The name of the context creation API |
| - Any additional options or APIs |
| |
| For example, when compiling GLFW 3.0 with MinGW using the Win32 and WGL |
| back ends, the version string may look something like this: |
| |
| 3.0.0 Win32 WGL MinGW |
| |
| @note Do not parse the version string to find the GLFW library version. The |
| @ref glfwGetVersion function provides the version of the library binary in |
| numeric form. |
| |
| */ |