1XXX - Not complete yet!!! 2Name 3 4 SGIX_quad_mesh 5 6Name Strings 7 8 GL_SGIX_quad_mesh 9 10Version 11 12 $Date: 1997/02/21 17:32:24 $ $Revision: 1.2 $ 13 14Number 15 16 XXX 17 18Dependencies 19 20 No extensions are required. 21 OpenGL 1.1 and EXT_vertex_array affect the definition of this extension. 22 23Overview 24 25 This extension adds two primitive types, the quadrilateral mesh and the 26 line mesh. 27 28 For datasets representing from manifold surfaces, such as NURBS surfaces 29 and most triangular databases, quadrilateral meshes reduce the number of 30 vertices which must be transferred from the host to the graphics hardware 31 by up to fifty percent. This also reduces by fifty percent the number of 32 vertices which must be clipped and lit. 33 34 Quad and line meshes also reduce by half the number of vertices which must 35 be transformed and lit. 36 37Issues 38 39 * Kurt: The issue in the past has been the required intermediate storage. 40 Your spec seems to require that implementations be able to store at least 41 512 vertexes. I wonder how you arrived at this number. 42 43 Matt: I chose this number primary because it is large enough that 44 applications are unlikely to have quad-mesh datasets larger than this 45 size. I wanted to avoid forcing applications to carve up their quad mesh 46 data in hardware-specific ways, and instead allow the implementation to 47 make the decision about optimal mesh width. 48 49 I was also careful to minimize the amount of state. Note that a naive 50 implementation that just wants to draw the quad mesh as a bunch of 51 independent quads only needs to amount of state listed in the spec. 52 Every time glVertex is then called, one new quad is drawn. 53 54 * Kurt: Is it implementable on all current SGI platforms? 55 56 Matt: If it is implemented as drawing independent quads, then yes. On 57 platforms where you really want to take advantage of the fact that you can 58 light and xform the shared vertices only once, you may need to carve up 59 the quad mesh into smaller pieces on the host (or ge). to do that, you 60 will need more implementation-private state. 61 62New Procedures and Functions 63 64 void MeshBreadthSGIX(int breadth); 65 66 void MeshStrideSGIX(int stride); 67 68New Tokens 69 70 Accepted by the <mode> parameter of Begin, and 71 also accepted by the <mode> parameter of DrawArrays: 72 73 QUAD_MESH_SGIX 0x???? 74 LINE_MESH_SGIX 0x???? 75 76Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation) 77 78 Append to section 2.6.1 (Begin and End Objects): 79 80 Quad meshes and line meshes use an auxilliary function, MeshBreadthSGIX to 81 define GL state which affects the quads and lines drawn by these 82 primitives. The <breadth> parameter to MeshBreadthSGIX is used in the 83 descriptions of quad meshes and line meshes below. 84 85 Quadrilateral (quad) meshes: 86 87 Quad meshes efficiently generate a series of quads in a regular grid. 88 Given n input vertices to the quad mesh, the last n mod <breadth> vertices 89 are ignored completely. Let length = (n - (n mod <breadth>)) / <breadth>, 90 and consider all j = 0,1,2,<breadth>*length-1. A quad is drawn for four 91 vertices v_j-<breadth>-1, v_j-<breadth>, v_j, v_j-1 for all j such that j 92 mod <breadth> != 0 and j >= <breadth>. The order in which the quads 93 within a quad mesh are drawn is intentionally left completely undefined. 94 95 Line meshes: 96 97 Line meshes efficiently generate a series of lines in a regular grid. 98 Given n input vertices to the line mesh, the last n mod <breadth> vertices 99 are ignored completely. Let length = (n - (n mod <breadth>)) / <breadth>, 100 and consider all j = 0,1,2,<breadth>*length-1. A line is drawn between 101 vertex v_j-1 and v_j for all j such that j mod <breadth> != 0. A line is 102 drawn between vertex v_j-<breadth> and v_j for all j such that j >= 103 <breadth>. The order in which the lines within a line mesh are drawn is 104 intentionally left completely undefined. 105 106 Append to section 2.8 (Vertex Arrays) entry for DrawArrays: 107 108 The order in which the quads or lines within a quad mesh or line mesh are 109 drawn is intentionally left completely undefined. They may be rendered in 110 any order convenient for the implementation. 111 112Additions to Chapter 3 of the 1.0 Specification (Rasterization) 113 114 None 115 116Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations 117and the Frame Buffer) 118 119 None 120 121Additions to Chapter 5 of the 1.0 Specification (Special Functions) 122 123 None 124 125Additions to Chapter 6 of the 1.0 Specification (State and State Requests) 126 127 None 128 129Additions to the GLX Specification 130 131 None 132 133GLX Protocol 134 135 XXX - Not figured out yet. 136 137Dependencies on OpenGL 1.1 138Dependencies on EXT_vertex_array 139 140 If neither OpenGL 1.1 nor EXT_vertex_array are present, then the following 141 should be omited: 142 all references to MeshStrideSGIX, 143 all references to DrawArrays. 144 145Errors 146 147 INVALID_VALUE is generated if MeshBreadthSGIX parameter <breadth> is 148 zero or negative. 149 150 INVALID_OPERATION is generated if MeshBreadthSGIX is executed between the 151 execution of Begin and the corresponding execution of End. 152 153New State 154 155 Replace beginning of table 6.4: GL Internal begin-end state variables (inaccessible) 156 157 Get Value Get Command Type Value Attrib Description 158 --------- ----------- ---- ------- ------ ----------- 159 Z_13 0 When != 0, indicates begin/end object 160 161 Append to table 6.4: GL Internal begin-end state variables (inaccessible) 162 163 Get Value Get Command Type Value Attrib Description 164 --------- ----------- ---- ------- ------ ----------- 165 513*XV MAX_MESH_BREADTH + 1 vertices. 166 First entries are from current row. 167 Last entries are from previous row. 168 Z512* 0 Number of vertices accumulated for 169 current row of mesh in the array above. 170 B 0 True if not in first row of quad mesh. 171 172 Append to table 6.5: Current Values and Associated Data 173 174 Get Value Get Command Type Value Attrib Description 175 --------- ----------- ---- ------- ------ ----------- 176 MESH_BREADTH glGetIntegerv Z+ 2 current Breadth of quad and line meshes 177 178New Implementation Dependent State 179 180 Get Value Get Command Type Value Attrib 181 --------- ----------- ---- ------- ------ 182 MAX_MESH_BREADTH glGetIntegerv Z+ 512* 183