• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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