Name

    IBM_cull_vertex

Name Strings

    GL_IBM_cull_vertex

Version

    IBM Id: cull_vertex.spec,v 1.4 2000/02/11 15:11:46 brokensh Exp 

Number

    199

Dependencies

    EXT_cull_vertex affects the definition of this extension

Overview

    IBM_cull_vertex provides a subset of the vertex culling functionality
    found in EXT_cull_vertex without providing a guarantee that faces will
    be culled because of it.  EXT_cull_vertex is a technically superior
    solution, but the vertex culling aspect of IBM_cull_vertex provides
    generally useful function cheaply (without imposing the mandated
    culling found in EXT_cull_vertex).

Issues

  * Should the application be allowed to specify eye direction explicitly,
    as is the case in EXT_cull_vertex?  Not in this specification;
    addressed by the full EXT_cull_vertex extension.

  * Should a control be provided to reverse the eye direction, which would
    be necessary to cull correctly if DepthRange is specified with near >
    far?  Or if the normals specified were reversed?  FrontFace could be
    used in combination with two sided lighting to produce realistic
    lighting effects if the normals were consistenly reversed.  Neither is
    addressed in the current specification.  Both are addressed by
    EXT_cull_vertex. 

  * Should a control be provided to perform vertex culling with a local eye
    position?  Not in this specification; addressed by EXT_cull_vertex.

  * Should forward compatibility between IBM_cull_vertex and
    EXT_cull_vertex be provided (i.e., applications must change if/when we
    fully implement EXT_cull_vertex)?  Probably not.

New Procedures and Functions

    None

New Tokens

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

      CULL_VERTEX_IBM                           103050

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

    Before the discussion of Clipping, add a description of vertex culling
    similar to that found in the EXT_cull_vertex extension:

    Vertex Culling

    When vertex culling is enabled, vertices are classified as front or
    back facing according to the sign of the dot product between the normal
    at the vertex and an eye direction vector from the vertex toward the
    eye position.  When (normal dot eye_direction) <= 0 the vertex is
    classified as back facing.  When (normal dot eye_direction) > 0 the
    vertex is classified as front facing.  Vertices are culled when the
    face orientation determined by the dot product is the same as the face
    specified by CullFace.  When all of the vertices of a polygon are
    culled, then the polygon may be culled.  Unlike EXT_cull_vertex, vertex
    culling using IBM_cull_vertex does not necessarily result in polygons
    being culled even if all of the vertices of the polygon are culled.

    The eye direction is determined by transforming the column vector (0,
    0, 1) by the upper leftmost 3x3 matrix taken from the inverse of the
    modelview matrix.  The eye direction is undefined if the modelview
    matrix is singular or nearly singular.  This operation in effect
    projects the z axis in eye coordinates back into object space.  If the
    projection matrix or DepthRange settings cause the z axis in window
    coordinates to be misaligned with the z axis in eye coordinates, this
    extension should not be used.

    Vertex culling is performed independently of face culling.  Polygons on
    the silhouettes of objects may have both front and back facing
    vertices.  Since polygons are culled only if all of their vertices are
    culled and are not necessarily culled by IBM_cull_vertex even in that
    case, face culling may have to be used in addition to vertex culling in
    order to correctly cull silhouette polygons.

Additions to Chapter 3 of the GL Specification (Rasterization)

    None

Additions to Chapter 4 of the GL Specification (Per-Fragment Operations
and the Framebuffer)

    None

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

    None

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

    None

Additions to the GLX Specification

    None

GLX Protocol

    None.

Errors

    None

New State

    Get Value			  Type Get Command  Value Sec	Attrib
    ----------------------------- ---- -----------  ----- ----	-------
    CULL_VERTEX_IBM               B    IsEnabled    FALSE --    transform/
                                                                enable

New Implementation Dependent State

    None
