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 parameter to GetIntegerv: POLYGON_MODE_NV 0x0B40 Accepted by the parameter to IsEnabled: POLYGON_OFFSET_POINT_NV 0x2A01 POLYGON_OFFSET_LINE_NV 0x2A02 Returned by GetIntegerv, GetFloatv, and GetInteger64v when 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 ); must be FRONT_AND_BACK, indicating that the rasterizing method described by replaces the rasterizing method for both front- and back-facing polygons. 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 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 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 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, 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, 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 is not FRONT_AND_BACK. An INVALID_ENUM error is generated by PolygonModeNV if 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.