Back to the OpenGL extension cross reference

GL_ATI_pn_triangles


Name


    ATI_pn_triangles

Name Strings


    GL_ATI_pn_triangles

Contact


    Dan Ginsburg, ATI Research (dginsbur 'at' ati.com)
Alex Vlachos, ATI Research (avlachos 'at' ati.com)

Version


    Last Modified Date: October 11, 2002
Revision: 1.1

Number


    246

Dependencies


    ARB_vertex_program and EXT_vertex_shader affect the definition of 
this extension.

Overview


    ATI_pn_triangles provides a path for enabling the GL to internally 
tessellate input geometry into curved patches. The extension allows the
user to tune the amount of tessellation to be performed on each triangle as
a global state value. The intent of PN Triangle tessellation is
typically to produce geometry with a smoother silhouette and more organic
shape.

The tessellated patch will replace the triangles input into the GL.
The GL will generate new vertices in object-space, prior to geometry
transformation. Only the vertices and normals are required to produce
proper results, and the rest of the information per vertex is interpolated
linearly across the patch.

Issues


    (1) Should this extension mandate the algorithm used to perform 
tessellation?

RESOLVED: Yes, both for performance and so that the resultant
geometry is consistent across implementations.

(2) What geometry modes will be supported for tessellation besides
TRIANGLE based primitives?

RESOLVED: None, only triangle based primitives: triangles, fans,
and strips.

(3) How does this extension interact with the EXT_vertex_shader and
ARB_vertex_program programmable vertex shader extensions?

RESOLVED: The PN Triangle tessellation algorithm requires the
presence of both vertex position and normal. Therefore, if an
application enables PN Triangle tessellation and has a programmable
vertex shader enabled, that shader should export the fixed-function
equivalent of position and normal. If the shader does not export
either the position or normal, then the results of PN Triangle
tessellation are undefined.


New Procedure and Functions


    PNTrianglesiATI(enum pname, int param)
PNTrianglesfATI(enum pname, float param)


New Tokens


    Accepted by the <target> Enable, Disable, and IsEnabled:

PN_TRIANGLES_ATI 0x87F0

Accepted by the <value> parameter of GetBooleanv, GetIntegerv,
GetFloatv, and GetDoublev:

MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1

Accepted by the <pname> parameter of PNTriangles[if]ATI,
GetBooleanv, GetDoublev, GetFloatv, and GetIntegerv:

PN_TRIANGLES_POINT_MODE_ATI 0x87F2
PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3
PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4

Accepted by the <param> parameter of PNTriangles[if]ATI
when <pname> is PN_TRIANGLES_POINT_MODE_ATI:

PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5
PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6

Accepted by the <param> parameter of PNTriangles[if]ATI
when <pname> is PN_TRIANGLES_NORMAL_MODE_ATI:

PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7
PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8


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


    None

Additions to Chapter 3 if the OpenGL 1.2.1 Specification (Rasterization):


    Add a new section "PN Triangles" after "3.10 Fog" and before "3.11 
Antialiasing Application":

"3.11 PN Triangles

When PN Triangle generation is enabled, each triangle-based geometric
primitive is replaced with a new curved surface using the primitive
vertices as control points. The intent of PN Triangles
are to take a set of triangle-based geometry and algorithmically
tessellate it into a more organic shape with a smoother silhouette.
The new surface can either linearly or quadratically interpolate the
normals across the patch. The vertices can be either linearly or
cubically interpolated across the patch. Linear interpolation
of the points would be useful for getting more sample points for
lighting on the same geometric shape. All other vertex information
(colors, texture coordinates, fog coordinates, and vertex weights) are
interpolated linearly across the patch.

PN Triangle generation is enabled and disabled with the Enable and Disable
commands using the symbolic constant PN_TRIANGLES_ATI. The level of
tessellation to be performed is specified as the number of evaluation
points on each edge. Specifying 0 would use the original triangle, 1
would generate one new point on each edge of the triangle, and so forth.

The tessellation level and normal generation mode are specified with:

void PNTriangles{if}ATI(enum pname, T param)

If <pname> is PN_TRIANGLES_NORMAL_MODE_ATI then <param> must be one of the
symbolic constants PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI or
PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI which will select linear or
quadratic normal interpolation respectively. If <pname> is
PN_TRIANGLES_POINT_MODE_ATI then <param> must be one of the symbolic
constants PN_TRIANGLES_POINT_MODE_LINEAR_ATI or
PN_TRIANGLES_POINT_MODE_CUBIC_ATI which will select linear or cubic
interpolation respectively. If <pname> is
PN_TRIANGLES_TESSELATION_LEVEL_ATI then <param> should be a value
specifying the number of evaluation points on each edge. This value must be
greater than 0 and less than or equal to the value given by
MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI. An INVALID_VALUE error will be
generated if the value for <param> is less than zero or greater than the max
value.

If either VERTEX_SHADER_EXT or VERTEX_SHADER_ARB are enabled, then the
shader specified by the application must export both the position and normal
in order for PN triangle tessellation to work correctly. If either the
position or normal are not exported by the vertex shader then the result of
PN triangle tessellation is undefined."

Additions to Chapter 4:


    None

Additions to Chapter 5:


    None

Additions to Chapter 6:


    None

Additions to the GLX Specification


    None

GLX Protocol


    None

Errors


    INVALID_VALUE is generated if the <param> parameter for 
PNTriangles{if}ATI is less than zero or greater than
the value given for MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI
when <pname> is PN_TRIANGLES_TESSELATION_LEVEL_ATI.

New State


    New table after Table 6.6 Fog:

"Table 6.7 PN Triangles:

Get Value Get Command Type Initial Value Attribute
--------- ----------- ---- ------------- ---------
PN_TRIANGLES_ATI IsEnabled B False PN Triangles/enable
PN_TRIANGLES_NORMAL_MODE_ATI GetIntegerv Z2 PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI PN Triangles
PN_TRIANGLES_POINT_MODE_ATI GetIntegerv Z2 PN_TRIANGLES_POINT_MODE_CUBIC_ATI PN Triangles
PN_TRIANGLES_TESSELATION_LEVEL_ATI GetIntegerv Z+ 1 PN Triangles


Modified state in Table 6.25:

Get Value Get Command Type Minimum Value Attribute
--------- ----------- ---- ------------ ---------
MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI GetIntegerv Z+ 1 -
"


New Implementation Dependent State


    None

Revision History


    Date: 11/11/2002
Revision: 1.1

- Added issue and documentation that describes interaction between
PN Triangles and vertex shaders.

Date: 8/21/2001
Revision: 1.0

- First published version



Implementation Support


   List of OpenGL implementations supporting the GL_ATI_pn_triangles extension

Original File


   Original text file for the GL_ATI_pn_triangles extension


Page generated on Sun Nov 20 18:40:28 2005