NV_polygon_mode

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:         Sept 11, 2014
Revision:                   1

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 <pname> parameter to 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
----  --------  ---------  -----------------------------------------
 1    09/10/14  jhelferty  Initial revision.