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