| Name |
| |
| ATI_pn_triangles |
| |
| Name Strings |
| |
| GL_ATI_pn_triangles |
| |
| Contact |
| |
| Dan Ginsburg, AMD (dan.ginsburg 'at' amd.com) |
| Alex Vlachos |
| |
| Version |
| |
| Last Modified Date: November 4, 2006 |
| Revision: 1.2 |
| |
| 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/4/2006 |
| Revision: 1.2 |
| - Updated contact info after ATI/AMD merger. |
| |
| 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 |
| |
| |
| |