1 2Name 3 4 SGIX_subdiv_patch 5 6Name Strings 7 8 GL_SGIX_subdiv_patch 9 10Version: 11 12 $Date: 1999/12/28 01:40:36 $ $Revision: 1.4 $ 13 14Number 15 16 XXX 17 18Dependencies 19 20 None 21 22Overview: 23 24 This extension provides support for rendering subdivision surfaces. 25 Subdivision surfaces are defined as a repeated refinement of an 26 initial control mesh. The direct and simple representation of a surface 27 is attractive for rendering, where trimming bottlenecks can be avoided. 28 The key strengths of subdivision surfaces are: 29 30 - Ability to render arbitrary meshes. 31 - Geometry compression, which is evident by the virtue of refinement. 32 - Continuous LOD control, that relieves the application from keeping 33 multiple geometry definitions, per-frame. 34 35 Triangular mesh representation is more convenient for rendering and is 36 considered first. Other representations as well as non-triangular ones 37 can be considered in a separate extension. 38 39 The API is mainly concerned with a geometrical primitive extracted from 40 the base mesh. The primitive is a topological definition for a triangle 41 pair and all its neighboring vertices. In addition, vertices and 42 edges may be tagged for representing sharp features. This primitive 43 is called the 'subdivision patch.. 44 45Issues: 46 47 * We can reduce tokens for defining sharp vertices and have the 48 implementation detect most of the tags. Is that the right trade off? 49 50 * Is a per-corner maximum valence criteria preferred? (compared to 51 accumulative criteria) 52 53 * How do we fare against the recently presented surface simplification? 54 55 * View dependency is simple per-object but complex for partials. 56 57 * There seems to be a de-facto standard evolving in the industry 58 which uses quadrilaterals as the base primitive. Currently, we are 59 providing Loop's technique. The API (for the most part) remains 60 the same. Shall we expose both techniques? 61 62TODO: 63 64 * fragment light space dependencies (e.g. tangent and binorm). 65 66New Procedures and Functions: 67 68 void glSubdivPatchSGIX(const void **vertexData, 69 const void **vertexTag, 70 const void **edgeTag); 71 void glSubdivPatchParameterfSGIX(GLenum pname, GLfloat param); 72 void glSubdivPatchParameteriSGIX(GLenum pname, GLint param); 73 74New Tokens: 75 76 Accepted by vertexTag: 77 78 GL_SUBDIVPATCH_SMOOTH_SGIX 79 GL_SUBDIVPATCH_DART_BIT_SGIX 80 GL_SUBDIVPATCH_CREASE_REGULAR_BIT_SGIX 81 GL_SUBDIVPATCH_CREASE_IRREGULAR_BIT_SGIX 82 GL_SUBDIVPATCH_CORNER_BIT_SGIX 83 GL_SUBDIVPATCH_CONICAL_BIT_SGIX 84 85 Accepted by edgeTag: 86 87 GL_SUBDIVPATCH_SMOOTH_SGIX 88 GL_SUBDIV_PATCH_SHARP_BIT_SGIX 89 90 Accepted by the <pname> parameter of glSubdivPatchParameteriSGIX or 91 glSubdivPatchParameterfSGIX are: 92 93 GL_SUBDIVPATCH_LEVEL_SGIX 94 GL_SUBDIVPATCH_FORMAT_SGIX 95 96 Accepted by the <param> parameter GL_SUBDIVPATCH_FORMAT_SGIX of 97 glSubdivPatchParameteriSGIX or glSubdivPatchParameterfSGIX are: 98 99 GL_V3F 100 GL_C3F_V3F 101 GL_T2F_V3F 102 GL_T2F_C3F_V3F 103 104 Accepted by the pname parameter of GetBooleanv, GetIntegerv, 105 GetFloatv, and GetDoublev: 106 107 GL_SUBDIVPATCH_LEVEL_SGIX 108 GL_SUBDIVPATCH_FORMAT_SGIX 109 GL_SUBDIVPATCH_VALENCE_MAX 110 111Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation): 112 113 None 114 115Additions to Chapter 3 of the 1.0 Specification (Rasterization): 116 117 None 118 119Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations 120and the Frame Buffer): 121 122 None 123 124Additions to Chapter 5 of the 1.0 Specification (Special Functions): 125 126 5.7 Subdivision Surfaces 127 128 [This part to be filled out with operation details.] 129 130Additions to Chapter 6 of the 1.0 Specification (State and State Requests): 131 132 None 133 134Additions to the GLX Specification: 135 136 None 137 138Dependencies on SGI_extension_name: 139 140 None 141 142Errors: 143 144 INVALID_ENUM is generated if the <pname> parameter is 145 not GL_SUBDIVPATCH_LEVEL_SGIX or GL_SUBDIVPATCH_FORMAT_SGIX. 146 147 INVALID_ENUM is generated if the <param> parameter is not 148 one of GL_V3F, GL_C4UB_V3F, GL_T2F_V3F, or GL_T2F_C4UB_V3F, when the 149 <pname> parameter is GL_SUBDIVPATCH_FORMAT_SGIX. 150 151 INVALID_OPERATION is generated if any of the valence counts exceeds 152 GL_SUBDIVPATCH_VALENCE_MAX_SGIX. 153 154New State: 155 156 Get Value Get Command Type Initial Value 157 --------- ----------- ---- ------------ 158 GL_SUBDIVPATCH_LEVEL_SGIX GetFloatv F 3 159 GL_SUBDIVPATCH_FORMAT_SGIX GetIntegerv I GL_V3F 160 161New Implementation Dependent State 162 163 None 164 165