
The graphics module provides the ability to create and 'flip' graphics objects.

A graphics object represents a rectangular area you can render to. However, the graphics module
does not provide any commands for actual rendering - this is left to other modules such as 
#max2D to implement.

The graphics module maintains 2 'current' objects - the current graphics driver and the currect
graphics object. To change the current graphics driver, use #SetGraphicsDriver. To change the
current graphics object, use #SetGraphics.

To create a graphics object, use either #Graphics or #CreateGraphics. The kind of graphics 
object created will depend upon the current graphics driver. For example, the following code:
{{
SetGraphicsDriver GLGraphicsDriver()
Local g:TGraphics=CreateGraphics( 640,480,32,60,GRAPHICS_BACKBUFFER )
}}
Will create an OpenGL graphics object.

You can 'select' this object for rendering using:
{{
SetGraphics g			'we can now execute OpenGL code
glClearColor .5,0,1,1		'tada!
glClear				'yes!
Flip				'must do this as the graphics is double buffered
}}
One you have finished with a graphics object, use #CloseGraphics to close it.

#Graphics and #CreateGraphics both accept the following parameters: @width, @height, @depth,
@hertz and @flags.

The @width and @height parameters specify the dimensions of the graphics, in pixels.

The @depth parameter selects a pixel bit depth. This value can be 0, 16, 24 or 32 depending 
on the graphics modes available. A depth of 0 can be used to select 'windowed mode' graphics,
while non-0 depths select 'fullscreen' graphics.

The @hertz parameter selects a refresh rate, which refers to the number of times the screen
refreshes per second. The refresh rates available depend on the graphics modes available, 
which differ from graphics card to graphics card. Note that creating graphics with an 
unsupported refresh rate will not fail - instead, a default refresh rate will be used.

The #Graphics command can be used to achieve a fixed refresh rate. When using #Flip to 
present such graphics, BlitzMax will guarantee the desired refresh rate is honored regardless
of the available hardware's capabilities. This is achieved by using software timing 
techniques when necessary.

The @flags parameter can be any combination of the following:
[ @Flags | @Meaning
* GRAPHICS_BACKBUFFER | Create graphics with a back buffer
* GRAPHICS_ALPHABUFFER | Create graphics with an alpha buffer
* GRAPHICS_DEPTHBUFFER | Create graphics with a depth buffer
* GRAPHICS_STENCILBUFFER | Create graphics with a stencil buffer
* GRAPHICS_ACCUMBUFFER | Create graphics with an accumulation buffer
]
Flags can be combined with the | (or) operator. For example, GRAPHICS_BACKBUFFER|GRAPHICS_DEPTHBUFFER
can be used to create graphics which has both a back buffer and a depth buffer.

Graphics created with the GRAPHICS_BACKBUFFER flag must be 'flipped' after you have finished
rendering using #Flip.
