1a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé FonsecaName
2a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
3a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    MESA_sprite_point
4a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
5a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé FonsecaName Strings
6a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
7a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    GL_MESA_sprite_point
8a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
9a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé FonsecaContact
10a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
11a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    Brian Paul, VA Linux Systems Inc. (brianp 'at' valinux.com)
12a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
13a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé FonsecaStatus
14a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
15a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    Obsolete - see GL_ARB_point_sprite.
16a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
17a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé FonsecaVersion
18a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
19a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
20a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé FonsecaNumber
21a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
22a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    ???
23a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
24a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé FonsecaDependencies
25a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
26a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    GL_EXT_point_parameters effects the definition of this extension
27a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    GL_ARB_multitexture effects the definition of this extension
28a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
29a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé FonsecaOverview
30a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca	
31a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    This extension modifies the way in which points are rendered,
32a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    specifically when they're textured.  When SPRITE_POINT_MESA is enabled
33a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    a point is rendered as if it were a quadrilateral with unique texture
34a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    coordinates at each vertex.  This extension effectively turns points
35a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    into sprites which may be rendered more easily and quickly than using
36a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    conventional textured quadrilaterals.
37a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
38ea4bf267e4b023b08043f91ac44592fed1736e7fJosé Fonseca    When using point size > 1 or attenuated points this extension is an
39ea4bf267e4b023b08043f91ac44592fed1736e7fJosé Fonseca    effective way to render many small sprite images for particle systems
40a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    or other effects.
41af6b12cc76b40c86f3b144a7f5cd3ef1278863d0José Fonseca
42af6b12cc76b40c86f3b144a7f5cd3ef1278863d0José FonsecaIssues:
43af6b12cc76b40c86f3b144a7f5cd3ef1278863d0José Fonseca
44ea4bf267e4b023b08043f91ac44592fed1736e7fJosé Fonseca    1. How are the texture coordinates computed?
4545c59895113f997e5f2b7e346f95e46099fa3566José Fonseca
46af6b12cc76b40c86f3b144a7f5cd3ef1278863d0José Fonseca       The lower-left corner has texture coordinate (0,0,r,q).
47a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca       The lower-right, (1,0,r,q).  The upper-right, (1,1,r,q).
48a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca       The upper-left, (0,1,r,q).
49a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
50a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    2. What about texgen and texture matrices?
51a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
5252e6fbb655f138f70670abdd365258873a78dabfKeith Whitwell       Texgen and the texture matrix have no effect on the point's s and t
53a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca       texture coordinates.  The r and q coordinates may have been computed
54a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca       by texgen or the texture matrix.  Note that with a 3D texture and/or
55a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca       texgen that the r coordinate could be used to select a slice in the
56a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca       3D texture.
57a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
58a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    3. What about point smoothing?
59a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
60a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca       When point smoothing is enabled, a triangle fan could be rendered
61a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca       to approximate a circular point.  This could be problematic to
6255d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca       define and implement so POINT_SMOOTH is ignored when drawing sprite
6355d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca       points.
6455d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca
6555d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca       Smoothed points can be approximated by using an appropriate texture
6655d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca       images, alpha testing and blending.
6755d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca
6855d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca       POLYGON_SMOOTH does effect the rendering of the quadrilateral, however.
69dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
70dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    4. What about sprite rotation?
71dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
724654803e2595ea041ea83baf5e13e6c68890e9a7Brian       There is none.  Sprite points are always rendered as window-aligned
73dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca       squares.  One could define rotated texture images if desired.  A 3D
74dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca       texture and appropriate texture r coordinates could be used to
75dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca       effectively specify image rotation per point.
76dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
77dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    5. What about POLYGON_MODE?
78dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
79dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca       POLYGON_MODE does not effect the rasterization of the quadrilateral.
80dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
81dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    6. What about POLYGON_CULL?
82fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca
83fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca       TBD.  Polygon culling is normally specified and implemented in the
84fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca       transformation stage of OpenGL.  However, some rasterization hardware
85fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca       implements it later during triangle setup.
86fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca
87fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca       Polygon culling wouldn't be useful for sprite points since the
88fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca       quadrilaterals are always defined in counter-clockwise order in
89fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca       window space.  For that reason, polygon culling should probably be
90fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca       ignored.
914654803e2595ea041ea83baf5e13e6c68890e9a7Brian
92dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    7. Should sprite points be alpha-attenuated if their size is below the
93dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca       point parameter's threshold size?
94dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
95dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    8. Should there be an advertisized maximum sprite point size?
96dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
97dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca       No.  Since we're rendering the point as a quadrilateral there's no
98dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca       need to limit the size.
99d355eee5cacac30e2b4c8ac2f10964e2861a539eBrian
100d355eee5cacac30e2b4c8ac2f10964e2861a539eBrian
101dd51365acdd515577ee76850ceda01347ceb27c0José FonsecaNew Procedures and Functions
102dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
103dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    None.
104dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
105b618827fac84ca12a354da5808f30e96bedbc92aMicah DowtyNew Tokens
106b618827fac84ca12a354da5808f30e96bedbc92aMicah Dowty    
107b618827fac84ca12a354da5808f30e96bedbc92aMicah Dowty    Accepted by the <pname> parameter of Enable, Disable, IsEnabled,
108b618827fac84ca12a354da5808f30e96bedbc92aMicah Dowty    GetIntegerv, GetBooleanv, GetFloatv and GetDoublev:
109b618827fac84ca12a354da5808f30e96bedbc92aMicah Dowty
110b618827fac84ca12a354da5808f30e96bedbc92aMicah Dowty	SPRITE_POINT_MESA		0x????
111b618827fac84ca12a354da5808f30e96bedbc92aMicah Dowty        MAX_SPRITE_POINT_SIZE_MESA      0x????   (need this?)
112b618827fac84ca12a354da5808f30e96bedbc92aMicah Dowty
113b618827fac84ca12a354da5808f30e96bedbc92aMicah DowtyAdditions to Chapter 2 of the 1.1 Specification (OpenGL Operation)
114b618827fac84ca12a354da5808f30e96bedbc92aMicah Dowty
115b618827fac84ca12a354da5808f30e96bedbc92aMicah Dowty    None
116b618827fac84ca12a354da5808f30e96bedbc92aMicah Dowty
117b618827fac84ca12a354da5808f30e96bedbc92aMicah DowtyAdditions to Chapter 3 of the 1.1 Specification (Rasterization)
118b618827fac84ca12a354da5808f30e96bedbc92aMicah Dowty
119b618827fac84ca12a354da5808f30e96bedbc92aMicah Dowty    Section ???.
120b618827fac84ca12a354da5808f30e96bedbc92aMicah Dowty
121dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    When SPRITE_POINT_MESA is enabled points are rasterized as screen-
122dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    aligned quadrilaterals.  If the four vertices of the quadrilateral
123dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    are labeled A, B, C, and D, starting at the lower-left corner and moving
124dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    counter-clockwise around the quadrilateral, then the vertex and
125dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    texture coordinates are computed as follows:
126af6b12cc76b40c86f3b144a7f5cd3ef1278863d0José Fonseca
127a88202d3b02a24a3bfff95c5e375ead44dae4c5eKeith Whitwell      vertex   window coordinate       texture coordinate
1289bfe1a3d505733489f7583fe603b7d192f38fa8cKeith Whitwell        A      (x-r, y-r, z, w)          (0, 0, r, q)
129dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca        B      (x+r, y-r, z, w)          (1, 0, r, q)
130dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca        C      (x+r, y+r, z, w)          (1, 1, r, q)
131dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca        D      (x-r, y+r, z, w)          (0, 1, r, q)
132a88202d3b02a24a3bfff95c5e375ead44dae4c5eKeith Whitwell
1339bfe1a3d505733489f7583fe603b7d192f38fa8cKeith Whitwell    where x, y, z, w are the point's window coordinates, r and q are the
1349bfe1a3d505733489f7583fe603b7d192f38fa8cKeith Whitwell    point's 3rd and 4th texture coordinates  and r is half the point's
1359bfe1a3d505733489f7583fe603b7d192f38fa8cKeith Whitwell    size.  The other vertex attributes (such as the color and fog coordinate)
1369bfe1a3d505733489f7583fe603b7d192f38fa8cKeith Whitwell    are simply duplicated from the original point vertex.
1370d80f407f128f1a324e9dc0db2d0910bf32ba736Zack Rusin
138dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    Point size may either be specified with PointSize or computed
139dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    according to the EXT_point_parameters extension.
1409bfe1a3d505733489f7583fe603b7d192f38fa8cKeith Whitwell
141dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    The new texture coordinates are not effected by texgen or the texture
142dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    matrix.  Note, however, that the texture r and q coordinates are passed
143dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    unchanged and may have been computed with texgen and/or the texture
144fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca    matrix.
145dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
146fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca    If multiple texture units are present the same texture coordinate is
147dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    used for all texture units.
148fcc2598fffe0f0e0412d2a30777f1b4a4ed22249José Fonseca
149dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    The point is then rendered as if it were a quadrilateral using the
1508c4bd92b68cf79ff94dc431f78a970bbab7e0d00José Fonseca    normal point sampling rules.  POLYGON_MODE does not effect the
1518c4bd92b68cf79ff94dc431f78a970bbab7e0d00José Fonseca    rasterization of the quadrilateral but POLYGON_SMOOTH does.
152dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
1538c4bd92b68cf79ff94dc431f78a970bbab7e0d00José Fonseca    POINT_SMOOTH has no effect when SPRITE_POINT_MESA is enabled.
154dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
155dd51365acdd515577ee76850ceda01347ceb27c0José FonsecaAdditions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations
156dd51365acdd515577ee76850ceda01347ceb27c0José Fonsecaand the Frame Buffer)
157dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
158af6b12cc76b40c86f3b144a7f5cd3ef1278863d0José Fonseca    None.
159a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
1604654803e2595ea041ea83baf5e13e6c68890e9a7BrianAdditions to Chapter 5 of the 1.1 Specification (Special Functions)
1614654803e2595ea041ea83baf5e13e6c68890e9a7Brian
1624654803e2595ea041ea83baf5e13e6c68890e9a7Brian    None
163dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
164dd51365acdd515577ee76850ceda01347ceb27c0José FonsecaAdditions to Chapter 6 of the 1.1 Specification (State and State Requests)
165dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
166dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    None
167af6b12cc76b40c86f3b144a7f5cd3ef1278863d0José Fonseca
168dd51365acdd515577ee76850ceda01347ceb27c0José FonsecaAdditions to the GLX Specification
169dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
170dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    None
171dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
172dd51365acdd515577ee76850ceda01347ceb27c0José FonsecaGLX Protocol
173dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
174dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    TBD
175a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
176dd51365acdd515577ee76850ceda01347ceb27c0José FonsecaErrors
177a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
178d885c9dad15b64fd40c4c4d5cda6713a3e06a9aeKeith Whitwell    None
179a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
180a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé FonsecaNew State
181a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
182dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca    Add boolean variable SPRITE_POINT_MESA to the point attribute group.
183a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
184a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé FonsecaRevision History
185a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
186a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca    Version 1.0 - 4 Dec 2000
187a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca        Original draft.
188a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
189dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
190dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca
191dd51365acdd515577ee76850ceda01347ceb27c0José Fonseca