mirror of
https://github.com/gwm17/glfw.git
synced 2024-11-23 02:38:52 -05:00
2365 lines
84 KiB
TeX
2365 lines
84 KiB
TeX
%-------------------------------------------------------------------------
|
||
% GLFW Reference Manual
|
||
% API Version: 3.0
|
||
%-------------------------------------------------------------------------
|
||
|
||
% Document class
|
||
\documentclass[a4paper,11pt,oneside]{report}
|
||
|
||
% Document title and API version
|
||
\newcommand{\glfwdoctype}[1][0]{Reference Manual}
|
||
\newcommand{\glfwapiver}[1][0]{3.0}
|
||
|
||
% Common document settings and macros
|
||
\input{glfwdoc.sty}
|
||
|
||
% PDF specific document settings
|
||
\hypersetup{pdftitle={GLFW Reference Manual}}
|
||
\hypersetup{pdfauthor={Camilla Berglund}}
|
||
\hypersetup{pdfkeywords={GLFW,OpenGL,reference,manual}}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
% Document body
|
||
%-------------------------------------------------------------------------
|
||
|
||
\begin{document}
|
||
|
||
\pagestyle{plain}
|
||
|
||
% Title page
|
||
\glfwmaketitle
|
||
|
||
% Summary, trademarks and table of contents
|
||
\pagenumbering{roman}
|
||
\setcounter{page}{1}
|
||
|
||
%-------------------------------------------------------------------------
|
||
% Summary and Trademarks
|
||
%-------------------------------------------------------------------------
|
||
\chapter*{Summary}
|
||
|
||
This document is primarily a function reference manual for the \GLFW\ API.
|
||
For a description of how to use \GLFW\ you should refer to the
|
||
\textit{GLFW Users Guide}.
|
||
\vspace{5cm}
|
||
|
||
\large
|
||
Trademarks
|
||
|
||
\small
|
||
OpenGL and IRIX are registered trademarks of Silicon Graphics, Inc.\linebreak
|
||
Microsoft and Windows are registered trademarks of Microsoft Corporation.\linebreak
|
||
Mac OS is a registered trademark of Apple Computer, Inc.\linebreak
|
||
Linux is a registered trademark of Linus Torvalds.\linebreak
|
||
FreeBSD is a registered trademark of Wind River Systems, Inc.\linebreak
|
||
Solaris is a trademark of Sun Microsystems, Inc.\linebreak
|
||
UNIX is a registered trademark of The Open Group.\linebreak
|
||
X Window System is a trademark of The Open Group.\linebreak
|
||
POSIX is a trademark of IEEE.\linebreak
|
||
Truevision, TARGA and TGA are registered trademarks of Truevision, Inc.\linebreak
|
||
|
||
All other trademarks mentioned in this document are the property of their respective owners.
|
||
\normalsize
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
% Table of contents
|
||
%-------------------------------------------------------------------------
|
||
\tableofcontents
|
||
|
||
%-------------------------------------------------------------------------
|
||
% List of tables
|
||
%-------------------------------------------------------------------------
|
||
\listoftables
|
||
\pagebreak
|
||
|
||
|
||
% Document chapters starts here...
|
||
\pagenumbering{arabic}
|
||
\setcounter{page}{1}
|
||
|
||
\pagestyle{fancy}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
% Introduction
|
||
%-------------------------------------------------------------------------
|
||
\chapter{Introduction}
|
||
\thispagestyle{fancy}
|
||
|
||
\GLFW\ is a portable API (Application Program Interface) that handles
|
||
operating system specific tasks related to \OpenGL\ programming. While
|
||
\OpenGL\ in general is portable, easy to use and often results in tidy and
|
||
compact code, the operating system specific mechanisms that are required
|
||
to set up and manage an \OpenGL\ window are quite the opposite. \GLFW\ tries
|
||
to remedy this by providing the following functionality:
|
||
|
||
\begin{itemize}
|
||
\item Opening and managing an \OpenGL\ context and its associated window.
|
||
\item Keyboard, mouse and joystick input.
|
||
\item A high precision timer.
|
||
\item Support for querying and using \OpenGL\ extensions.
|
||
\end{itemize}
|
||
|
||
All this functionality is implemented as a set of easy-to-use functions,
|
||
which makes it possible to write an \OpenGL\ application framework in just a
|
||
few lines of code. The \GLFW\ API looks and behaves the same on all supported
|
||
platforms, making it very simple to port \GLFW\ based \OpenGL\ applications to
|
||
a variety of platforms.
|
||
|
||
Currently supported platforms are:
|
||
\begin{itemize}
|
||
\item Microsoft Windows\textsuperscript{\textregistered} (32-bit only).
|
||
\item Unix\textsuperscript{\textregistered} or Unix<69>-like systems running
|
||
resonably a modern version of the X Window
|
||
System\texttrademark\footnote{X11.app on Mac OS X is not supported due to its
|
||
incomplete implementation of GLXFBConfigs} e.g.
|
||
Linux\textsuperscript{\textregistered},
|
||
FreeBSD\textsuperscript{\textregistered} and Solaris\texttrademark (32- and
|
||
64-bit).
|
||
\item Mac OS\textsuperscript{\textregistered} X, using Cocoa\footnote{Joystick
|
||
input is not yet supported on Mac OS X.} (32- and 64-bit).
|
||
\end{itemize}
|
||
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
% GLFW Operation
|
||
%-------------------------------------------------------------------------
|
||
\chapter{GLFW Operation Overview}
|
||
\thispagestyle{fancy}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\section{The GLFW Window}
|
||
\GLFW\ only supports having one window open at a time. The window can be either
|
||
a normal desktop window or a fullscreen window. The latter is completely
|
||
undecorated, without window borders, and covers the entire monitor. With a
|
||
fullscreen window, it is also possible to select which video mode to use.
|
||
|
||
When a window is opened, an \OpenGL\ rendering context is created and
|
||
attached to the entire client area of the window. When the window is closed,
|
||
the \OpenGL\ rendering context is detached and destroyed.
|
||
|
||
Through a window it is possible to receive user input in the form of
|
||
keyboard and mouse input. User input is exposed through the \GLFW\ API
|
||
primarily via a set of callback functions. Also, \GLFW\ stores most user input
|
||
as internal state that can be queried through different \GLFW\ API functions
|
||
(for instance it is possible to query the position of the mouse cursor with the
|
||
\textbf{glfwGetMousePos} function).
|
||
|
||
As for user input, it is possible to receive information about window
|
||
state changes, such as window resize or close events, through callback
|
||
functions. It is also possible to query some kinds of information about the
|
||
window information using \GLFW\ API functions.
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\section{The GLFW Event Loop}
|
||
The \GLFW\ event loop is an open loop, which means that it is up to the
|
||
programmer to design the loop. Events are processed by calling specific
|
||
\GLFW\ functions, which in turn query the system for new input and window
|
||
events and reports these events back to the program through callback
|
||
functions.
|
||
|
||
The programmer decides when to call the event processing functions and
|
||
when to abort the event loop.
|
||
|
||
In pseudo language, a typical event loop might look like this:
|
||
|
||
\begin{lstlisting}
|
||
repeat until window is closed
|
||
{
|
||
poll events
|
||
draw OpenGL graphics
|
||
}
|
||
\end{lstlisting}
|
||
|
||
There are two ways to handle events in \GLFW :
|
||
|
||
\begin{itemize}
|
||
\item Block the event loop while waiting for new events.
|
||
\item Poll for new events and continue the loop regardless of whether there
|
||
are any new events or not.
|
||
\end{itemize}
|
||
|
||
The first method is useful for interactive applications that do not
|
||
need to refresh the \OpenGL\ display unless the user interacts with the
|
||
application through user input. Typical applications are CAD software
|
||
and other kinds of editors.
|
||
|
||
The second method is useful for applications that need to refresh the
|
||
\OpenGL\ display constantly, regardless of user input, such as games,
|
||
demos, 3D animations, screen savers and so on.
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\section{Callback Functions}
|
||
Using callback functions can be a good method for receiving up to date
|
||
information about window state and user input. When a window has been
|
||
opened, it is possible to register custom callback functions that will
|
||
be called when certain events occur.
|
||
|
||
Callback functions are called from any of the event polling functions
|
||
\textbf{glfwPollEvents}, \textbf{glfwWaitEvents} or
|
||
\textbf{glfwSwapBuffers}.
|
||
|
||
Callback functions should \emph{only} be used to gather information. Since
|
||
the callback functions are called from within the internal \GLFW\ event
|
||
polling loops, they should not call any \GLFW\ functions that might
|
||
result in considerable \GLFW\ state changes, nor stall the event polling
|
||
loop for a lengthy period of time.
|
||
|
||
In other words, most or all \OpenGL\ rendering should be called from the
|
||
main application event loop, not from any of the \GLFW\ callback
|
||
functions. Also, the only \GLFW\ functions that may be safely called from
|
||
callback functions are the different Get functions (e.g.
|
||
\textbf{glfwGetKey}, \textbf{glfwGetTime}, \textbf{glfwGetWindowParam}
|
||
etc.).
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
% Function Reference
|
||
%-------------------------------------------------------------------------
|
||
\chapter{Function Reference}
|
||
\thispagestyle{fancy}
|
||
|
||
%-------------------------------------------------------------------------
|
||
\section{GLFW Initialization and Termination}
|
||
Before any other \GLFW\ functions can be used, \GLFW\ must be initialized to
|
||
ensure proper functionality, and before a program terminates \GLFW\ should be
|
||
terminated in order to free allocated resources, memory, etc.
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwInit}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
int glfwInit(void)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
none
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
If the function succeeds, GL\_TRUE is returned.\\
|
||
If the function fails, GL\_FALSE is returned.
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
The glfwInit function initializes \GLFW. No other \GLFW\ functions may be
|
||
called before this function has succeeded.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
This function may take several seconds to complete on some systems, while
|
||
on other systems it may take only a fraction of a second to complete.
|
||
|
||
This function registers a function calling \textbf{glfwTerminate} with the
|
||
atexit facility of the C library.
|
||
|
||
On Mac OS X, this function will change the current directory of the application
|
||
to the \textbf{Contents/Resources} subdirectory of the application's bundle, if
|
||
present. For more information on bundles, see the Bundle Programming Guide
|
||
provided by Apple.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwTerminate}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwTerminate(void)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
none
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function terminates \GLFW. Among other things it closes the window, if
|
||
open. This function should be called before a program exits.
|
||
\end{refdescription}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwGetVersion}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwGetVersion(int* major, int* minor, int* rev)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{major}]\ \\
|
||
Pointer to an integer that will hold the major version number.
|
||
\item [\textit{minor}]\ \\
|
||
Pointer to an integer that will hold the minor version number.
|
||
\item [\textit{rev}]\ \\
|
||
Pointer to an integer that will hold the revision.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
The function returns the major and minor version numbers and the revision
|
||
for the currently linked \GLFW\ library.
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function returns the \GLFW\ library version.
|
||
\end{refdescription}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\pagebreak
|
||
\section{Window Handling}
|
||
The primary purpose of \GLFW\ is to provide a simple interface to
|
||
\OpenGL\ context creation and window management. \GLFW\ supports one window at
|
||
a time, which can be either a normal desktop window or a fullscreen window.
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwOpenWindow}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
int glfwOpenWindow(int width, int height,
|
||
int redbits, int greenbits, int bluebits,
|
||
int alphabits, int depthbits, int stencilbits,
|
||
int mode)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{width}]\ \\
|
||
The width of the window. If \textit{width} is zero, it will be
|
||
calculated as ${width=\frac{4}{3}height}$, if \textit{height} is not
|
||
zero. If both \textit{width} and \textit{height} are zero,
|
||
\textit{width} will be set to 640.
|
||
\item [\textit{height}]\ \\
|
||
The height of the window. If \textit{height} is zero, it will be
|
||
calculated as ${height=\frac{3}{4}width}$, if \textit{width} is not
|
||
zero. If both \textit{width} and \textit{height} are zero,
|
||
\textit{height} will be set to 480.
|
||
\item [\textit{redbits, greenbits, bluebits}]\ \\
|
||
The number of bits to use for each color component of the color buffer
|
||
(0 means default color depth). For instance, setting \textit{redbits=5,
|
||
greenbits=6 and bluebits=5} will create a 16-<2D>bit color buffer, if
|
||
possible.
|
||
\item [\textit{alphabits}]\ \\
|
||
The number of bits to use for the alpha channel of the color buffer (0 means
|
||
no alpha channel).
|
||
\item [\textit{depthbits}]\ \\
|
||
The number of bits to use for the depth buffer (0 means no depth
|
||
buffer).
|
||
\item [\textit{stencilbits}]\ \\
|
||
The number of bits to use for the stencil buffer (0 means no stencil
|
||
buffer).
|
||
\item [\textit{mode}]\ \\
|
||
Selects which type of \OpenGL\ window to use. \textit{mode} must be
|
||
either GLFW\_WINDOW, which will generate a normal desktop window, or
|
||
GLFW\_FULLSCREEN, which will generate a window which covers the entire
|
||
screen. When GLFW\_FULLSCREEN is selected, the video mode will be
|
||
changed to the resolution that closest matches the \textit{width} and
|
||
\textit{height} parameters.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
If the function succeeds, GL\_TRUE is returned.\\
|
||
If the function fails, GL\_FALSE is returned.
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function opens a window that best matches the parameters given to the
|
||
function. How well the resulting window matches the desired window depends
|
||
mostly on the available hardware and \OpenGL\ drivers. In general,
|
||
selecting a fullscreen mode has better chances of generating a close match
|
||
of buffers and channel sizes than does a normal desktop window, since \GLFW\
|
||
can freely select from all the available video modes. A desktop window is
|
||
normally restricted to the video mode of the desktop.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
For additional control of window properties, see
|
||
\textbf{glfwOpenWindowHint}.
|
||
|
||
In fullscreen mode the mouse cursor is hidden by default and the
|
||
screensaver is prohibited from starting. In windowed mode the mouse
|
||
cursor is visible and screensavers are allowed to start. To change the
|
||
visibility of the mouse cursor, use \textbf{glfwEnable} or
|
||
\textbf{glfwDisable} with the argument GLFW\_MOUSE\_CURSOR.
|
||
|
||
In order to determine the actual properties of an opened window, use
|
||
\textbf{glfwGetWindowParam} and \textbf{glfwGetWindowSize} (or
|
||
\textbf{glfwSetWindowSizeCallback}).
|
||
|
||
On Microsoft Windows, if the executable has an icon resource named
|
||
\textbf{GLFW\_ICON}, it will be set as the icon for the window. If no such
|
||
icon is present, the \textbf{IDI\_WINLOGO} icon will be used instead.
|
||
|
||
On Mac OS X the \GLFW\ window has no icon, but programs using \GLFW\ will use
|
||
the application bundle's icon. For more information on bundles, see the Bundle
|
||
Programming Guide provided by Apple.
|
||
|
||
For information on how the availability of different platform-specific
|
||
extensions affect the behavior of this function, see appendix
|
||
\ref{chap:compatibility}.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\begin{table}[p]
|
||
\begin{center}
|
||
\begin{tabular}{|l|l|p{7.0cm}|} \hline \raggedright
|
||
\textbf{Name} & \textbf{Default} & \textbf{Description} \\ \hline
|
||
GLFW\_REFRESH\_RATE & 0 & Vertical monitor refresh rate in Hz (only used for fullscreen windows). Zero means system default.\\ \hline
|
||
GLFW\_ACCUM\_RED\_BITS & 0 & Number of bits for the red channel of the accumulation buffer.\\ \hline
|
||
GLFW\_ACCUM\_GREEN\_BITS & 0 & Number of bits for the green channel of the accumulation buffer.\\ \hline
|
||
GLFW\_ACCUM\_BLUE\_BITS & 0 & Number of bits for the blue channel of the accumulation buffer.\\ \hline
|
||
GLFW\_ACCUM\_ALPHA\_BITS & 0 & Number of bits for the alpha channel of the accumulation buffer.\\ \hline
|
||
GLFW\_AUX\_BUFFERS & 0 & Number of auxiliary buffers.\\ \hline
|
||
GLFW\_STEREO & GL\_FALSE & Specify if stereo rendering should be supported (can be GL\_TRUE or GL\_FALSE).\\ \hline
|
||
GLFW\_WINDOW\_NO\_RESIZE & GL\_FALSE & Specify whether the window can be resized by the user (not used for fullscreen windows).\\ \hline
|
||
GLFW\_FSAA\_SAMPLES & 0 & Number of samples to use for the multisampling buffer. Zero disables multisampling.\\ \hline
|
||
GLFW\_OPENGL\_VERSION\_MAJOR & 1 & Major number of the desired minimum \OpenGL\ version.\\ \hline
|
||
GLFW\_OPENGL\_VERSION\_MINOR & 1 & Minor number of the desired minimum \OpenGL\ version.\\ \hline
|
||
GLFW\_OPENGL\_FORWARD\_COMPAT & GL\_FALSE & Specify whether the \OpenGL\ context should be forward-compatible (i.e. disallow legacy functionality).
|
||
This should only be used when requesting \OpenGL\ version 3.0 or above.\\ \hline
|
||
GLFW\_OPENGL\_DEBUG\_CONTEXT & GL\_FALSE & Specify whether a debug context should be created.\\ \hline
|
||
GLFW\_OPENGL\_PROFILE & 0 & The \OpenGL\ profile the context should implement, or zero to let the system choose.
|
||
Available profiles are GLFW\_OPENGL\_CORE\_PROFILE and GLFW\_OPENGL\_COMPAT\_PROFILE.\\ \hline
|
||
\end{tabular}
|
||
\end{center}
|
||
\caption{Targets for \textbf{glfwOpenWindowHint}}
|
||
\label{tab:winhints}
|
||
\end{table}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwOpenWindowHint}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwOpenWindowHint(int target, int hint)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{target}]\ \\
|
||
Can be any of the tokens in the table \ref{tab:winhints}.
|
||
\item [\textit{hint}]\ \\
|
||
An integer giving the value of the corresponding token (see table
|
||
\ref{tab:winhints}).
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function sets additional properties for a window that is to be opened.
|
||
For a hint to be registered, the function must be called before calling
|
||
\textbf{glfwOpenWindow}. When the \textbf{glfwOpenWindow} function is
|
||
called, any hints that were registered with the \textbf{glfwOpenWindowHint}
|
||
function are used for setting the corresponding window properties, and
|
||
then all hints are reset to their default values.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
In order to determine the actual properties of an opened window, use
|
||
\textbf{glfwGetWindowParam} (after the window has been opened).
|
||
|
||
GLFW\_STEREO is a hard constraint. If stereo rendering is requested, but no
|
||
stereo rendering capable pixel formats / framebuffer configs are available,
|
||
\textbf{glfwOpenWindow} will fail.
|
||
|
||
The GLFW\_REFRESH\_RATE hint should be used with caution. Most
|
||
systems have default values for monitor refresh rates that are optimal
|
||
for the specific system. Specifying the refresh rate can override these
|
||
settings, which can result in suboptimal operation. The monitor may be
|
||
unable to display the resulting video signal, or in the worst case it may
|
||
even be damaged!
|
||
|
||
The GLFW\_WINDOW\_NO\_RESIZE hint applies only to manual resizing by the user.
|
||
A window created with this hint enabled can still be resized by the application
|
||
by calling \textbf{glfwSetWindowSize}.
|
||
|
||
The GLFW\_OPENGL\_VERSION\_MAJOR and GLFW\_OPENGL\_VERSION\_MINOR hints specify
|
||
the \OpenGL\ version that the created context must be compatible with,
|
||
\emph{not} the exact version to use. It is therefore perfectly safe to use the
|
||
default of version 1.1 for legacy code and you will still get
|
||
backwards-compatible contexts of version 3.0 and above when available.
|
||
|
||
To make the behavior of the above version hints consistent across both modern
|
||
and legacy drivers, \textbf{glfwOpenWindow} will fail if the modern creation
|
||
mechanism (as specified in \textbf{WGL\_ARB\_create\_context}
|
||
and \textbf{GLX\_ARB\_create\_context}) is unavailable \emph{and} the created
|
||
context is of a version lower than the one that was requested.
|
||
|
||
At the time of release, the exact meaning of what a "debug context" is (as
|
||
created using the GLFW\_OPENGL\_DEBUG\_CONTEXT hint) has yet to be defined by
|
||
the Khronos ARB WG.
|
||
|
||
For information on how the availability of different extensions affect the
|
||
behavior of this function, see appendix \ref{chap:compatibility}.
|
||
|
||
For full details on the workings of the \OpenGL\ version, forward-compatibility
|
||
and debug hints, see the specifications for \textbf{WGL\_ARB\_create\_context}
|
||
and \textbf{GLX\_ARB\_create\_context}, respectively. The relevant \GLFW\
|
||
hints map very closely to their platform-specific counterparts.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwCloseWindow}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwCloseWindow(void)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
none
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function closes an opened window and destroys the associated \OpenGL\
|
||
context.
|
||
\end{refdescription}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwSetWindowCloseCallback}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwSetWindowCloseCallback(GLFWwindowclosefun cbfun)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{cbfun}]\ \\
|
||
Pointer to a callback function that will be called when a user requests
|
||
that the window should be closed, typically by clicking the window close
|
||
icon (e.g. the cross in the upper right corner of a window under
|
||
Microsoft Windows), and on Mac OS X also when selecting \textbf{Quit} from
|
||
the application menu. The function should have the following C language
|
||
prototype:
|
||
|
||
\texttt{int functionname(void);}
|
||
|
||
Where \textit{functionname} is the name of the callback function. The
|
||
return value of the callback function indicates wether or not the window
|
||
close action should continue. If the function returns GL\_TRUE, the
|
||
window will be closed. If the function returns GL\_FALSE, the window
|
||
will not be closed.
|
||
|
||
If \textit{cbfun} is NULL, any previously set callback function
|
||
will be unset.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function sets the callback for window close events.
|
||
|
||
A window has to be opened for this function to have any effect.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
Window close events are recorded continuously, but only reported when
|
||
\textbf{glfwPollEvents}, \textbf{glfwWaitEvents} or \textbf{glfwSwapBuffers}
|
||
(with GLFW\_AUTO\_POLL\_EVENTS enabled) is called.
|
||
|
||
The \OpenGL\ context is still valid when this function is called.
|
||
|
||
Note that the window close callback function is not called when
|
||
\textbf{glfwCloseWindow} is called, but only when the close request
|
||
comes from the window manager.
|
||
|
||
Do \emph{not} call \textbf{glfwCloseWindow} from a window close
|
||
callback function. Close the window by returning GL\_TRUE from the
|
||
function.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwSetWindowTitle}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwSetWindowTitle(const char* title)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{title}]\ \\
|
||
Pointer to a null terminated ISO~8859-1 (8-bit Latin~1) string that
|
||
holds the title of the window.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function changes the title of the opened window.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
The title property of a window is often used in situations other than for
|
||
the window title, such as the title of an application icon when it is in
|
||
iconified state.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwSetWindowSize}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwSetWindowSize(int width, int height)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{width}]\ \\
|
||
Width of the window.
|
||
\item [\textit{height}]\ \\
|
||
Height of the window.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function changes the size of an opened window. The \textit{width} and
|
||
\textit{height} parameters denote the size of the client area of the
|
||
window (i.e. excluding any window borders and decorations).
|
||
|
||
If the window is in fullscreen mode, the video mode will be changed to a
|
||
resolution that closest matches the width and height parameters (the
|
||
number of color bits will not be changed).
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
This function has no effect if the window is iconified.
|
||
|
||
The \OpenGL\ context is guaranteed to be preserved after calling
|
||
\textbf{glfwSetWindowSize}, even if the video mode is changed.
|
||
|
||
This function is not affected by the value of the GLFW\_WINDOW\_NO\_RESIZE
|
||
hint.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwSetWindowPos}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwSetWindowPos(int x, int y)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{x}]\ \\
|
||
Horizontal position of the window, relative to the upper left corner
|
||
of the desktop.
|
||
\item [\textit{y}]\ \\
|
||
Vertical position of the window, relative to the upper left corner of
|
||
the desktop.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function changes the position of an opened window. It does not have
|
||
any effect on a fullscreen window.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
This function has no effect if the window is iconified.
|
||
|
||
The behaviour of this function on multi-monitor systems is ill-defined.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwGetWindowSize}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwGetWindowSize(int* width, int* height)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{width}]\ \\
|
||
Pointer to an integer that will hold the width of the window.
|
||
\item [\textit{height}]\ \\
|
||
Pointer to an integer that will hold the height of the window.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
The current width and height of the opened window is returned in the
|
||
\textit{width} and \textit{height} parameters, respectively.
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function is used for determining the size of an opened window.
|
||
The returned values are dimensions of the client area of the window
|
||
(i.e. excluding any window borders and decorations).
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
Even if the size of a fullscreen window does not change once the window
|
||
has been opened, it does not necessarily have to be the same as the size
|
||
that was requested using \textbf{glfwOpenWindow}. Therefor it is wise to
|
||
use this function to determine the true size of the window once it has
|
||
been opened.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwSetWindowSizeCallback}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwSetWindowSizeCallback(GLFWwindowsizefun cbfun)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{cbfun}]\ \\
|
||
Pointer to a callback function that will be called every time the
|
||
window size changes. The function should have the following C language
|
||
prototype:
|
||
|
||
\texttt{void functionname(int width, int height);}
|
||
|
||
Where \textit{functionname} is the name of the callback function, and
|
||
\textit{width} and \textit{height} are the dimensions of the window
|
||
client area.
|
||
|
||
If \textit{cbfun} is NULL, any previously set callback function
|
||
will be unset.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function sets the callback for window size change events.
|
||
|
||
A window has to be opened for this function to have any effect.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
Window size changes are recorded continuously, but only reported when
|
||
\textbf{glfwPollEvents}, \textbf{glfwWaitEvents} or \textbf{glfwSwapBuffers}
|
||
(with GLFW\_AUTO\_POLL\_EVENTS enabled) is called.
|
||
|
||
When a callback function is set, it will be called with the current window
|
||
size before this function returns.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwIconifyWindow}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwIconifyWindow(void)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
none
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
Iconify a window. If the window is in fullscreen mode, then the desktop
|
||
video mode will be restored.
|
||
\end{refdescription}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwRestoreWindow}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwRestoreWindow(void)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
none
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
Restore an iconified window. If the window that is restored is in
|
||
fullscreen mode, then the fullscreen video mode will be restored.
|
||
\end{refdescription}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\begin{table}[p]
|
||
\begin{center}
|
||
\begin{tabular}{|l|p{9.5cm}|} \hline \raggedright
|
||
\textbf{Name} & \textbf{Description} \\ \hline
|
||
GLFW\_OPENED & GL\_TRUE if window is opened, else GL\_FALSE.\\ \hline
|
||
GLFW\_ACTIVE & GL\_TRUE if window has focus, else GL\_FALSE.\\ \hline
|
||
GLFW\_ICONIFIED & GL\_TRUE if window is iconified, else GL\_FALSE.\\ \hline
|
||
GLFW\_ACCELERATED & GL\_TRUE if window is hardware accelerated, else GL\_FALSE.\\ \hline
|
||
GLFW\_RED\_BITS & Number of bits for the red color component.\\ \hline
|
||
GLFW\_GREEN\_BITS & Number of bits for the green color component.\\ \hline
|
||
GLFW\_BLUE\_BITS & Number of bits for the blue color component.\\ \hline
|
||
GLFW\_ALPHA\_BITS & Number of bits for the alpha buffer.\\ \hline
|
||
GLFW\_DEPTH\_BITS & Number of bits for the depth buffer.\\ \hline
|
||
GLFW\_STENCIL\_BITS & Number of bits for the stencil buffer.\\ \hline
|
||
GLFW\_REFRESH\_RATE & Vertical monitor refresh rate in Hz. Zero indicates an unknown or a default refresh rate.\\ \hline
|
||
GLFW\_ACCUM\_RED\_BITS & Number of bits for the red channel of the accumulation buffer.\\ \hline
|
||
GLFW\_ACCUM\_GREEN\_BITS & Number of bits for the green channel of the accumulation buffer.\\ \hline
|
||
GLFW\_ACCUM\_BLUE\_BITS & Number of bits for the blue channel of the accumulation buffer.\\ \hline
|
||
GLFW\_ACCUM\_ALPHA\_BITS & Number of bits for the alpha channel of the accumulation buffer.\\ \hline
|
||
GLFW\_AUX\_BUFFERS & Number of auxiliary buffers.\\ \hline
|
||
GLFW\_STEREO & GL\_TRUE if stereo rendering is supported, else GL\_FALSE.\\ \hline
|
||
GLFW\_WINDOW\_NO\_RESIZE & GL\_TRUE if the window cannot be resized by the user, else GL\_FALSE.\\ \hline
|
||
GLFW\_FSAA\_SAMPLES & Number of multisampling buffer samples. Zero indicated multisampling is disabled.\\ \hline
|
||
GLFW\_OPENGL\_VERSION\_MAJOR & Major number of the actual version of the context.\\ \hline
|
||
GLFW\_OPENGL\_VERSION\_MINOR & Minor number of the actual version of the context.\\ \hline
|
||
GLFW\_OPENGL\_FORWARD\_COMPAT & GL\_TRUE if the context is forward-compatible, else GL\_FALSE.\\ \hline
|
||
GLFW\_OPENGL\_DEBUG\_CONTEXT & GL\_TRUE if the context is a debug context.\\ \hline
|
||
GLFW\_OPENGL\_PROFILE & The profile implemented by the context, or zero.\\ \hline
|
||
\end{tabular}
|
||
\end{center}
|
||
\caption{Window parameters for \textbf{glfwGetWindowParam}}
|
||
\label{tab:winparams}
|
||
\end{table}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwGetWindowParam}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
int glfwGetWindowParam(int param)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{param}]\ \\
|
||
A token selecting which parameter the function should return (see
|
||
table \ref{tab:winparams}).
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
The function returns the value the window parameter corresponding to the token
|
||
\textit{param}. Table \ref{tab:winparams} lists the available tokens.
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function is used for acquiring various properties of an opened window.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
GLFW\_ACCELERATED is only supported under Windows. Other systems will
|
||
always return GL\_TRUE. Under Windows, GLFW\_ACCELERATED means that the
|
||
\OpenGL\ renderer is a 3rd party renderer, rather than the fallback
|
||
Microsoft software \OpenGL\ renderer. In other words, it is not a real
|
||
guarantee that the \OpenGL\ renderer is actually hardware accelerated.
|
||
|
||
GLFW\_OPENGL\_VERSION\_MAJOR and GLFW\_OPENGL\_VERSION\_MINOR always return the
|
||
same values as those returned by \textbf{glfwGetGLVersion}.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwSwapBuffers}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwSwapBuffers(void)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
none
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function swaps the back and front color buffers of the window. If
|
||
GLFW\_AUTO\_POLL\_EVENTS is enabled (which is the default),
|
||
\textbf{glfwPollEvents} is called after swapping the front and back
|
||
buffers.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
In previous versions of \GLFW , \textbf{glfwPollEvents} was called
|
||
\emph{before} buffer swap. This was changed in order to decrease input
|
||
lag but may affect code that relied on the former behavior.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwSwapInterval}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwSwapInterval(int interval)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{interval}]\ \\
|
||
Minimum number of monitor vertical retraces between each buffer swap
|
||
performed by \textbf{glfwSwapBuffers}. If \textit{interval} is zero,
|
||
buffer swaps will not be synchronized to the vertical refresh of the
|
||
monitor (also known as 'VSync off').
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function selects the minimum number of monitor vertical retraces that
|
||
should occur between two buffer swaps. If the selected swap interval is
|
||
one, the rate of buffer swaps will never be higher than the vertical
|
||
refresh rate of the monitor. If the selected swap interval is zero, the
|
||
rate of buffer swaps is only limited by the speed of the software and
|
||
the hardware.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
This function will only have an effect on hardware and drivers that support
|
||
user selection of the swap interval. ATI drivers in particular have been known
|
||
to ignore this setting.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwSetWindowRefreshCallback}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwSetWindowRefreshCallback(GLFWwindowrefreshfun cbfun)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{cbfun}]\ \\
|
||
Pointer to a callback function that will be called when the window client
|
||
area needs to be refreshed. The function should have the following C
|
||
language prototype:
|
||
|
||
\texttt{void functionname(void);}
|
||
|
||
Where \textit{functionname} is the name of the callback function.
|
||
|
||
If \textit{cbfun} is NULL, any previously set callback function
|
||
will be unset.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function sets the callback for window refresh events, which occurs when
|
||
any part of the window client area has been damaged, and needs to be repainted
|
||
(for instance, if a part of the window that was previously occluded by another
|
||
window has become visible).
|
||
|
||
A window has to be opened for this function to have any effect.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
Window refresh events are recorded continuously, but only reported when
|
||
\textbf{glfwPollEvents}, \textbf{glfwWaitEvents} or \textbf{glfwSwapBuffers}
|
||
(with GLFW\_AUTO\_POLL\_EVENTS enabled) is called.
|
||
|
||
Modern windowing systems using hardware compositing, such as Aqua, Aero and
|
||
Compiz, very rarely need to refresh the contents of windows, so the specified
|
||
callback will very rarely be called on such systems.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\pagebreak
|
||
\section{Video Modes}
|
||
Since \GLFW\ supports video mode changes when using a fullscreen window,
|
||
it also provides functionality for querying which video modes are
|
||
supported on a system.
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwGetVideoModes}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
int glfwGetVideoModes(GLFWvidmode* list, int maxcount)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{list}]\ \\
|
||
A vector of \textit{GLFWvidmode} structures, which will be filled out
|
||
by the function.
|
||
\item [\textit{maxcount}]\ \\
|
||
Maximum number of video modes that \textit{list} vector can hold.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
The function returns the number of detected video modes (this number
|
||
will never exceed \textit{maxcount}). The \textit{list} vector is
|
||
filled out with the video modes that are supported by the system.
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function returns a list of supported video modes. Each video mode is
|
||
represented by a \textit{GLFWvidmode} structure, which has the following
|
||
definition:
|
||
|
||
\begin{lstlisting}
|
||
typedef struct {
|
||
int Width, Height; // Video resolution
|
||
int RedBits; // Number of red bits
|
||
int GreenBits; // Number of green bits
|
||
int BlueBits; // Number of blue bits
|
||
} GLFWvidmode;
|
||
\end{lstlisting}
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
The returned list is sorted, first by color depth ($RedBits + GreenBits +
|
||
BlueBits$), and then by resolution ($Width \times Height$), with the
|
||
lowest resolution, fewest bits per pixel mode first.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwGetDesktopMode}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwGetDesktopMode(GLFWvidmode* mode)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{mode}]\ \\
|
||
Pointer to a \textit{GLFWvidmode} structure, which will be filled out
|
||
by the function.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
The \textit{GLFWvidmode} structure pointed to by \textit{mode} is filled
|
||
out with the desktop video mode.
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function returns the desktop video mode in a \textit{GLFWvidmode}
|
||
structure. See \textbf{glfwGetVideoModes} for a definition of the
|
||
\textit{GLFWvidmode} structure.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
The color depth of the desktop display is always reported as the number
|
||
of bits for each individual color component (red, green and blue), even
|
||
if the desktop is not using an RGB or RGBA color format. For instance, an
|
||
indexed 256 color display may report \textit{RedBits} = 3,
|
||
\textit{GreenBits} = 3 and \textit{BlueBits} = 2, which adds up to 8 bits
|
||
in total.
|
||
|
||
The desktop video mode is the video mode used by the desktop at the time
|
||
the \GLFW\ window was opened, \textit{not} the current video mode (which
|
||
may differ from the desktop video mode if the \GLFW\ window is a
|
||
fullscreen window).
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\pagebreak
|
||
\section{Input Handling}
|
||
\GLFW\ supports three channels of user input: keyboard input, mouse input
|
||
and joystick input.
|
||
|
||
Keyboard and mouse input can be treated either as events, using callback
|
||
functions, or as state, using functions for polling specific keyboard and
|
||
mouse states. Regardless of which method is used, all keyboard and mouse
|
||
input is collected using window event polling.
|
||
|
||
Joystick input is asynchronous to the keyboard and mouse input, and does
|
||
not require event polling for keeping up to date joystick information.
|
||
Also, joystick input is independent of any window, so a window does not
|
||
have to be opened for joystick input to be used.
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwPollEvents}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwPollEvents(void)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
none
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function is used for polling for events, such as user input and
|
||
window resize events. Upon calling this function, all window states,
|
||
keyboard states and mouse states are updated. If any related callback
|
||
functions are registered, these are called during the call to
|
||
\textbf{glfwPollEvents}.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
\textbf{glfwPollEvents} is called implicitly from \textbf{glfwSwapBuffers}
|
||
if GLFW\_AUTO\_POLL\_EVENTS is enabled (as it is by default). Thus, if
|
||
\textbf{glfwSwapBuffers} is called frequently, which is normally the case,
|
||
there is no need to call \textbf{glfwPollEvents}.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwWaitEvents}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwWaitEvents(void)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
none
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function is used for waiting for events, such as user input and
|
||
window resize events. Upon calling this function, the calling thread will
|
||
be put to sleep until any event appears in the event queue. When events
|
||
are available, they will be processed just as they are processed by
|
||
\textbf{glfwPollEvents}.
|
||
|
||
If there are any events in the queue when the function is called, the
|
||
function will behave exactly like \textbf{glfwPollEvents} (i.e. process
|
||
all messages and then return, without blocking the calling thread).
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
It is guaranteed that \textbf{glfwWaitEvents} will wake up on any event that
|
||
can be processed by \textbf{glfwPollEvents}. However, \GLFW\ receives many
|
||
events that are only processed internally and the function may behave
|
||
differently on different systems. Do not make any assumptions about when or why
|
||
\textbf{glfwWaitEvents} will return.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\begin{table}[p]
|
||
\begin{center}
|
||
\begin{tabular}{|l|l|} \hline \raggedright
|
||
\textbf{Name} & \textbf{Description} \\ \hline
|
||
GLFW\_KEY\_\textit{X} & Letter (\textit{X} can be in the range A..Z)\\ \hline
|
||
GLFW\_KEY\_\textit{n} & Number (\textit{n} can be in the range 0..9)\\ \hline
|
||
GLFW\_KEY\_SPACE & Space\\ \hline
|
||
GLFW\_KEY\_MINUS & Minus (-)\\ \hline
|
||
GLFW\_KEY\_EQUAL & Equal (=)\\ \hline
|
||
GLFW\_KEY\_LEFT\_BRACKET & Left bracket ([)\\ \hline
|
||
GLFW\_KEY\_RIGHT\_BRACKET & Right bracket (])\\ \hline
|
||
GLFW\_KEY\_GRAVE\_ACCENT & Grave accent (`)\\ \hline
|
||
GLFW\_KEY\_APOSTROPHE & Apostrophe (')\\ \hline
|
||
GLFW\_KEY\_COMMA & Comma (,)\\ \hline
|
||
GLFW\_KEY\_PERIOD & Period (.)\\ \hline
|
||
GLFW\_KEY\_SEMICOLON & Semicolon (;)\\ \hline
|
||
GLFW\_KEY\_SLASH & Slash ($/$)\\ \hline
|
||
GLFW\_KEY\_BACKSLASH & Backslash ($\backslash$)\\ \hline
|
||
GLFW\_KEY\_WORLD\_1 & Non-US character no. 1\\ \hline
|
||
GLFW\_KEY\_WORLD\_2 & Non-US character no. 2\\ \hline
|
||
\end{tabular}
|
||
\end{center}
|
||
\caption[Key codes for printable keys]{Key codes for printable keys. The keys are named according to the US keyboard layout, but represent physical keys (so for instance, GLFW\_KEY\_Z represents the same physical key, regardless of the system input language).}
|
||
\label{tab:keys1}
|
||
\end{table}
|
||
|
||
\begin{table}[p]
|
||
\begin{center}
|
||
\begin{tabular}{|l|l|} \hline \raggedright
|
||
\textbf{Name} & \textbf{Description} \\ \hline
|
||
GLFW\_KEY\_ESCAPE & Escape\\ \hline
|
||
GLFW\_KEY\_F\textit{n} & Function key \textit{n} (\textit{n} can be in the range 1..25)\\ \hline
|
||
GLFW\_KEY\_UP & Cursor up\\ \hline
|
||
GLFW\_KEY\_DOWN & Cursor down\\ \hline
|
||
GLFW\_KEY\_LEFT & Cursor left\\ \hline
|
||
GLFW\_KEY\_RIGHT & Cursor right\\ \hline
|
||
GLFW\_KEY\_LEFT\_SHIFT & Left shift key\\ \hline
|
||
GLFW\_KEY\_RIGHT\_SHIFT & Right shift key\\ \hline
|
||
GLFW\_KEY\_LEFT\_CTRL & Left control key\\ \hline
|
||
GLFW\_KEY\_RIGHT\_CTRL & Right control key\\ \hline
|
||
GLFW\_KEY\_LEFT\_ALT & Left alternate function key\\ \hline
|
||
GLFW\_KEY\_RIGHT\_ALT & Right alternate function key\\ \hline
|
||
GLFW\_KEY\_LEFT\_SUPER & Left super key, WinKey, or command key\\ \hline
|
||
GLFW\_KEY\_RIGHT\_SUPER & Right super key, WinKey, or command key\\ \hline
|
||
GLFW\_KEY\_TAB & Tabulator\\ \hline
|
||
GLFW\_KEY\_ENTER & Enter\\ \hline
|
||
GLFW\_KEY\_BACKSPACE & Backspace\\ \hline
|
||
GLFW\_KEY\_INSERT & Insert\\ \hline
|
||
GLFW\_KEY\_DELETE & Delete\\ \hline
|
||
GLFW\_KEY\_PAGE\_UP & Page up\\ \hline
|
||
GLFW\_KEY\_PAGE\_DOWN & Page down\\ \hline
|
||
GLFW\_KEY\_HOME & Home\\ \hline
|
||
GLFW\_KEY\_END & End\\ \hline
|
||
GLFW\_KEY\_KP\_\textit{n} & Keypad numeric key \textit{n} (\textit{n} can be in the range 0..9)\\ \hline
|
||
GLFW\_KEY\_KP\_DIVIDE & Keypad divide ($\div$)\\ \hline
|
||
GLFW\_KEY\_KP\_MULTIPLY & Keypad multiply ($\times$)\\ \hline
|
||
GLFW\_KEY\_KP\_SUBTRACT & Keypad subtract ($-$)\\ \hline
|
||
GLFW\_KEY\_KP\_ADD & Keypad add ($+$)\\ \hline
|
||
GLFW\_KEY\_KP\_DECIMAL & Keypad decimal (. or ,)\\ \hline
|
||
GLFW\_KEY\_KP\_EQUAL & Keypad equal (=)\\ \hline
|
||
GLFW\_KEY\_KP\_ENTER & Keypad enter\\ \hline
|
||
GLFW\_KEY\_NUM\_LOCK & Num lock\\ \hline
|
||
GLFW\_KEY\_CAPS\_LOCK & Caps lock\\ \hline
|
||
GLFW\_KEY\_SCROLL\_LOCK & Scroll lock\\ \hline
|
||
GLFW\_KEY\_PAUSE & Pause key\\ \hline
|
||
GLFW\_KEY\_MENU & Menu key\\ \hline
|
||
\end{tabular}
|
||
\end{center}
|
||
\caption{Key codes for function keys}
|
||
\label{tab:keys2}
|
||
\end{table}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\begin{table}[p]
|
||
\begin{center}
|
||
\begin{tabular}{|l|l|} \hline \raggedright
|
||
\textbf{Name} & \textbf{Description} \\ \hline
|
||
GLFW\_MOUSE\_BUTTON\_LEFT & Left mouse button (button 1) \\ \hline
|
||
GLFW\_MOUSE\_BUTTON\_RIGHT & Right mouse button (button 2) \\ \hline
|
||
GLFW\_MOUSE\_BUTTON\_MIDDLE & Middle mouse button (button 3) \\ \hline
|
||
GLFW\_MOUSE\_BUTTON\_\textit{n} & Mouse button \textit{n} (\textit{n} can be in the range 1..8)\\ \hline
|
||
\end{tabular}
|
||
\end{center}
|
||
\caption{Valid mouse button identifiers}
|
||
\label{tab:mousebuttons}
|
||
\end{table}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwGetKey}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
int glfwGetKey(int key)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{key}]\ \\
|
||
A keyboard key identifier, which can be any of the key codes in tables
|
||
\ref{tab:keys1} and \ref{tab:keys2}.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
The function returns GLFW\_PRESS if the key is held down, or GLFW\_RELEASE
|
||
if the key is not held down.
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function queries the current state of a specific keyboard key. The
|
||
physical location of each key depends on the system keyboard layout
|
||
setting.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
The constant GLFW\_KEY\_SPACE is equal to 32, which is the ISO~8859-1 code
|
||
for space. This is the only named \GLFW\ key identifier with a value in the
|
||
ISO~8859-1 range.
|
||
|
||
Not all key codes are supported on all systems. Also, while some keys are
|
||
available on some keyboard layouts, they may not be available on other
|
||
keyboard layouts.
|
||
|
||
For systems that do not distinguish between left and right versions of
|
||
modifier keys (shift, alt and control), the left version is used (e.g.
|
||
GLFW\_KEY\_LSHIFT).
|
||
|
||
A window must be opened for the function to have any effect, and
|
||
\textbf{glfwPollEvents}, \textbf{glfwWaitEvents} or \textbf{glfwSwapBuffers}
|
||
(with GLFW\_AUTO\_POLL\_EVENTS enabled) must be called before any keyboard
|
||
events are recorded and reported by \textbf{glfwGetKey}.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwGetMouseButton}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
int glfwGetMouseButton(int button)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{button}]\ \\
|
||
A mouse button identifier, which can be one of the mouse button
|
||
identifiers listed in table \ref{tab:mousebuttons}.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
The function returns GLFW\_PRESS if the mouse button is held down, or
|
||
GLFW\_RELEASE if the mouse button is not held down.
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function queries the current state of a specific mouse button.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
A window must be opened for the function to have any effect, and
|
||
\textbf{glfwPollEvents}, \textbf{glfwWaitEvents} or \textbf{glfwSwapBuffers}
|
||
(with GLFW\_AUTO\_POLL\_EVENTS enabled) must be called before any mouse button
|
||
events are recorded and reported by \textbf{glfwGetMouseButton}.
|
||
|
||
GLFW\_MOUSE\_BUTTON\_LEFT is equal to GLFW\_MOUSE\_BUTTON\_1.
|
||
GLFW\_MOUSE\_BUTTON\_RIGHT is equal to GLFW\_MOUSE\_BUTTON\_2.
|
||
GLFW\_MOUSE\_BUTTON\_MIDDLE is equal to GLFW\_MOUSE\_BUTTON\_3.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwGetMousePos}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwGetMousePos(int* xpos, int* ypos)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{xpos}]\ \\
|
||
Pointer to an integer that will be set to the horizontal position of the
|
||
mouse cursor.
|
||
\item [\textit{ypos}]\ \\
|
||
Pointer to an integer that will be set to the vertical position of the mouse cursor.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
The function returns the current mouse cursor position in \textit{xpos} and
|
||
\textit{ypos}.
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function returns the current mouse position. If the cursor is not
|
||
hidden, the mouse position is the cursor position, relative to the upper
|
||
left corner of the window and with the Y-axis down. If the cursor is hidden,
|
||
the mouse position is a virtual absolute position, not limited to any
|
||
boundaries except to those implied by the maximum number that can be
|
||
represented by a signed integer.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
A window must be opened for the function to have any effect, and
|
||
\textbf{glfwPollEvents}, \textbf{glfwWaitEvents} or \textbf{glfwSwapBuffers}
|
||
(with GLFW\_AUTO\_POLL\_EVENTS enabled) must be called before any mouse
|
||
movements are recorded and reported by \textbf{glfwGetMousePos}.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwSetMousePos}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwSetMousePos(int xpos, int ypos)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{xpos}]\ \\
|
||
Horizontal position of the mouse.
|
||
\item [\textit{ypos}]\ \\
|
||
Vertical position of the mouse.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function changes the position of the mouse. If the cursor is visible (not
|
||
disabled), the cursor will be moved to the specified position, relative to the
|
||
upper left corner of the window client area and with the Y-axis down. If the
|
||
cursor is hidden (disabled), only the mouse position that is reported by \GLFW\
|
||
is changed.
|
||
\end{refdescription}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwGetMouseWheel}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
int glfwGetMouseWheel(void)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
none
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
The function returns the current mouse wheel position.
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function returns the current mouse wheel position. The mouse wheel can
|
||
be thought of as a third mouse axis, which is available as a separate
|
||
wheel or up/down stick on some mice.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
A window must be opened for the function to have any effect, and
|
||
\textbf{glfwPollEvents}, \textbf{glfwWaitEvents} or \textbf{glfwSwapBuffers}
|
||
(with GLFW\_AUTO\_POLL\_EVENTS enabled) must be called before any mouse wheel
|
||
movements are recorded and reported by \textbf{glfwGetMouseWheel}.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwSetMouseWheel}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwSetMouseWheel(int pos)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{pos}]\ \\
|
||
Position of the mouse wheel.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function changes the position of the mouse wheel.
|
||
\end{refdescription}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwSetKeyCallback}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwSetKeyCallback(GLFWkeyfun cbfun)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{cbfun}]\ \\
|
||
Pointer to a callback function that will be called every time a key is
|
||
pressed or released. The function should have the following C language
|
||
prototype:
|
||
|
||
\texttt{void functionname(int key, int action);}
|
||
|
||
Where \textit{functionname} is the name of the callback function,
|
||
\textit{key} is a key code (see tables \ref{tab:keys1} and \ref{tab:keys2}),
|
||
and \textit{action} is either GLFW\_PRESS or GLFW\_RELEASE.
|
||
|
||
If \textit{cbfun} is NULL, any previously set callback function
|
||
will be unset.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function sets the callback for keyboard key events. The callback function
|
||
is called every time the state of a single key is changed (from released to
|
||
pressed or vice versa). The reported keys are unaffected by any modifiers (such
|
||
as shift or alt) and each modifier is reported as a separate key.
|
||
|
||
A window has to be opened for this function to have any effect.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
Keyboard key events are not intended for text input and many languages
|
||
will not be able to be input using it. Use Unicode character events for
|
||
text input instead.
|
||
|
||
Keyboard events are recorded continuously, but only reported when
|
||
\textbf{glfwPollEvents}, \textbf{glfwWaitEvents} or \textbf{glfwSwapBuffers}
|
||
(with GLFW\_AUTO\_POLL\_EVENTS enabled) is called.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwSetCharCallback}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwSetCharCallback(GLFWcharfun cbfun)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{cbfun}]\ \\
|
||
Pointer to a callback function that will be called every time a
|
||
printable character is generated by the keyboard. The function should
|
||
have the following C language prototype:
|
||
|
||
\texttt{void functionname(int character, int action);}
|
||
|
||
Where \textit{functionname} is the name of the callback function,
|
||
\textit{character} is a Unicode (ISO~10646) character, and
|
||
\textit{action} is either GLFW\_PRESS or GLFW\_RELEASE.
|
||
|
||
If \textit{cbfun} is NULL, any previously set callback function
|
||
will be unset.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function sets the callback for keyboard character events. The callback
|
||
function is called every time a key that results in a printable Unicode
|
||
character is pressed or released. Characters are affected by modifiers (such
|
||
as shift or alt).
|
||
|
||
A window has to be opened for this function to have any effect.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
Character events are recorded continuously, but only reported when
|
||
\textbf{glfwPollEvents}, \textbf{glfwWaitEvents} or \textbf{glfwSwapBuffers}
|
||
(with GLFW\_AUTO\_POLL\_EVENTS enabled) is called.
|
||
|
||
Control characters such as tab and carriage return are not reported to
|
||
the character callback function, since they are not part of the Unicode
|
||
character set. Use the key callback function for such events (see
|
||
\textbf{glfwSetKeyCallback}).
|
||
|
||
The Unicode character set supports character codes above 255, so never
|
||
cast a Unicode character to an eight bit data type (e.g. the C language
|
||
'char' type) without first checking that the character code is less than
|
||
256. Also note that Unicode character codes 0 to 255 are equal to
|
||
ISO~8859-1 (Latin~1).
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwSetMouseButtonCallback}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwSetMouseButtonCallback(GLFWmousebuttonfun cbfun)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{cbfun}]\ \\
|
||
Pointer to a callback function that will be called every time a mouse
|
||
button is pressed or released. The function should have the following C
|
||
language prototype:
|
||
|
||
\texttt{void functionname(int button, int action);}
|
||
|
||
Where \textit{functionname} is the name of the callback function,
|
||
\textit{button} is a mouse button identifier (see table
|
||
\ref{tab:mousebuttons} on page \pageref{tab:mousebuttons}), and
|
||
\textit{action} is either GLFW\_PRESS or GLFW\_RELEASE.
|
||
|
||
If \textit{cbfun} is NULL, any previously set callback function
|
||
will be unset.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function sets the callback for mouse button events.
|
||
|
||
A window has to be opened for this function to have any effect.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
Mouse button events are recorded continuously, but only reported when
|
||
\textbf{glfwPollEvents}, \textbf{glfwWaitEvents} or \textbf{glfwSwapBuffers}
|
||
(with GLFW\_AUTO\_POLL\_EVENTS enabled) is called.
|
||
|
||
GLFW\_MOUSE\_BUTTON\_LEFT is equal to GLFW\_MOUSE\_BUTTON\_1.
|
||
GLFW\_MOUSE\_BUTTON\_RIGHT is equal to GLFW\_MOUSE\_BUTTON\_2.
|
||
GLFW\_MOUSE\_BUTTON\_MIDDLE is equal to GLFW\_MOUSE\_BUTTON\_3.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwSetMousePosCallback}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwSetMousePosCallback(GLFWmouseposfun cbfun)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{cbfun}]\ \\
|
||
Pointer to a callback function that will be called every time the mouse
|
||
is moved. The function should have the following C language prototype:
|
||
|
||
\texttt{void functionname(int x, int y);}
|
||
|
||
Where \textit{functionname} is the name of the callback function, and
|
||
\textit{x} and \textit{y} are the mouse coordinates (see
|
||
\textbf{glfwGetMousePos} for more information on mouse coordinates).
|
||
|
||
If \textit{cbfun} is NULL, any previously set callback function
|
||
will be unset.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function sets the callback for mouse motion events.
|
||
|
||
A window has to be opened for this function to have any effect.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
Mouse motion events are recorded continuously, but only reported when
|
||
\textbf{glfwPollEvents}, \textbf{glfwWaitEvents} or \textbf{glfwSwapBuffers}
|
||
(with GLFW\_AUTO\_POLL\_EVENTS enabled) is called.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwSetMouseWheelCallback}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwSetMouseWheelCallback(GLFWmousewheelfun cbfun)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{cbfun}]\ \\
|
||
Pointer to a callback function that will be called every time the mouse
|
||
wheel is moved. The function should have the following C language
|
||
prototype:
|
||
|
||
\texttt{void functionname(int pos);}
|
||
|
||
Where \textit{functionname} is the name of the callback function, and
|
||
\textit{pos} is the mouse wheel position.
|
||
|
||
If \textit{cbfun} is NULL, any previously set callback function
|
||
will be unset.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function sets the callback for mouse wheel events.
|
||
|
||
A window has to be opened for this function to have any effect.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
Mouse wheel events are recorded continuously, but only reported when
|
||
\textbf{glfwPollEvents}, \textbf{glfwWaitEvents} or \textbf{glfwSwapBuffers}
|
||
(with GLFW\_AUTO\_POLL\_EVENTS enabled) is called.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\begin{table}[p]
|
||
\begin{center}
|
||
\begin{tabular}{|l|l|}\hline \raggedright
|
||
\textbf{Name} & \textbf{Return value}\\ \hline
|
||
GLFW\_PRESENT & GL\_TRUE if the joystick is connected, else GL\_FALSE.\\ \hline
|
||
GLFW\_AXES & Number of axes supported by the joystick.\\ \hline
|
||
GLFW\_BUTTONS & Number of buttons supported by the joystick.\\ \hline
|
||
\end{tabular}
|
||
\end{center}
|
||
\caption{Joystick parameters for \textbf{glfwGetJoystickParam}}
|
||
\label{tab:joyparams}
|
||
\end{table}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwGetJoystickParam}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
int glfwGetJoystickParam(int joy, int param)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{joy}]\ \\
|
||
A joystick identifier, which should be GLFW\_JOYSTICK\_\textit{n}, where
|
||
\textit{n} is in the range 1 to 16.
|
||
\item [\textit{param}]\ \\
|
||
A token selecting which parameter the function should return (see table
|
||
\ref{tab:joyparams}).
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
The function returns different parameters depending on the value of
|
||
\textit{param}. Table \ref{tab:joyparams} lists valid \textit{param}
|
||
values, and their corresponding return values.
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function is used for acquiring various properties of a joystick.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
The joystick information is updated every time the function is called.
|
||
|
||
No window has to be opened for joystick information to be available.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwGetJoystickPos}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
int glfwGetJoystickPos(int joy, float* pos, int numaxes)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{joy}]\ \\
|
||
A joystick identifier, which should be GLFW\_JOYSTICK\_\textit{n}, where
|
||
\textit{n} is in the range 1 to 16.
|
||
\item [\textit{pos}]\ \\
|
||
An array that will hold the positional values for all requested axes.
|
||
\item [\textit{numaxes}]\ \\
|
||
Specifies how many axes should be returned.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
The function returns the number of actually returned axes. This is the
|
||
minimum of \textit{numaxes} and the number of axes supported by the
|
||
joystick. If the joystick is not supported or connected, the function will
|
||
return 0 (zero).
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function queries the current position of one or more axes of a
|
||
joystick. The positional values are returned in an array, where the first
|
||
element represents the first axis of the joystick (normally the X axis).
|
||
Each position is in the range -1.0 to 1.0. Where applicable, the positive
|
||
direction of an axis is right, forward or up, and the negative direction
|
||
is left, back or down.
|
||
|
||
If \textit{numaxes} exceeds the number of axes supported by the joystick,
|
||
or if the joystick is not available, the unused elements in the
|
||
\textit{pos} array will be set to 0.0 (zero).
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
The joystick state is updated every time the function is called, so there
|
||
is no need to call \textbf{glfwPollEvents} or \textbf{glfwWaitEvents} for
|
||
joystick state to be updated.
|
||
|
||
Use \textbf{glfwGetJoystickParam} to retrieve joystick capabilities, such
|
||
as joystick availability and number of supported axes.
|
||
|
||
No window has to be opened for joystick input to be available.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwGetJoystickButtons}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
int glfwGetJoystickButtons(int joy, unsigned char* buttons,
|
||
int numbuttons)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{joy}]\ \\
|
||
A joystick identifier, which should be GLFW\_JOYSTICK\_\textit{n}, where
|
||
\textit{n} is in the range 1 to 16.
|
||
\item [\textit{buttons}]\ \\
|
||
An array that will hold the button states for all requested buttons.
|
||
\item [\textit{numbuttons}]\ \\
|
||
Specifies how many buttons should be returned.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
The function returns the number of actually returned buttons. This is the
|
||
minimum of \textit{numbuttons} and the number of buttons supported by the
|
||
joystick. If the joystick is not supported or connected, the function will
|
||
return 0 (zero).
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function queries the current state of one or more buttons of a
|
||
joystick. The button states are returned in an array, where the first
|
||
element represents the first button of the joystick. Each state can be
|
||
either GLFW\_PRESS or GLFW\_RELEASE.
|
||
|
||
If \textit{numbuttons} exceeds the number of buttons supported by the
|
||
joystick, or if the joystick is not available, the unused elements in the
|
||
\textit{buttons} array will be set to GLFW\_RELEASE.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
The joystick state is updated every time the function is called, so there
|
||
is no need to call \textbf{glfwPollEvents} or \textbf{glfwWaitEvents} for
|
||
joystick state to be updated.
|
||
|
||
Use \textbf{glfwGetJoystickParam} to retrieve joystick capabilities, such
|
||
as joystick availability and number of supported buttons.
|
||
|
||
No window has to be opened for joystick input to be available.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\pagebreak
|
||
\section{Timing}
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwGetTime}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
double glfwGetTime(void)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
none
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
The function returns the value of the high precision timer. The time is
|
||
measured in seconds, and is returned as a double precision floating point
|
||
value.
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function returns the state of a high precision timer. Unless the timer
|
||
has been set by the \textbf{glfwSetTime} function, the time is measured as
|
||
the number of seconds that have passed since \textbf{glfwInit} was called.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
The resolution of the timer depends on which system the program is running
|
||
on.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwSetTime}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwSetTime(double time)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{time}]\ \\
|
||
Time (in seconds) that the timer should be set to.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function sets the current time of the high precision timer to the
|
||
specified time. Subsequent calls to \textbf{glfwGetTime} will be relative
|
||
to this time. The time is given in seconds.
|
||
\end{refdescription}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\pagebreak
|
||
\section{OpenGL Extension Support}
|
||
One of the great features of \OpenGL\ is its support for extensions, which
|
||
allow independent vendors to supply non-standard functionality in their
|
||
\OpenGL\ implementations. As the mechanism for querying extensions varies
|
||
among systems, \GLFW\ provides an operating system independent interface for
|
||
querying \OpenGL\ version, extensions and entry points.
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwExtensionSupported}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
int glfwExtensionSupported(const char* extension)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{extension}]\ \\
|
||
A null terminated ISO~8859-1 string containing the name of an \OpenGL\
|
||
extension.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
The function returns GL\_TRUE if the extension is supported. Otherwise it
|
||
returns GL\_FALSE.
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function does a string search in the list of supported \OpenGL\
|
||
extensions to find if the specified extension is listed.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
An \OpenGL\ context must be created before this function can be called
|
||
(i.e. an \OpenGL\ window must have been opened with
|
||
\textbf{glfwOpenWindow}).
|
||
|
||
In addition to checking for \OpenGL\ extensions, \GLFW\ also checks for
|
||
extensions in the operating system ``glue API'', such as WGL extensions
|
||
under Microsoft Windows and GLX extensions under the X Window System.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwGetProcAddress}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void* glfwGetProcAddress(const char* procname)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{procname}]\ \\
|
||
A null terminated ISO~8859-1 string containing the name of an \OpenGL\
|
||
extension function.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
The function returns the address of the specified \OpenGL\ function, if it
|
||
is available. Otherwise NULL is returned.
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function acquires the pointer to an \OpenGL\ extension function. Some
|
||
(but not all) \OpenGL\ extensions define new API functions, which are
|
||
usually not available through normal linking. It is therefore necessary to
|
||
get access to those API functions at runtime.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
An \OpenGL\ context must be created before this function can be called
|
||
(i.e. an \OpenGL\ window must have been opened with
|
||
\textbf{glfwOpenWindow}).
|
||
|
||
Some systems do not support dynamic function pointer retrieval, in which
|
||
case \textbf{glfwGetProcAddress} will always return NULL.
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwGetGLVersion}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwGetGLVersion(int* major, int* minor, int* rev)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{major}]\ \\
|
||
Pointer to an integer that will hold the major version number.
|
||
\item [\textit{minor}]\ \\
|
||
Pointer to an integer that will hold the minor version number.
|
||
\item [\textit{rev}]\ \\
|
||
Pointer to an integer that will hold the revision.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
The function returns the major and minor version numbers and the revision
|
||
for the currently used \OpenGL\ implementation.
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
This function returns the \OpenGL\ implementation version. This is a
|
||
convenient function that parses the version number information at the beginning
|
||
of the string returned by calling \texttt{glGetString(~GL\_VERSION~)}. The
|
||
\OpenGL\ version information can be used to determine what functionality is
|
||
supported by the used \OpenGL\ implementation.
|
||
\end{refdescription}
|
||
|
||
\begin{refnotes}
|
||
An \OpenGL\ context must be created before this function can be called
|
||
(i.e. an \OpenGL\ window must have been opened with
|
||
\textbf{glfwOpenWindow}).
|
||
\end{refnotes}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\pagebreak
|
||
\section{Miscellaneous}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
\subsection{glfwEnable/glfwDisable}
|
||
|
||
\textbf{C language syntax}
|
||
\begin{lstlisting}
|
||
void glfwEnable(int token)
|
||
void glfwDisable(int token)
|
||
\end{lstlisting}
|
||
|
||
\begin{refparameters}
|
||
\begin{description}
|
||
\item [\textit{token}]\ \\
|
||
A value specifying a feature to enable or disable. Valid tokens are
|
||
listed in table \ref{tab:enable}.
|
||
\end{description}
|
||
\end{refparameters}
|
||
|
||
\begin{refreturn}
|
||
none
|
||
\end{refreturn}
|
||
|
||
\begin{refdescription}
|
||
\textbf{glfwEnable} is used to enable a certain feature, while
|
||
\textbf{glfwDisable} is used to disable it. Below follows a description of
|
||
each feature.
|
||
\end{refdescription}
|
||
|
||
|
||
\begin{table}[p]
|
||
\begin{center}
|
||
\begin{tabular}{|l|p{5.0cm}|p{3.0cm}|} \hline \raggedright
|
||
\textbf{Name} & \textbf{Controls} & \textbf{Default}\\ \hline
|
||
\hyperlink{lnk:autopollevents}{GLFW\_AUTO\_POLL\_EVENTS} & Automatic event polling when \textbf{glfwSwapBuffers} is called & Enabled\\ \hline
|
||
\hyperlink{lnk:keyrepeat}{GLFW\_KEY\_REPEAT} & Keyboard key repeat & Disabled\\ \hline
|
||
\hyperlink{lnk:mousecursor}{GLFW\_MOUSE\_CURSOR} & Mouse cursor visibility & Enabled in windowed mode. Disabled in fullscreen mode.\\ \hline
|
||
\hyperlink{lnk:stickykeys}{GLFW\_STICKY\_KEYS} & Keyboard key ``stickiness'' & Disabled\\ \hline
|
||
\hyperlink{lnk:stickymousebuttons}{GLFW\_STICKY\_MOUSE\_BUTTONS} & Mouse button ``stickiness'' & Disabled\\ \hline
|
||
\hyperlink{lnk:systemkeys}{GLFW\_SYSTEM\_KEYS} & Special system key actions & Enabled\\ \hline
|
||
\end{tabular}
|
||
\end{center}
|
||
\caption{Tokens for \textbf{glfwEnable}/\textbf{glfwDisable}}
|
||
\label{tab:enable}
|
||
\end{table}
|
||
|
||
|
||
\bigskip\begin{mysamepage}\hypertarget{lnk:autopollevents}{}
|
||
\textbf{GLFW\_AUTO\_POLL\_EVENTS}\\
|
||
When GLFW\_AUTO\_POLL\_EVENTS is enabled, \textbf{glfwPollEvents} is
|
||
automatically called each time that \textbf{glfwSwapBuffers} is called,
|
||
immediately after the buffer swap itself.
|
||
|
||
When GLFW\_AUTO\_POLL\_EVENTS is disabled, calling
|
||
\textbf{glfwSwapBuffers} will not result in a call to
|
||
\textbf{glfwPollEvents}. This can be useful if for example \textbf{glfwSwapBuffers}
|
||
needs to be called from within a callback function, since calling
|
||
\textbf{glfwPollEvents} from a callback function is not allowed.
|
||
\end{mysamepage}
|
||
|
||
|
||
\bigskip\begin{mysamepage}\hypertarget{lnk:keyrepeat}{}
|
||
\textbf{GLFW\_KEY\_REPEAT}\\
|
||
When GLFW\_KEY\_REPEAT is enabled, the key and character callback
|
||
functions are called repeatedly when a key is held down long enough
|
||
(according to the system key repeat configuration).
|
||
|
||
When GLFW\_KEY\_REPEAT is disabled, the key and character callback
|
||
functions are only called once when a key is pressed (and once when it is
|
||
released).
|
||
\end{mysamepage}
|
||
|
||
|
||
\bigskip\begin{mysamepage}\hypertarget{lnk:mousecursor}{}
|
||
\textbf{GLFW\_MOUSE\_CURSOR}\\
|
||
When GLFW\_MOUSE\_CURSOR is enabled, the mouse cursor is visible, and
|
||
mouse coordinates are relative to the upper left corner of the client area
|
||
of the \GLFW\ window. The coordinates are limited to the client area of
|
||
the window.
|
||
|
||
When GLFW\_MOUSE\_CURSOR is disabled, the mouse cursor is invisible, and
|
||
mouse coordinates are not limited to the drawing area of the window. It is
|
||
as if the mouse coordinates are received directly from the mouse, without
|
||
being restricted or manipulated by the windowing system.
|
||
\end{mysamepage}
|
||
|
||
|
||
\bigskip\begin{mysamepage}\hypertarget{lnk:stickykeys}{}
|
||
\textbf{GLFW\_STICKY\_KEYS}\\
|
||
When GLFW\_STICKY\_KEYS is enabled, keys which are pressed will not be
|
||
released until they are physically released and checked with
|
||
\textbf{glfwGetKey}. This behavior makes it possible to catch keys that
|
||
were pressed and then released again between two calls to
|
||
\textbf{glfwPollEvents}, \textbf{glfwWaitEvents} or
|
||
\textbf{glfwSwapBuffers}, which would otherwise have been reported as
|
||
released. Care should be taken when using this mode, since keys that are
|
||
not checked with \textbf{glfwGetKey} will never be released. Note also
|
||
that enabling GLFW\_STICKY\_KEYS does not affect the behavior of the
|
||
keyboard callback functionality.
|
||
|
||
When GLFW\_STICKY\_KEYS is disabled, the status of a key that is reported
|
||
by \textbf{glfwGetKey} is always the physical state of the key. Disabling
|
||
GLFW\_STICKY\_KEYS also clears the sticky information for all keys.
|
||
\end{mysamepage}
|
||
|
||
|
||
\bigskip\begin{mysamepage}\hypertarget{lnk:stickymousebuttons}{}
|
||
\textbf{GLFW\_STICKY\_MOUSE\_BUTTONS}\\
|
||
When GLFW\_STICKY\_MOUSE\_BUTTONS is enabled, mouse buttons that are pressed
|
||
will not be released until they are physically released and checked with
|
||
\textbf{glfwGetMouseButton}. This behavior makes it possible to catch mouse
|
||
buttons which were pressed and then released again between two calls to
|
||
\textbf{glfwPollEvents}, \textbf{glfwWaitEvents} or \textbf{glfwSwapBuffers}
|
||
(with GLFW\_AUTO\_POLL\_EVENTS enabled), which would otherwise have been
|
||
reported as released. Care should be taken when using this mode, since mouse
|
||
buttons that are not checked with \textbf{glfwGetMouseButton} will never be
|
||
released. Note also that enabling GLFW\_STICKY\_MOUSE\_BUTTONS does not affect
|
||
the behavior of the mouse button callback functionality.
|
||
|
||
When GLFW\_STICKY\_MOUSE\_BUTTONS is disabled, the status of a mouse
|
||
button that is reported by \textbf{glfwGetMouseButton} is always the
|
||
physical state of the mouse button. Disabling GLFW\_STICKY\_MOUSE\_BUTTONS
|
||
also clears the sticky information for all mouse buttons.
|
||
\end{mysamepage}
|
||
|
||
|
||
\bigskip\begin{mysamepage}\hypertarget{lnk:systemkeys}{}
|
||
\textbf{GLFW\_SYSTEM\_KEYS}\\
|
||
When GLFW\_SYSTEM\_KEYS is enabled, pressing standard system key
|
||
combinations, such as \texttt{Alt+Tab} under Windows, will give the normal
|
||
behavior. Note that when \texttt{Alt+Tab} is issued under Windows in this
|
||
mode so that the \GLFW\ application is deselected when \GLFW\ is operating
|
||
in fullscreen mode, the \GLFW\ application window will be minimized and
|
||
the video mode will be set to the original desktop mode. When the \GLFW\
|
||
application is re-selected, the video mode will be set to the \GLFW\ video
|
||
mode again.
|
||
|
||
When GLFW\_SYSTEM\_KEYS is disabled, pressing standard system key
|
||
combinations will have no effect, since those key combinations are blocked
|
||
by \GLFW . This mode can be useful in situations when the \GLFW\ program
|
||
must not be interrupted (normally for games in fullscreen mode).
|
||
\end{mysamepage}
|
||
|
||
|
||
%-------------------------------------------------------------------------
|
||
% GLFW Standards Conformance
|
||
%-------------------------------------------------------------------------
|
||
\appendix
|
||
\chapter{GLFW Compatibility}
|
||
\label{chap:compatibility}
|
||
\thispagestyle{fancy}
|
||
|
||
This chapter describes the various API extensions used by this version of
|
||
\GLFW . It lists what are essentially implementation details, but which are
|
||
nonetheless vital knowledge for developers wishing to deploy their applications
|
||
on machines with varied specifications.
|
||
|
||
Note that the information in this appendix is not a part of the API
|
||
specification but merely list some of the preconditions for certain parts of
|
||
the API to function on a given machine. As such, any part of it may change in
|
||
future versions without this being considered a breaking API change.
|
||
|
||
%-------------------------------------------------------------------------
|
||
\section{ICCCM and EWMH Conformance}
|
||
|
||
As \GLFW\ uses \textbf{Xlib}, directly, without any intervening toolkit
|
||
library, it has sole responsibility for interacting well with the many and
|
||
varied window managers in use on Unix-like systems. In order for applications
|
||
and window managers to work well together, a number of standards and
|
||
conventions have been developed that regulate behavior outside the scope of the
|
||
X11 API; most importantly the \textbf{Inter-Client Communication Conventions
|
||
Manual} (ICCCM) and \textbf{Extended Window Manager Hints} (EWMH) standards.
|
||
|
||
\GLFW\ uses the ICCCM \textbf{WM\_DELETE\_WINDOW} protocol to intercept the user
|
||
attempting to close the \GLFW\ window. If the running window manager does not
|
||
support this protocol, the close callback will never be called.
|
||
|
||
\GLFW\ uses the EWMH \textbf{\_NET\_WM\_PING} protocol, allowing the window
|
||
manager notify the user when the application has stopped responding, i.e. when
|
||
it has ceased to process events. If the running window manager does not
|
||
support this protocol, the user will not be notified if the application locks
|
||
up.
|
||
|
||
\GLFW\ uses the EWMH \textbf{\_NET\_WM\_STATE} protocol to tell the window
|
||
manager to make the \GLFW\ window fullscreen. If the running window manager
|
||
does not support this protocol, fullscreen windows may not work properly.
|
||
\GLFW\ has a fallback code path in case this protocol is unavailable, but every
|
||
window manager behaves slightly differently in this regard.
|
||
|
||
%-------------------------------------------------------------------------
|
||
\section{GLX Extensions}
|
||
|
||
The \textbf{GLX} API is used to create \OpenGL\ contexts on Unix-like systems
|
||
using the X Window System.
|
||
|
||
\GLFW\ uses the \textbf{GLXFBConfig} API to enumerate and select framebuffer
|
||
pixel formats. This requires either \textbf{GLX} 1.3 or greater, or the
|
||
\textbf{GLX\_SGIX\_fbconfig} extension. Where both are available, the SGIX
|
||
extension is preferred. If neither is available, \GLFW\ will be unable to open
|
||
windows.
|
||
|
||
% This paragraph repeated almost verbatim below
|
||
\GLFW\ uses the \textbf{GLX\_SGI\_swap\_control} extension to provide vertical
|
||
retrace synchronization (or ``vsync''). Where this extension is unavailable,
|
||
calling \textbf{glfwSwapInterval} will have no effect.
|
||
|
||
% This paragraph repeated almost verbatim below
|
||
\GLFW\ uses the \textbf{GLX\_ARB\_multisample} extension to create contexts
|
||
with multisampling anti-aliasing. Where this extension is unavailable, the
|
||
GLFW\_FSAA\_SAMPLES hint will have no effect.
|
||
|
||
% This paragraph repeated almost verbatim below
|
||
\GLFW\ uses the \textbf{GLX\_ARB\_create\_context} extension when available,
|
||
even when creating \OpenGL\ contexts of version 2.1 and below. Where this
|
||
extension is unavailable, the GLFW\_OPENGL\_VERSION\_MAJOR and
|
||
GLFW\_OPENGL\_VERSION\_MINOR hints will only be partially supported, the
|
||
GLFW\_OPENGL\_DEBUG\_CONTEXT hint will have no effect, and setting the
|
||
GLFW\_OPENGL\_PROFILE or GLFW\_FORWARD\_COMPAT hints to a non-zero value will
|
||
cause \textbf{glfwOpenWindow} to fail.
|
||
|
||
% This paragraph repeated almost verbatim below
|
||
\GLFW\ uses the \textbf{GLX\_ARB\_create\_context\_profile} extension to
|
||
provide support for context profiles. Where this extension is unavailable,
|
||
setting the GLFW\_OPENGL\_PROFILE hint to anything but zero will cause
|
||
\textbf{glfwOpenWindow} to fail.
|
||
|
||
%-------------------------------------------------------------------------
|
||
\section{WGL Extensions}
|
||
|
||
The \textbf{WGL} API is used to create \OpenGL\ contexts on Microsoft Windows
|
||
and other implementations of the Win32 API, such as Wine.
|
||
|
||
\GLFW\ uses either the \textbf{WGL\_EXT\_extension\_string} or the
|
||
\textbf{WGL\_ARB\_extension\_string} extension to check for the presence of all
|
||
other \textbf{WGL} extensions listed below. If both are available, the EXT one
|
||
is preferred. If neither is available, no other extensions are used and many
|
||
\GLFW\ features related to context creation will have no effect or cause errors
|
||
when used.
|
||
|
||
% This paragraph repeated almost verbatim above
|
||
\GLFW\ uses the \textbf{WGL\_EXT\_swap\_control} extension to provide vertical
|
||
retrace synchronization (or ``vsync''). Where this extension is unavailable,
|
||
calling \textbf{glfwSwapInterval} will have no effect.
|
||
|
||
% This paragraph repeated almost verbatim above
|
||
\GLFW\ uses the \textbf{WGL\_ARB\_pixel\_format} and
|
||
\textbf{WGL\_ARB\_multisample} extensions to create contexts with multisampling
|
||
anti-aliasing. Where these extensions are unavailable, the GLFW\_FSAA\_SAMPLES
|
||
hint will have no effect.
|
||
|
||
% This paragraph repeated almost verbatim above
|
||
\GLFW\ uses the \textbf{WGL\_ARB\_create\_context} extension when available,
|
||
even when creating \OpenGL\ contexts of version 2.1 and below. Where this
|
||
extension is unavailable, the GLFW\_OPENGL\_VERSION\_MAJOR and
|
||
GLFW\_OPENGL\_VERSION\_MINOR hints will only be partially supported, the
|
||
GLFW\_OPENGL\_DEBUG\_CONTEXT hint will have no effect, and setting the
|
||
GLFW\_OPENGL\_PROFILE or GLFW\_FORWARD\_COMPAT hints to a non-zero value will
|
||
cause \textbf{glfwOpenWindow} to fail.
|
||
|
||
% This paragraph repeated almost verbatim above
|
||
\GLFW\ uses the \textbf{WGL\_ARB\_create\_context\_profile} extension to
|
||
provide support for context profiles. Where this extension is unavailable,
|
||
setting the GLFW\_OPENGL\_PROFILE hint to anything but zero will cause
|
||
\textbf{glfwOpenWindow} to fail.
|
||
|
||
%-------------------------------------------------------------------------
|
||
\section{OpenGL 3.0+ on Mac OS X}
|
||
|
||
At the time of writing, Mac OS X does not support OpenGL 3.0 or above.
|
||
Because of this, the GLFW\_OPENGL\_VERSION\_MAJOR and
|
||
GLFW\_OPENGL\_VERSION\_MINOR hints will fail if given a version above 2.1, the
|
||
GLFW\_OPENGL\_DEBUG\_CONTEXT hint will have no effect, and setting the
|
||
GLFW\_OPENGL\_PROFILE or GLFW\_FORWARD\_COMPAT hints to a non-zero value will
|
||
cause \textbf{glfwOpenWindow} to fail.
|
||
|
||
|
||
\end{document}
|