You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
166 lines
5.4 KiB
166 lines
5.4 KiB
/*! |
|
|
|
@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. |
|
|
|
*/
|
|
|