Name

    NV_polygon_mode

Name Strings

    GL_NV_polygon_mode

Contact

    James Helferty, NVIDIA Corporation (jhelferty 'at' nvidia.com)

Contributors

    James Helferty, NVIDIA Corporation
    Daniel Koch, NVIDIA Corporation

Status

    Complete

Version

    Last Modified Date:         June 4, 2024
    Revision:                   2

Number

    OpenGL ES Extension #238

Dependencies

    This extension is written against the OpenGL ES 3.1 (June 4, 2014)
    specification, but can apply to earlier versions.

    This extension trivially interacts with NV_draw_texture

Overview

    This extension adds a PolygonModeNV entry point which can be used to change
    the polygon rasterization method. Using this extension, state consistent
    with rendering triangle primitives can trivially be toggled to render
    primitives as lines or points. In addition, independent enables are
    provided for polygon offset in conjunction with these new point and line
    polygon modes.

    This introduces a level of support for PolygonMode comparable with the
    OpenGL 4.3 core profile.

New Procedures and Functions

    void PolygonModeNV(enum face, enum mode);

New Tokens

    Accepted by the <pname> parameter to GetIntegerv:

        POLYGON_MODE_NV                             0x0B40

    Accepted by the <cap> parameter to Enable, Disable, IsEnabled:

        POLYGON_OFFSET_POINT_NV                     0x2A01
        POLYGON_OFFSET_LINE_NV                      0x2A02

    Returned by GetIntegerv, GetFloatv, and GetInteger64v when <pname> is
    POLYGON_MODE_NV:

        POINT_NV                                    0x1B00
        LINE_NV                                     0x1B01
        FILL_NV                                     0x1B02

Additions to Chapter 13 of the OpenGL 3.1 Specification (Fixed-Function
Primitive Assembly and Rasterization)

    Insert new section 13.5.1pm, "Options Controlling Polygon Rasterization"
    between section 13.5.1 and 13.5.2:

    The interpretation of polygons for rasterization is controlled using

        void PolygonModeNV( enum face, enum mode );

    <face> must be FRONT_AND_BACK, indicating that the rasterizing method
    described by <mode> replaces the rasterizing method for both front- and
    back-facing polygons. <mode> is one of the symbolic constants POINT_NV,
    LINE_NV, or FILL_NV. Calling PolygonModeNV with POINT_NV causes the
    vertices of a polygon to be treated, for rasterization purposes, as if they
    had been drawn with <mode> POINTS. LINE_NV causes edges to be rasterized as
    line segments. FILL_NV is the default mode of polygon rasterization,
    corresponding to the description in section 13.5.1.  Note that these modes
    affect only the final rasterization of polygons: in particular, a polygon's
    vertices are lit, and the polygon is clipped and possibly culled before
    these modes are applied.

    Modify Section 13.5.2, "Depth Offset" as follows:

    Replace the second-last paragraph that begins "Boolean state value
    POLYGON_OFFSET_FILL determines whether <o> is applied during the
    rasterization of polygons..." with:

    Boolean state values POLYGON_OFFSET_POINT_NV, POLYGON_OFFSET_LINE_NV, and
    POLYGON_OFFSET_FILL determine whether <o> is applied during the
    rasterization of polygons in POINT_NV, LINE_NV, and FILL_NV modes. These
    boolean state values are enabled and disabled as argument values to the
    commands Enable and Disable.  If POLYGON_OFFSET_POINT_NV is enabled, <o> is
    added to the depth value of each fragment produced by the rasterization of
    a polygon in POINT_NV mode.  Likewise, if POLYGON_OFFSET_LINE_NV or
    POLYGON_OFFSET_FILL is enabled, <o> is added to the depth value of each
    fragment produced by the rasterization of a polygon in LINE_NV or FILL_NV
    modes, respectively.

    Modify Section 13.5.3, "Polygon Multisample Rasterization" as follows:

    Append the paragraph:

    The rasterization described above applies only to the FILL_NV state of
    PolygonModeNV. For POINT_NV and LINE_NV, the rasterizations described in
    sections 13.3.2 (Point Multisample Rasterization) and 13.4.4 (Line
    Multisample Rasterization) apply.

    Modify Section 13.5.4 "Polygon Rasterization State"

    The state required for polygon rasterization consists of whether point,
    line, and fill mode polygon offsets are enabled or disabled, and the factor
    and bias values of the polygon offset equation. The initial polygon offset
    factor and bias values are both 0; initially polygon offset is disabled for
    all modes. The initial state for PolygonModeNV is FILL_NV.

Additions to Chapter 15 of the OpenGL 3.1 Specification (Writing Fragments and
Samples to the Framebuffer)

    Modify Section 15.1.4, "Stencil Test" as follows:

    Replace the third paragraph with:

    There are two sets of stencil-related state, the front stencil state set
    and the back stencil state set. Stencil tests and writes use the front set
    of stencil state when processing fragments rasterized from non-polygon
    primitives (points and lines) and front-facing polygon primitives while the
    back set of stencil state is used when processing fragments rasterized from
    back-facing polygon primitives. For the purposes of stencil testing, a
    primitive is still considered a polygon even if the polygon is to be
    rasterized as points or lines due to the current polygon mode. Whether a
    polygon is front- or back-facing is determined in the same manner used for
    face culling (see section 13.5.1).

Interactions with NV_draw_texture

    In NV_draw_texture, change references to PolygonMode to PolygonModeNV, and
    disregard the interaction ignoring PolygonMode for ES.

New State

    Modify Table 20.6, Rasterization

    Add:

                                          Initial
    Get Value               Type Get Command  Value  Description                  Sec.
    ----------------------- ---- ----------- ------- --------------------------- ------
    POLYGON_MODE_NV          E   GetIntegerv FILL_NV Polygon rasterization mode  13.5.1pm
                                                     (front & back)
    POLYGON_OFFSET_POINT_NV  B   IsEnabled   FALSE   Polygon offset enable for   13.5.2
                                                     POINT_NV mode rasterization
    POLYGON_OFFSET_LINE_NV   B   IsEnabled   FALSE   Polygon offset enable for   13.5.2
                                                     LINE_NV mode rasterization

    Change description for POLYGON_OFFSET_FILL to "Polygon offset enable for
    FILL_NV mode rasterization"

Errors

    An INVALID_ENUM error is generated by PolygonModeNV if <face> is not
    FRONT_AND_BACK.

    An INVALID_ENUM error is generated by PolygonModeNV if <mode> is not one of
    POINT_NV, LINE_NV, or FILL_NV.

Issues

    1. How does PolygonModeNV interact with tessellation shaders?

    See Issue 29 of ARB_tessellation_shader.

Revision History

    Rev.    Date    Author     Changes
    ----  --------  ---------  -----------------------------------------
     2    06/04/24  tysons     Correct New Token parameter name and add
                               Enable and Disable
     1    09/10/14  jhelferty  Initial revision.
