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