
Name

    SGIX_framezoom

Name Strings

    GL_SGIX_framezoom

Version

    $Date: 1996/03/08 18:16:44 $ $Revision: 1.4 $

Number

    57

Dependencies

    none.

Overview

    This extension provides a additional way to rasterize geometric
    primitives and pixel rectangles.  The techique is to reduce the
    number of pixels rasterized  and (possibly) the number of depth and
    stencil operations performed per primitive.  Each pixel is zoomed
    up and used to render an N x N block of screen pixels.  The
    implementation is free to choose the number of stencil and z pixels
    that will correspond to each N x N block.

    This extension provides an opportunity to the implementation to
    perform expensive raster operations at a reduced resolution,
    increasing performance.  Such operations may include
    texture-mapping, depth & stencil tests, etc.  The hardware should
    be allowed to perform operations that it accelerates at full
    hardware speed.

    The visual result will be the same as if a scene were rendered into
    a small window, and then that buffer was copied and zoomed up into
    a large window.

    All OpenGL parameters that effect rasterization size will implicitly
    be multipled by N (this includes point size, line width, etc).

Issues

    * What happens with zoomed (polygon/line) stippled pattern?


New Procedures and Functions

    void FrameZoomSGIX(GLint factor);

New Tokens

    Accepted by the <cap> parameter of Enable, Disable, and IsEnabled, and
    by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, and
    GetDoublev:

	FRAMEZOOM_SGIX
	
    Accepted by the <pname> parameter of GetBooleanv, GetDoublev,
    GetIntegerv, and GetFloatv:

	FRAMEZOOM_FACTOR_SGIX
	MAX_FRAMEZOOM_FACTOR_SGIX

Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation)

    None

Additions to Chapter 3 of the 1.0 Specification (Rasterization)

    If FRAMEZOOM_SGIX is off, the rasterization algorithm is unchanged.

    If FRAMEZOOM_SGIX is on, the rasterization of geometric primitives
    is modified as follows:

    Rasterization is performed as if the viewport has shrunk down by
    factor of FRAMEZOOM_FACTOR_SGIX.  The viewport itself will not
    change. Then, at an undefined stage after primitive rasterization,
    the resulting fragments will be zoomed up by the same factor.  That
    stage is underfined since some of the later rasterization stages
    (ie. blending, dithering, z buffering, etc.) may be implemented in
    hardware, and hence have to be performed after the zoom.  This
    flexibility is present to allow the implementation to take maximum
    advantage of the hardware.

    The zoom process will produce N x N fragments (where N is
    FRAMEZOOM_FACTOR_SGIX) that differ in their x and y coordinates,
    are organized in a square, and try to approximate the features of
    the original rasterization (with subsampling disabled).  The center
    of the subsampled fragment is guaranteed to fall somewhere inside
    the resulting rectangle of fragments.  No additional guarantees are
    made concerning the position of the resulting fragments, except
    that the position of the subsampled fragment will be consistent
    across pixels during the primitive rasterization.

    Since rasterization is performed as if the viewport has shrunk by a
    factor of FRAMEZOOM_FACTOR_SGIX, all parameters that alter fragment
    generation in screen coordinates (ie. point size, line width, line
    stippled, polygon stipple) will look like they now affect a larger
    area (by FRAMEZOOM_FACTOR_SGIX) in the screen.  Ie. points and
    lines will render roughly as many pixels as if point size and line
    width were multiplied by FRAMEZOOM_FACTOR_SGIX, and glDrawPixels
    will operate as if the pixel zoom specified was multiplied by
    FRAMEZOOM_FACTOR_SGIX.

    A change in the value of FRAMEZOOM_FACTOR_SGIX, or a change in the
    state of FRAMEZOOM_SGIX, has the same semantics to the ancillary
    stencil and z buffers as a resize.  Basically, the contents of
    these buffers will be undefined till the next clear of that
    ancillary buffer.

    Any specified value of FRAMEZOOM_FACTOR_SGIX will be clampled to
    the device dependent value of MAX_FRAMEZOOM_FACTOR_SGIX.  The value
    of MAX_FRAMEZOOM_FACTOR_SGIX may not be constant and may vary
    during the execution of a GL program.  For example, a certain
    implementation may not support subsampled rendering when rendering
    in the front color buffer.  In that case, MAX_FRAMEZOOM_FACTOR_SGIX
    will be 1 when glDrawBuffer specifies a front buffer, or when the
    visual on the window is single buffered.  In that case, the value
    of FRAMEZOOM_FACTOR_SGIX will be clamped to 1, ie. no subsampling
    performed.


Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations
and the Frame Buffer)

    None (?)

Additions to Chapter 5 of the 1.0 Specification (Special Functions)

    None

Additions to Chapter 6 of the 1.0 Specification (State and State Requests)

    One more state variable, FRAMEZOOM_FACTOR_SGIX is defined by this
    extension.

Additions to the GLX Specification

    None.

GLX Protocol

    ???

Errors

    INVALID_VALUE is generated if the combination of parameters passed
    to FrameZoomSGIX are not supported.

New State

    Get Value			Get Command	Type	Initial Value	Attribute
    ---------			-----------	----	-------------	---------
    FRAMEZOOM_SGIX		IsEnabled	B	FALSE		??

New Implementation Dependent State

    Get Value			Get Command	Type	Minimum Value
    ---------			-----------	----	-------------
    FRAMEZOOM_FACTOR_SGIX	GetIntegerv	Z+	1
    MAX_FRAMEZOOM_FACTOR_SGIX	GetIntegerv	Z+	1

