
Name

    SGIX_subdiv_patch

Name Strings

    GL_SGIX_subdiv_patch

Version:

    $Date: 1999/12/28 01:40:36 $ $Revision: 1.4 $

Number

    XXX

Dependencies

    None

Overview:

    This extension provides support for rendering subdivision surfaces.
    Subdivision surfaces are defined as a repeated refinement of an
    initial control mesh. The direct and simple representation of a surface
    is attractive for rendering, where trimming bottlenecks can be avoided.
    The key strengths of subdivision surfaces are:

        - Ability to render arbitrary meshes.
        - Geometry compression, which is evident by the virtue of refinement.
        - Continuous LOD control, that relieves the application from keeping
        multiple geometry definitions, per-frame.

    Triangular mesh representation is more convenient for rendering and is
    considered first. Other representations as well as non-triangular ones
    can be considered in a separate extension.

    The API is mainly concerned with a geometrical primitive extracted from
    the base mesh. The primitive is a topological definition for a triangle
    pair and all its neighboring vertices. In addition, vertices and
    edges may be tagged for representing sharp features. This primitive
    is called the 'subdivision patch..

Issues:

    * We can reduce tokens for defining sharp vertices and have the
    implementation detect most of the tags. Is that the right trade off?

    * Is a per-corner maximum valence criteria preferred? (compared to
    accumulative criteria)

    * How do we fare against the recently presented surface simplification?

    * View dependency is simple per-object but complex for partials.

    * There seems to be a de-facto standard evolving in the industry
    which uses quadrilaterals as the base primitive. Currently, we are
    providing Loop's technique. The API (for the  most part) remains
    the same. Shall we expose both techniques?

TODO:

    * fragment light space dependencies (e.g. tangent and binorm).

New Procedures and Functions:

    void glSubdivPatchSGIX(const void **vertexData,
                        const void **vertexTag,
                        const void **edgeTag);
    void glSubdivPatchParameterfSGIX(GLenum pname, GLfloat param);
    void glSubdivPatchParameteriSGIX(GLenum pname, GLint param);

New Tokens:

    Accepted by vertexTag:

        GL_SUBDIVPATCH_SMOOTH_SGIX
        GL_SUBDIVPATCH_DART_BIT_SGIX
        GL_SUBDIVPATCH_CREASE_REGULAR_BIT_SGIX
        GL_SUBDIVPATCH_CREASE_IRREGULAR_BIT_SGIX
        GL_SUBDIVPATCH_CORNER_BIT_SGIX
        GL_SUBDIVPATCH_CONICAL_BIT_SGIX

    Accepted by edgeTag:

        GL_SUBDIVPATCH_SMOOTH_SGIX
        GL_SUBDIV_PATCH_SHARP_BIT_SGIX

    Accepted by the <pname> parameter of glSubdivPatchParameteriSGIX or
    glSubdivPatchParameterfSGIX are:

        GL_SUBDIVPATCH_LEVEL_SGIX
        GL_SUBDIVPATCH_FORMAT_SGIX

    Accepted by the <param> parameter GL_SUBDIVPATCH_FORMAT_SGIX of
    glSubdivPatchParameteriSGIX or glSubdivPatchParameterfSGIX are:

        GL_V3F
        GL_C3F_V3F
        GL_T2F_V3F
        GL_T2F_C3F_V3F

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

        GL_SUBDIVPATCH_LEVEL_SGIX
        GL_SUBDIVPATCH_FORMAT_SGIX
        GL_SUBDIVPATCH_VALENCE_MAX

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

    None

Additions to Chapter 3 of the 1.0 Specification (Rasterization):

    None

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):

    5.7 Subdivision Surfaces

    [This part to be filled out with operation details.]

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

    None

Additions to the GLX Specification:

    None

Dependencies on SGI_extension_name:

    None

Errors:

    INVALID_ENUM is generated if the <pname> parameter is
    not GL_SUBDIVPATCH_LEVEL_SGIX or GL_SUBDIVPATCH_FORMAT_SGIX.

    INVALID_ENUM is generated if the <param> parameter is not
    one of GL_V3F, GL_C4UB_V3F, GL_T2F_V3F, or GL_T2F_C4UB_V3F, when the
    <pname> parameter is GL_SUBDIVPATCH_FORMAT_SGIX.

    INVALID_OPERATION is generated if any of the valence counts exceeds
    GL_SUBDIVPATCH_VALENCE_MAX_SGIX.

New State:

    Get Value                   Get Command     Type    Initial Value
    ---------                   -----------     ----    ------------
    GL_SUBDIVPATCH_LEVEL_SGIX   GetFloatv       F       3
    GL_SUBDIVPATCH_FORMAT_SGIX  GetIntegerv     I       GL_V3F

New Implementation Dependent State

    None

