| /*! |
| |
| @page quick Getting started |
| |
| @section quick_start Introduction |
| |
| In this guide you will learn how to write simple OpenGL applications using |
| GLFW 3. We start by initializing GLFW, then we create a window and read some |
| user keyboard input. |
| |
| |
| @section quick_include Including the GLFW header |
| |
| The first thing you have to do when using GLFW is including the GLFW header. |
| |
| @code |
| #include <GL/glfw3.h> |
| @endcode |
| |
| This header defines all the constants, types and function prototypes of the |
| GLFW API. It also includes the OpenGL header provided by your development |
| environment and defines all the necessary constants and types for it to work on |
| that particular platform. |
| |
| Starting with version 3.0, the GLU header @c glu.h is no longer included by |
| default. If you wish to include it, define @c GLFW_INCLUDE_GLU before the |
| inclusion of the GLFW header. |
| |
| |
| @section quick_init_term Initializing and terminating GLFW |
| |
| Before you can use most GLFW functions, the library must be initialized. This |
| is done with @ref glfwInit, which returns non-zero if successful, or zero if an |
| error occurred. |
| |
| @code |
| if (!glfwInit()) |
| { |
| exit(EXIT_FAILURE); |
| } |
| @endcode |
| |
| When you are done using GLFW, typically at the very end of the program, you need |
| to call @ref glfwTerminate. |
| |
| @code |
| glfwTerminate(); |
| @endcode |
| |
| This destroys any remaining windows and releases any other resources allocated by |
| GLFW. After this call, you must call @ref glfwInit again before using any GLFW |
| functions that require it. |
| |
| |
| @section quick_create_window Creating a window and context |
| |
| The window (and its context) is created with @ref glfwCreateWindow, which |
| returns a handle to the created window. For example, this creates an 640 by 480 |
| pixels windowed mode window: |
| |
| @code |
| GLFWwindow* window = glfwCreateWindow(640, 480, "My Title", NULL, NULL); |
| @endcode |
| |
| If window creation fails, @c NULL will be returned, so you need to check whether |
| it did. |
| |
| @code |
| if (!window) |
| { |
| glfwTerminate(); |
| exit(EXIT_FAILURE); |
| } |
| @endcode |
| |
| This handle is then passed to all window related functions, and is provided to |
| you along with input events, so you know which window received the input. |
| |
| To create a fullscreen window, you need to specify which monitor the window |
| should use. In most cases, the user's primary monitor is a good choice. You |
| can get this with @ref glfwGetPrimaryMonitor. To make the above window |
| fullscreen, just pass along the monitor handle: |
| |
| @code |
| GLFWwindow* window = glfwCreateWindow(640, 480, "My Title", glfwGetPrimaryMonitor(), NULL); |
| @endcode |
| |
| Fullscreen windows cover the entire screen, have no border or decorations, and |
| change the monitor's resolution to the one most closely matching the requested |
| window size. |
| |
| When you are done with the window, destroy it with the @ref glfwDestroyWindow |
| function. |
| |
| @code |
| glfwDestroyWindow(window); |
| @endcode |
| |
| Once this function is called, no more events will be delivered for that window |
| and its handle becomes invalid. |
| |
| |
| @section quick_window_attribs Retrieving window attributes |
| |
| Each window provides a number of attributes that can be queried with @ref |
| glfwGetWindowParam. Some are related to the window itself and others to the |
| OpenGL context. For example, to find out if the user is attempting to close the |
| window, either by pressing the close widget in the title bar or using a key |
| combination like Alt+F4, check the @c GLFW_SHOULD_CLOSE attribute. |
| |
| @code |
| while (!glfwGetWindowParam(window, GLFW_SHOULD_CLOSE)) |
| { |
| // Keep running |
| } |
| @endcode |
| |
| |
| @section quick_swap_buffers Swapping buffers |
| |
| GLFW windows always use double-buffering. That means that you have two |
| rendering buffers; a front buffer and a back buffer. The front buffer is the |
| one being displayed and the back buffer the one you render to. |
| |
| When the entire frame has been rendered, it is time to swap the back and the |
| front buffers in order to display the rendered frame, and begin rendering a new |
| frame. This is done with @ref glfwSwapBuffers. |
| |
| @code |
| glfwSwapBuffers(window); |
| @endcode |
| |
| |
| @section quick_process_events Processing events |
| |
| GLFW needs to communicate regularly with the window system in order to receive |
| events, like the ones controlling the attribute @c GLFW_SHOULD_CLOSE mentioned |
| above. Event processing must be done regularly and is normally done each frame |
| before rendering but after buffer swap. |
| |
| There are two ways to process events. @ref glfwPollEvents processes only those |
| events that have already been received and then returns immediately. This is |
| the best choice when rendering continually, like most games do. |
| |
| @code |
| glfwPollEvents(); |
| @endcode |
| |
| If instead you only need to update your rendering once you have received new |
| input, @ref glfwWaitEvents is a better choice. It will wait until at least one |
| event has been received and then process all received events before returning. |
| |
| @code |
| glfwWaitEvents(); |
| @endcode |
| |
| |
| @section quick_example Putting it together: A minimal GLFW application |
| |
| Now that you know how to initialize GLFW, create a window and poll for |
| keyboard input, it's possible to create a simple program. |
| |
| @code |
| #include <GL/glfw3.h> |
| #include <stdlib.h> |
| |
| int main(void) |
| { |
| GLFWwindow* window; |
| |
| if (!glfwInit()) |
| { |
| exit(EXIT_FAILURE); |
| } |
| |
| window = glfwCreateWindow(640, 480, "My Window", NULL, NULL); |
| if (!window) |
| { |
| glfwTerminate(); |
| exit(EXIT_FAILURE); |
| } |
| |
| while (!glfwGetWindowParam(window, GLFW_SHOULD_CLOSE)) |
| { |
| glClear(GL_COLOR_BUFFER_BIT); |
| glfwSwapBuffers(window); |
| glfwPollEvents(); |
| } |
| |
| glfwDestroyWindow(window); |
| |
| glfwTerminate(); |
| exit(EXIT_SUCCESS); |
| } |
| @endcode |
| |
| This program creates a 640 by 480 pixels window and runs a loop clearing the |
| screen and processing events until the user closes the window. |
| |
| */ |