15bd8deadSopenharmony_ci 25bd8deadSopenharmony_ciName 35bd8deadSopenharmony_ci 45bd8deadSopenharmony_ci SGIX_subdiv_patch 55bd8deadSopenharmony_ci 65bd8deadSopenharmony_ciName Strings 75bd8deadSopenharmony_ci 85bd8deadSopenharmony_ci GL_SGIX_subdiv_patch 95bd8deadSopenharmony_ci 105bd8deadSopenharmony_ciVersion: 115bd8deadSopenharmony_ci 125bd8deadSopenharmony_ci $Date: 1999/12/28 01:40:36 $ $Revision: 1.4 $ 135bd8deadSopenharmony_ci 145bd8deadSopenharmony_ciNumber 155bd8deadSopenharmony_ci 165bd8deadSopenharmony_ci XXX 175bd8deadSopenharmony_ci 185bd8deadSopenharmony_ciDependencies 195bd8deadSopenharmony_ci 205bd8deadSopenharmony_ci None 215bd8deadSopenharmony_ci 225bd8deadSopenharmony_ciOverview: 235bd8deadSopenharmony_ci 245bd8deadSopenharmony_ci This extension provides support for rendering subdivision surfaces. 255bd8deadSopenharmony_ci Subdivision surfaces are defined as a repeated refinement of an 265bd8deadSopenharmony_ci initial control mesh. The direct and simple representation of a surface 275bd8deadSopenharmony_ci is attractive for rendering, where trimming bottlenecks can be avoided. 285bd8deadSopenharmony_ci The key strengths of subdivision surfaces are: 295bd8deadSopenharmony_ci 305bd8deadSopenharmony_ci - Ability to render arbitrary meshes. 315bd8deadSopenharmony_ci - Geometry compression, which is evident by the virtue of refinement. 325bd8deadSopenharmony_ci - Continuous LOD control, that relieves the application from keeping 335bd8deadSopenharmony_ci multiple geometry definitions, per-frame. 345bd8deadSopenharmony_ci 355bd8deadSopenharmony_ci Triangular mesh representation is more convenient for rendering and is 365bd8deadSopenharmony_ci considered first. Other representations as well as non-triangular ones 375bd8deadSopenharmony_ci can be considered in a separate extension. 385bd8deadSopenharmony_ci 395bd8deadSopenharmony_ci The API is mainly concerned with a geometrical primitive extracted from 405bd8deadSopenharmony_ci the base mesh. The primitive is a topological definition for a triangle 415bd8deadSopenharmony_ci pair and all its neighboring vertices. In addition, vertices and 425bd8deadSopenharmony_ci edges may be tagged for representing sharp features. This primitive 435bd8deadSopenharmony_ci is called the 'subdivision patch.. 445bd8deadSopenharmony_ci 455bd8deadSopenharmony_ciIssues: 465bd8deadSopenharmony_ci 475bd8deadSopenharmony_ci * We can reduce tokens for defining sharp vertices and have the 485bd8deadSopenharmony_ci implementation detect most of the tags. Is that the right trade off? 495bd8deadSopenharmony_ci 505bd8deadSopenharmony_ci * Is a per-corner maximum valence criteria preferred? (compared to 515bd8deadSopenharmony_ci accumulative criteria) 525bd8deadSopenharmony_ci 535bd8deadSopenharmony_ci * How do we fare against the recently presented surface simplification? 545bd8deadSopenharmony_ci 555bd8deadSopenharmony_ci * View dependency is simple per-object but complex for partials. 565bd8deadSopenharmony_ci 575bd8deadSopenharmony_ci * There seems to be a de-facto standard evolving in the industry 585bd8deadSopenharmony_ci which uses quadrilaterals as the base primitive. Currently, we are 595bd8deadSopenharmony_ci providing Loop's technique. The API (for the most part) remains 605bd8deadSopenharmony_ci the same. Shall we expose both techniques? 615bd8deadSopenharmony_ci 625bd8deadSopenharmony_ciTODO: 635bd8deadSopenharmony_ci 645bd8deadSopenharmony_ci * fragment light space dependencies (e.g. tangent and binorm). 655bd8deadSopenharmony_ci 665bd8deadSopenharmony_ciNew Procedures and Functions: 675bd8deadSopenharmony_ci 685bd8deadSopenharmony_ci void glSubdivPatchSGIX(const void **vertexData, 695bd8deadSopenharmony_ci const void **vertexTag, 705bd8deadSopenharmony_ci const void **edgeTag); 715bd8deadSopenharmony_ci void glSubdivPatchParameterfSGIX(GLenum pname, GLfloat param); 725bd8deadSopenharmony_ci void glSubdivPatchParameteriSGIX(GLenum pname, GLint param); 735bd8deadSopenharmony_ci 745bd8deadSopenharmony_ciNew Tokens: 755bd8deadSopenharmony_ci 765bd8deadSopenharmony_ci Accepted by vertexTag: 775bd8deadSopenharmony_ci 785bd8deadSopenharmony_ci GL_SUBDIVPATCH_SMOOTH_SGIX 795bd8deadSopenharmony_ci GL_SUBDIVPATCH_DART_BIT_SGIX 805bd8deadSopenharmony_ci GL_SUBDIVPATCH_CREASE_REGULAR_BIT_SGIX 815bd8deadSopenharmony_ci GL_SUBDIVPATCH_CREASE_IRREGULAR_BIT_SGIX 825bd8deadSopenharmony_ci GL_SUBDIVPATCH_CORNER_BIT_SGIX 835bd8deadSopenharmony_ci GL_SUBDIVPATCH_CONICAL_BIT_SGIX 845bd8deadSopenharmony_ci 855bd8deadSopenharmony_ci Accepted by edgeTag: 865bd8deadSopenharmony_ci 875bd8deadSopenharmony_ci GL_SUBDIVPATCH_SMOOTH_SGIX 885bd8deadSopenharmony_ci GL_SUBDIV_PATCH_SHARP_BIT_SGIX 895bd8deadSopenharmony_ci 905bd8deadSopenharmony_ci Accepted by the <pname> parameter of glSubdivPatchParameteriSGIX or 915bd8deadSopenharmony_ci glSubdivPatchParameterfSGIX are: 925bd8deadSopenharmony_ci 935bd8deadSopenharmony_ci GL_SUBDIVPATCH_LEVEL_SGIX 945bd8deadSopenharmony_ci GL_SUBDIVPATCH_FORMAT_SGIX 955bd8deadSopenharmony_ci 965bd8deadSopenharmony_ci Accepted by the <param> parameter GL_SUBDIVPATCH_FORMAT_SGIX of 975bd8deadSopenharmony_ci glSubdivPatchParameteriSGIX or glSubdivPatchParameterfSGIX are: 985bd8deadSopenharmony_ci 995bd8deadSopenharmony_ci GL_V3F 1005bd8deadSopenharmony_ci GL_C3F_V3F 1015bd8deadSopenharmony_ci GL_T2F_V3F 1025bd8deadSopenharmony_ci GL_T2F_C3F_V3F 1035bd8deadSopenharmony_ci 1045bd8deadSopenharmony_ci Accepted by the pname parameter of GetBooleanv, GetIntegerv, 1055bd8deadSopenharmony_ci GetFloatv, and GetDoublev: 1065bd8deadSopenharmony_ci 1075bd8deadSopenharmony_ci GL_SUBDIVPATCH_LEVEL_SGIX 1085bd8deadSopenharmony_ci GL_SUBDIVPATCH_FORMAT_SGIX 1095bd8deadSopenharmony_ci GL_SUBDIVPATCH_VALENCE_MAX 1105bd8deadSopenharmony_ci 1115bd8deadSopenharmony_ciAdditions to Chapter 2 of the 1.0 Specification (OpenGL Operation): 1125bd8deadSopenharmony_ci 1135bd8deadSopenharmony_ci None 1145bd8deadSopenharmony_ci 1155bd8deadSopenharmony_ciAdditions to Chapter 3 of the 1.0 Specification (Rasterization): 1165bd8deadSopenharmony_ci 1175bd8deadSopenharmony_ci None 1185bd8deadSopenharmony_ci 1195bd8deadSopenharmony_ciAdditions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations 1205bd8deadSopenharmony_ciand the Frame Buffer): 1215bd8deadSopenharmony_ci 1225bd8deadSopenharmony_ci None 1235bd8deadSopenharmony_ci 1245bd8deadSopenharmony_ciAdditions to Chapter 5 of the 1.0 Specification (Special Functions): 1255bd8deadSopenharmony_ci 1265bd8deadSopenharmony_ci 5.7 Subdivision Surfaces 1275bd8deadSopenharmony_ci 1285bd8deadSopenharmony_ci [This part to be filled out with operation details.] 1295bd8deadSopenharmony_ci 1305bd8deadSopenharmony_ciAdditions to Chapter 6 of the 1.0 Specification (State and State Requests): 1315bd8deadSopenharmony_ci 1325bd8deadSopenharmony_ci None 1335bd8deadSopenharmony_ci 1345bd8deadSopenharmony_ciAdditions to the GLX Specification: 1355bd8deadSopenharmony_ci 1365bd8deadSopenharmony_ci None 1375bd8deadSopenharmony_ci 1385bd8deadSopenharmony_ciDependencies on SGI_extension_name: 1395bd8deadSopenharmony_ci 1405bd8deadSopenharmony_ci None 1415bd8deadSopenharmony_ci 1425bd8deadSopenharmony_ciErrors: 1435bd8deadSopenharmony_ci 1445bd8deadSopenharmony_ci INVALID_ENUM is generated if the <pname> parameter is 1455bd8deadSopenharmony_ci not GL_SUBDIVPATCH_LEVEL_SGIX or GL_SUBDIVPATCH_FORMAT_SGIX. 1465bd8deadSopenharmony_ci 1475bd8deadSopenharmony_ci INVALID_ENUM is generated if the <param> parameter is not 1485bd8deadSopenharmony_ci one of GL_V3F, GL_C4UB_V3F, GL_T2F_V3F, or GL_T2F_C4UB_V3F, when the 1495bd8deadSopenharmony_ci <pname> parameter is GL_SUBDIVPATCH_FORMAT_SGIX. 1505bd8deadSopenharmony_ci 1515bd8deadSopenharmony_ci INVALID_OPERATION is generated if any of the valence counts exceeds 1525bd8deadSopenharmony_ci GL_SUBDIVPATCH_VALENCE_MAX_SGIX. 1535bd8deadSopenharmony_ci 1545bd8deadSopenharmony_ciNew State: 1555bd8deadSopenharmony_ci 1565bd8deadSopenharmony_ci Get Value Get Command Type Initial Value 1575bd8deadSopenharmony_ci --------- ----------- ---- ------------ 1585bd8deadSopenharmony_ci GL_SUBDIVPATCH_LEVEL_SGIX GetFloatv F 3 1595bd8deadSopenharmony_ci GL_SUBDIVPATCH_FORMAT_SGIX GetIntegerv I GL_V3F 1605bd8deadSopenharmony_ci 1615bd8deadSopenharmony_ciNew Implementation Dependent State 1625bd8deadSopenharmony_ci 1635bd8deadSopenharmony_ci None 1645bd8deadSopenharmony_ci 165