glfw/docs/monitor.dox

195 lines
5.4 KiB
Plaintext
Raw Normal View History

2013-05-27 17:10:34 +02:00
/*!
2014-09-18 15:03:29 +02:00
@page monitor Monitor guide
2013-05-27 17:10:34 +02:00
2013-05-27 21:58:33 +02:00
@tableofcontents
2014-09-18 15:03:29 +02:00
This guide introduces the monitor related functions of GLFW. There are also
guides for the other areas of GLFW.
- @ref intro
- @ref window
- @ref context
- @ref input
To see how GLFW views your monitor setup and its available video modes, run the
`modes` test program.
2013-05-27 21:58:33 +02:00
2013-05-27 17:10:34 +02:00
@section monitor_objects Monitor objects
2014-04-23 13:30:11 +02:00
A monitor object represents a currently connected monitor and is represented as
a pointer to the [opaque](https://en.wikipedia.org/wiki/Opaque_data_type) type
@ref GLFWmonitor. Monitor objects cannot be created or destroyed by the
application and retain their addresses until the monitors they represent are
disconnected or until the library is [terminated](@ref intro_init_terminate).
2013-05-27 21:58:33 +02:00
2014-04-23 13:30:11 +02:00
Each monitor has a human-readable name, a current video mode, a list of
supported video modes, a virtual position, an estimated physical size and
a gamma ramp.
2013-07-07 12:06:59 +02:00
2014-04-23 13:30:11 +02:00
The virtual position of a monitor is in screen coordinates and, together with
the current video mode, describes the viewports that the connected monitors
provide into the virtual desktop that spans them.
2013-07-07 12:06:59 +02:00
2014-04-23 13:30:11 +02:00
@subsection monitor_monitors Retrieving monitors
The primary monitor is returned by @ref glfwGetPrimaryMonitor. It is the user's
preferred monitor and is usually the one with global UI elements like task bar
2014-09-18 15:03:29 +02:00
or menu bar. The returned structure is allocated and freed by GLFW.
2013-05-27 21:58:33 +02:00
@code
GLFWmonitor* primary = glfwGetPrimaryMonitor();
@endcode
You can retrieve all currently connected monitors with @ref glfwGetMonitors.
2014-09-18 15:03:29 +02:00
See the reference documentation for the lifetime of the returned array.
2013-05-27 21:58:33 +02:00
@code
int count;
GLFWmonitor** monitors = glfwGetMonitors(&count);
@endcode
2014-09-18 15:03:29 +02:00
The primary monitor is always the first monitor in the returned array, but other
monitors may be moved to a different index when a monitor is connected or
disconnected.
@subsection monitor_event Monitor configuration changes
If you wish to be notified when a monitor is connected or disconnected, set
a monitor callback with @ref glfwSetMonitorCallback.
@code
glfwSetMonitorCallback(monitor_callback);
@endcode
The callback function receives the handle for the monitor that has been
connected or disconnected and a monitor action.
@code
void monitor_callback(GLFWmonitor* monitor, int event)
{
}
@endcode
The action is one of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`.
2014-04-23 13:30:11 +02:00
@section monitor_properties Monitor properties
2013-05-27 17:10:34 +02:00
2014-04-23 13:30:11 +02:00
@subsection monitor_modes Video modes
2013-05-27 17:10:34 +02:00
Although GLFW generally does a good job at selecting a suitable video
2013-05-27 21:58:33 +02:00
mode for you when you open a full screen window, it is sometimes useful to
2013-05-27 17:10:34 +02:00
know exactly which modes are available on a certain system. For example,
you may want to present the user with a list of video modes to select
2014-09-18 15:03:29 +02:00
from.
To get a list of available video modes, you can use the function @ref
glfwGetVideoModes. See the reference documentation for the lifetime of the
returned array.
2013-05-27 17:10:34 +02:00
@code
int count;
GLFWvidmode* modes = glfwGetVideoModes(monitor, &count);
@endcode
2014-09-18 15:03:29 +02:00
To get the current video mode of a monitor call @ref glfwGetVideoMode. See the
reference documentation for the lifetime of the returned structure.
2013-05-27 17:10:34 +02:00
@code
const GLFWvidmode* mode = glfwGetVideoMode(monitor);
@endcode
2014-04-23 13:30:11 +02:00
@subsection monitor_size Physical size
2013-05-27 21:58:33 +02:00
2014-04-23 13:30:11 +02:00
The physical size in millimetres of a monitor, or an estimation of it, can be
retrieved with @ref glfwGetMonitorPhysicalSize.
2013-05-27 21:58:33 +02:00
@code
int widthMM, heightMM;
glfwGetMonitorPhysicalSize(monitor, &widthMM, &heightMM);
@endcode
2013-06-17 12:56:36 +02:00
This can, for example, be used together with the current video mode to calculate
the DPI of a monitor.
@code
const double dpi = mode->width / (widthMM / 25.4);
@endcode
2013-05-27 21:58:33 +02:00
2014-04-23 13:30:11 +02:00
@subsection monitor_pos Virtual position
2013-05-27 21:58:33 +02:00
2014-04-23 13:30:11 +02:00
The position of the monitor on the virtual desktop, in screen coordinates, can
be retrieved with @ref glfwGetMonitorPos.
@code
int xpos, ypos;
glfwGetMonitorPos(monitor, &xpos, &ypos);
@endcode
@subsection monitor_name Human-readable name
2014-09-18 15:03:29 +02:00
The human-readable, UTF-8 encoded name of a monitor is returned by @ref
glfwGetMonitorName. See the reference documentation for the lifetime of the
returned string.
2013-05-27 21:58:33 +02:00
@code
const char* name = glfwGetMonitorName(monitor);
@endcode
2014-09-18 15:03:29 +02:00
Monitor names are not guaranteed to be unique. Two monitors of the same model
and make may have the same name. Only the monitor handle is guaranteed to be
unique, and only until that monitor is disconnected.
2013-05-27 21:58:33 +02:00
2014-04-23 13:30:11 +02:00
@subsection monitor_gamma Gamma ramp
2013-05-27 21:58:33 +02:00
The gamma ramp of a monitor can be set with @ref glfwSetGammaRamp, which accepts
a monitor handle and a pointer to a @ref GLFWgammaramp structure.
@code
2014-04-23 13:30:11 +02:00
GLFWgammaramp ramp;
unsigned short red[256], green[256], blue[256];
ramp.size = 256;
ramp.red = red;
ramp.green = green;
ramp.blue = blue;
for (i = 0; i < ramp.size; i++)
{
// Fill out gamma ramp arrays as desired
}
2013-05-27 21:58:33 +02:00
glfwSetGammaRamp(monitor, &ramp);
@endcode
2014-04-23 13:30:11 +02:00
The gamma ramp data is copied before the function returns, so there is no need
to keep it around once the ramp has been set.
@note It is recommended to use gamma ramps of size 256, as that is the size
2014-09-18 15:03:29 +02:00
supported by all graphics cards on all platforms.
2014-04-23 13:30:11 +02:00
2014-09-18 15:03:29 +02:00
The current gamma ramp for a monitor is returned by @ref glfwGetGammaRamp. See
the reference documentation for the lifetime of the returned structure.
2013-05-27 21:58:33 +02:00
@code
const GLFWgammaramp* ramp = glfwGetGammaRamp(monitor);
@endcode
If you wish to set a regular gamma ramp, you can have GLFW calculate it for you
from the desired exponent with @ref glfwSetGamma, which in turn calls @ref
glfwSetGammaRamp with the resulting ramp.
@code
glfwSetGamma(monitor, 1.0);
@endcode
2013-05-27 17:10:34 +02:00
*/