@section(1 displays Displays)
  All drawing operations end up being visible on a display which is the same as a window in windowed environments. Thus, before anything is displayed, a display needs to be created.

  Before creating a display with @link(al_create_display), flags and options can be set with @link(al_set_new_display_flags) and @link(al_set_new_display_option). For example, you can enable the use of shaders or choose between the OpenGL and Direct3D backends (on platforms that support both) with @code(al_set_new_display_flags). Display options are rather optional settings that do not affect Allegro itself, e.g. they allow you to specify whether you want a depth buffer or enable multisampling.

  The actual properties of a display that has been successfully created can be queried via @link(al_get_display_option), @link(al_get_display_flags), @link(al_get_display_width) etc. Note that you can query some additional read-only properties such as the maximum allowed bitmap (i.e. texture) size via @link(al_get_display_option).

  Each display has a backbuffer associated to it which is the default target for any drawing operations. In order to make visible what has been drawn previously, you have to to call @link(al_flip_display). Note that it is generally advisable to redraw the whole screen (or clear it in advance) to avoid artefacts of uninitialised memory becoming visible with some drivers.

  You don't have to use Allegro's drawing routines, however: since creating a display implies the creation of an OpenGL context or Direct3D device respectively, you can use these APIs directly if you prefer to do so. Allegro provides integration for both (see the OpenGL / Direct3D sections), so you can retrieve the underlying textures of @link(ALLEGRO_BITMAPptr ALLEGRO_BITMAPs), for example.

  In order to write a well-behaved application, it is necessary to remember that displays will also inform you about important events via their event sources.
