15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    ATI_pn_triangles
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_ATI_pn_triangles
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContact
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Dan Ginsburg, AMD (dan.ginsburg 'at' amd.com)
125bd8deadSopenharmony_ci    Alex Vlachos
135bd8deadSopenharmony_ci
145bd8deadSopenharmony_ciVersion
155bd8deadSopenharmony_ci
165bd8deadSopenharmony_ci    Last Modified Date: November 4, 2006
175bd8deadSopenharmony_ci    Revision: 1.2
185bd8deadSopenharmony_ci
195bd8deadSopenharmony_ciNumber
205bd8deadSopenharmony_ci
215bd8deadSopenharmony_ci    246
225bd8deadSopenharmony_ci
235bd8deadSopenharmony_ciDependencies
245bd8deadSopenharmony_ci
255bd8deadSopenharmony_ci    ARB_vertex_program and EXT_vertex_shader affect the definition of 
265bd8deadSopenharmony_ci    this extension.
275bd8deadSopenharmony_ci
285bd8deadSopenharmony_ciOverview
295bd8deadSopenharmony_ci
305bd8deadSopenharmony_ci    ATI_pn_triangles provides a path for enabling the GL to internally 
315bd8deadSopenharmony_ci    tessellate input geometry into curved patches.  The extension allows the 
325bd8deadSopenharmony_ci    user to tune the amount of tessellation to be performed on each triangle as 
335bd8deadSopenharmony_ci    a global state value.  The intent of PN Triangle tessellation is 
345bd8deadSopenharmony_ci    typically to produce geometry with a smoother silhouette and more organic 
355bd8deadSopenharmony_ci    shape.
365bd8deadSopenharmony_ci
375bd8deadSopenharmony_ci    The tessellated patch will replace the triangles input into the GL.  
385bd8deadSopenharmony_ci    The GL will generate new vertices in object-space, prior to geometry 
395bd8deadSopenharmony_ci    transformation.  Only the vertices and normals are required to produce 
405bd8deadSopenharmony_ci    proper results, and the rest of the information per vertex is interpolated 
415bd8deadSopenharmony_ci    linearly across the patch.  
425bd8deadSopenharmony_ci
435bd8deadSopenharmony_ciIssues
445bd8deadSopenharmony_ci
455bd8deadSopenharmony_ci    (1) Should this extension mandate the algorithm used to perform 
465bd8deadSopenharmony_ci        tessellation?
475bd8deadSopenharmony_ci	
485bd8deadSopenharmony_ci        RESOLVED: Yes, both for performance and so that the resultant 
495bd8deadSopenharmony_ci        geometry is consistent across implementations.
505bd8deadSopenharmony_ci
515bd8deadSopenharmony_ci    (2) What geometry modes will be supported for tessellation besides 
525bd8deadSopenharmony_ci        TRIANGLE based primitives? 
535bd8deadSopenharmony_ci
545bd8deadSopenharmony_ci        RESOLVED: None, only triangle based primitives: triangles, fans, 
555bd8deadSopenharmony_ci        and strips.
565bd8deadSopenharmony_ci
575bd8deadSopenharmony_ci    (3) How does this extension interact with the EXT_vertex_shader and 
585bd8deadSopenharmony_ci        ARB_vertex_program programmable vertex shader extensions?
595bd8deadSopenharmony_ci
605bd8deadSopenharmony_ci        RESOLVED: The PN Triangle tessellation algorithm requires the 
615bd8deadSopenharmony_ci        presence of both vertex position and normal.  Therefore, if an 
625bd8deadSopenharmony_ci        application enables PN Triangle tessellation and has a programmable 
635bd8deadSopenharmony_ci        vertex shader enabled, that shader should export the fixed-function 
645bd8deadSopenharmony_ci        equivalent of position and normal.  If the shader does not export
655bd8deadSopenharmony_ci        either the position or normal, then the results of PN Triangle
665bd8deadSopenharmony_ci        tessellation are undefined.
675bd8deadSopenharmony_ci
685bd8deadSopenharmony_ci
695bd8deadSopenharmony_ciNew Procedure and Functions
705bd8deadSopenharmony_ci
715bd8deadSopenharmony_ci    PNTrianglesiATI(enum pname, int param)
725bd8deadSopenharmony_ci    PNTrianglesfATI(enum pname, float param)
735bd8deadSopenharmony_ci
745bd8deadSopenharmony_ci
755bd8deadSopenharmony_ciNew Tokens
765bd8deadSopenharmony_ci
775bd8deadSopenharmony_ci    Accepted by the <target> Enable, Disable, and IsEnabled:
785bd8deadSopenharmony_ci
795bd8deadSopenharmony_ci      PN_TRIANGLES_ATI                         0x87F0
805bd8deadSopenharmony_ci
815bd8deadSopenharmony_ci    Accepted by the <value> parameter of GetBooleanv, GetIntegerv,
825bd8deadSopenharmony_ci    GetFloatv, and GetDoublev:
835bd8deadSopenharmony_ci
845bd8deadSopenharmony_ci      MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI   0x87F1
855bd8deadSopenharmony_ci
865bd8deadSopenharmony_ci    Accepted by the <pname> parameter of PNTriangles[if]ATI,
875bd8deadSopenharmony_ci    GetBooleanv, GetDoublev, GetFloatv, and GetIntegerv:
885bd8deadSopenharmony_ci   
895bd8deadSopenharmony_ci      PN_TRIANGLES_POINT_MODE_ATI              0x87F2
905bd8deadSopenharmony_ci      PN_TRIANGLES_NORMAL_MODE_ATI             0x87F3
915bd8deadSopenharmony_ci      PN_TRIANGLES_TESSELATION_LEVEL_ATI       0x87F4
925bd8deadSopenharmony_ci
935bd8deadSopenharmony_ci    Accepted by the <param> parameter of PNTriangles[if]ATI
945bd8deadSopenharmony_ci    when <pname> is PN_TRIANGLES_POINT_MODE_ATI:
955bd8deadSopenharmony_ci    
965bd8deadSopenharmony_ci      PN_TRIANGLES_POINT_MODE_LINEAR_ATI       0x87F5
975bd8deadSopenharmony_ci      PN_TRIANGLES_POINT_MODE_CUBIC_ATI        0x87F6
985bd8deadSopenharmony_ci
995bd8deadSopenharmony_ci    Accepted by the <param> parameter of PNTriangles[if]ATI
1005bd8deadSopenharmony_ci    when <pname> is PN_TRIANGLES_NORMAL_MODE_ATI:
1015bd8deadSopenharmony_ci    
1025bd8deadSopenharmony_ci      PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI      0x87F7
1035bd8deadSopenharmony_ci      PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI   0x87F8
1045bd8deadSopenharmony_ci
1055bd8deadSopenharmony_ci    
1065bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 1.2.1 Specification (Operation)
1075bd8deadSopenharmony_ci
1085bd8deadSopenharmony_ci    None
1095bd8deadSopenharmony_ci
1105bd8deadSopenharmony_ciAdditions to Chapter 3 if the OpenGL 1.2.1 Specification (Rasterization):
1115bd8deadSopenharmony_ci
1125bd8deadSopenharmony_ci    Add a new section "PN Triangles" after "3.10 Fog" and before "3.11 
1135bd8deadSopenharmony_ci    Antialiasing Application":
1145bd8deadSopenharmony_ci
1155bd8deadSopenharmony_ci    "3.11 PN Triangles
1165bd8deadSopenharmony_ci
1175bd8deadSopenharmony_ci    When PN Triangle generation is enabled, each triangle-based geometric 
1185bd8deadSopenharmony_ci    primitive is replaced with a new curved surface using the primitive 
1195bd8deadSopenharmony_ci    vertices as control points.  The intent of PN Triangles 
1205bd8deadSopenharmony_ci    are to take a set of triangle-based geometry and algorithmically 
1215bd8deadSopenharmony_ci    tessellate it into a more organic shape with a smoother silhouette. 
1225bd8deadSopenharmony_ci    The new surface can either linearly or quadratically interpolate the 
1235bd8deadSopenharmony_ci    normals across the patch.  The vertices can be either linearly or
1245bd8deadSopenharmony_ci    cubically interpolated across the patch.  Linear interpolation
1255bd8deadSopenharmony_ci    of the points would be useful for getting more sample points for 
1265bd8deadSopenharmony_ci    lighting on the same geometric shape.  All other vertex information
1275bd8deadSopenharmony_ci    (colors, texture coordinates, fog coordinates, and vertex weights) are 
1285bd8deadSopenharmony_ci    interpolated linearly across the patch.
1295bd8deadSopenharmony_ci
1305bd8deadSopenharmony_ci    PN Triangle generation is enabled and disabled with the Enable and Disable 
1315bd8deadSopenharmony_ci    commands using the symbolic constant PN_TRIANGLES_ATI.  The level of 
1325bd8deadSopenharmony_ci    tessellation to be performed is specified as the number of evaluation 
1335bd8deadSopenharmony_ci    points on each edge.  Specifying 0 would use the original triangle, 1 
1345bd8deadSopenharmony_ci    would generate one new point on each edge of the triangle, and so forth.  
1355bd8deadSopenharmony_ci
1365bd8deadSopenharmony_ci    The tessellation level and normal generation mode are specified with:
1375bd8deadSopenharmony_ci
1385bd8deadSopenharmony_ci      void PNTriangles{if}ATI(enum pname, T param)
1395bd8deadSopenharmony_ci
1405bd8deadSopenharmony_ci    If <pname> is PN_TRIANGLES_NORMAL_MODE_ATI then <param> must be one of the 
1415bd8deadSopenharmony_ci    symbolic constants PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI or 
1425bd8deadSopenharmony_ci    PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI which will select linear or
1435bd8deadSopenharmony_ci    quadratic normal interpolation respectively.  If <pname> is 
1445bd8deadSopenharmony_ci    PN_TRIANGLES_POINT_MODE_ATI then <param> must be one of the symbolic 
1455bd8deadSopenharmony_ci    constants  PN_TRIANGLES_POINT_MODE_LINEAR_ATI or 
1465bd8deadSopenharmony_ci    PN_TRIANGLES_POINT_MODE_CUBIC_ATI which will select linear or cubic 
1475bd8deadSopenharmony_ci    interpolation respectively.  If <pname> is 
1485bd8deadSopenharmony_ci    PN_TRIANGLES_TESSELATION_LEVEL_ATI then <param> should be a value 
1495bd8deadSopenharmony_ci    specifying the number of evaluation points on each edge.  This value must be 
1505bd8deadSopenharmony_ci    greater than 0 and less than or equal to the value given by 
1515bd8deadSopenharmony_ci    MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI.  An INVALID_VALUE error will be 
1525bd8deadSopenharmony_ci    generated if the value for <param> is less than zero or greater than the max   
1535bd8deadSopenharmony_ci    value.
1545bd8deadSopenharmony_ci
1555bd8deadSopenharmony_ci    If either VERTEX_SHADER_EXT or VERTEX_SHADER_ARB are enabled, then the 
1565bd8deadSopenharmony_ci    shader specified by the application must export both the position and normal      
1575bd8deadSopenharmony_ci    in order for PN triangle tessellation to work correctly.  If either the   
1585bd8deadSopenharmony_ci    position or normal are not exported by the vertex shader then the result of 
1595bd8deadSopenharmony_ci    PN triangle tessellation is undefined."
1605bd8deadSopenharmony_ci        
1615bd8deadSopenharmony_ciAdditions to Chapter 4:
1625bd8deadSopenharmony_ci
1635bd8deadSopenharmony_ci    None
1645bd8deadSopenharmony_ci
1655bd8deadSopenharmony_ciAdditions to Chapter 5:
1665bd8deadSopenharmony_ci
1675bd8deadSopenharmony_ci    None
1685bd8deadSopenharmony_ci
1695bd8deadSopenharmony_ciAdditions to Chapter 6:
1705bd8deadSopenharmony_ci
1715bd8deadSopenharmony_ci    None
1725bd8deadSopenharmony_ci
1735bd8deadSopenharmony_ciAdditions to the GLX Specification
1745bd8deadSopenharmony_ci
1755bd8deadSopenharmony_ci    None
1765bd8deadSopenharmony_ci
1775bd8deadSopenharmony_ciGLX Protocol
1785bd8deadSopenharmony_ci
1795bd8deadSopenharmony_ci    None
1805bd8deadSopenharmony_ci
1815bd8deadSopenharmony_ciErrors
1825bd8deadSopenharmony_ci
1835bd8deadSopenharmony_ci    INVALID_VALUE is generated if the <param> parameter for 
1845bd8deadSopenharmony_ci       PNTriangles{if}ATI is less than zero or greater than
1855bd8deadSopenharmony_ci       the value given for MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI
1865bd8deadSopenharmony_ci       when <pname> is PN_TRIANGLES_TESSELATION_LEVEL_ATI.  
1875bd8deadSopenharmony_ci
1885bd8deadSopenharmony_ciNew State
1895bd8deadSopenharmony_ci
1905bd8deadSopenharmony_ci    New table after Table 6.6 Fog:
1915bd8deadSopenharmony_ci
1925bd8deadSopenharmony_ci    "Table 6.7  PN Triangles:
1935bd8deadSopenharmony_ci
1945bd8deadSopenharmony_ciGet Value                             Get Command Type    Initial Value                              Attribute
1955bd8deadSopenharmony_ci---------                             ----------- ----    -------------                              --------- 
1965bd8deadSopenharmony_ciPN_TRIANGLES_ATI                      IsEnabled   B       False                                      PN Triangles/enable
1975bd8deadSopenharmony_ciPN_TRIANGLES_NORMAL_MODE_ATI          GetIntegerv Z2      PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI     PN Triangles
1985bd8deadSopenharmony_ciPN_TRIANGLES_POINT_MODE_ATI           GetIntegerv Z2      PN_TRIANGLES_POINT_MODE_CUBIC_ATI          PN Triangles
1995bd8deadSopenharmony_ciPN_TRIANGLES_TESSELATION_LEVEL_ATI    GetIntegerv Z+      1                                          PN Triangles
2005bd8deadSopenharmony_ci
2015bd8deadSopenharmony_ci
2025bd8deadSopenharmony_ci      Modified state in Table 6.25:
2035bd8deadSopenharmony_ci
2045bd8deadSopenharmony_ciGet Value                               Get Command Type     Minimum Value  Attribute
2055bd8deadSopenharmony_ci---------                               ----------- ----     ------------   ---------
2065bd8deadSopenharmony_ciMAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI  GetIntegerv Z+       1              -
2075bd8deadSopenharmony_ci"
2085bd8deadSopenharmony_ci
2095bd8deadSopenharmony_ci
2105bd8deadSopenharmony_ciNew Implementation Dependent State
2115bd8deadSopenharmony_ci
2125bd8deadSopenharmony_ci    None
2135bd8deadSopenharmony_ci
2145bd8deadSopenharmony_ciRevision History
2155bd8deadSopenharmony_ci
2165bd8deadSopenharmony_ci    Date: 11/4/2006
2175bd8deadSopenharmony_ci    Revision: 1.2
2185bd8deadSopenharmony_ci      - Updated contact info after ATI/AMD merger.
2195bd8deadSopenharmony_ci
2205bd8deadSopenharmony_ci    Date: 11/11/2002
2215bd8deadSopenharmony_ci    Revision: 1.1
2225bd8deadSopenharmony_ci
2235bd8deadSopenharmony_ci      - Added issue and documentation that describes interaction between
2245bd8deadSopenharmony_ci        PN Triangles and vertex shaders.
2255bd8deadSopenharmony_ci
2265bd8deadSopenharmony_ci    Date: 8/21/2001
2275bd8deadSopenharmony_ci    Revision: 1.0
2285bd8deadSopenharmony_ci
2295bd8deadSopenharmony_ci      - First published version
2305bd8deadSopenharmony_ci
2315bd8deadSopenharmony_ci
2325bd8deadSopenharmony_ci
233