The viewport transformation is determined by the viewport's
width and height in pixels,
and
, respectively,
and its center
(also in pixels).
The vertex's window coordinates,
, are given by

The factor and offset applied to
encoded by n and f are set
using
void DepthRange ( clampd n, clampd f ) ;
Each of n and f are clamped to lie within
,
as are all arguments of type clampd or clampf.
is taken to be represented in fixed-point with at least
as many bits as there are in the depth buffer of the framebuffer.
We assume that the
fixed-point representation used represents each value
, where
, as
k (e.g. 1.0 is represented in binary as a string of all ones).
Viewport transformation parameters are specified using
void Viewport ( int x, int y, sizei w, sizei h ) ;
where x and y give the x and y
window coordinates of the viewport's lower-left
corner
and w and h give the viewport's width and height, respectively.
The viewport parameters shown in the above equations are found from these
values as
and
;
,
.
Viewport width and height are clamped to implementation-dependent maximums when specified. The maximum width and height may be found by issuing an appropriate Get command (see Chapter 6). The maximum viewport dimensions must be greater than or equal to the visible dimensions of the display being rendered to. INVALID_VALUE is generated if either w or h is negative.
The state required to implement the viewport transformation is 6
integers.
In the initial state,
w and h are set to the width and height,
respectively,
of the window into which the GL is to do its rendering.
and
are set to
and
, respectively.
n and f are set to
and
, respectively.