15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci NV_point_sprite 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_NV_point_sprite 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContact 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Matt Craighead, NVIDIA Corporation (mcraighead 'at' nvidia.com) 125bd8deadSopenharmony_ci 135bd8deadSopenharmony_ciNotice 145bd8deadSopenharmony_ci 155bd8deadSopenharmony_ci Copyright NVIDIA Corporation, 2001, 2002. 165bd8deadSopenharmony_ci 175bd8deadSopenharmony_ciIP Status 185bd8deadSopenharmony_ci 195bd8deadSopenharmony_ci No known IP issues. 205bd8deadSopenharmony_ci 215bd8deadSopenharmony_ciStatus 225bd8deadSopenharmony_ci 235bd8deadSopenharmony_ci Shipping (version 1.1) 245bd8deadSopenharmony_ci 255bd8deadSopenharmony_ciVersion 265bd8deadSopenharmony_ci 275bd8deadSopenharmony_ci NVIDIA Date: March 6, 2003 (version 1.3) 285bd8deadSopenharmony_ci 295bd8deadSopenharmony_ciNumber 305bd8deadSopenharmony_ci 315bd8deadSopenharmony_ci 262 325bd8deadSopenharmony_ci 335bd8deadSopenharmony_ciDependencies 345bd8deadSopenharmony_ci 355bd8deadSopenharmony_ci Written based on the wording of the OpenGL 1.3 specification. 365bd8deadSopenharmony_ci 375bd8deadSopenharmony_ci Assumes support for the EXT_point_parameters extension. 385bd8deadSopenharmony_ci 395bd8deadSopenharmony_ciOverview 405bd8deadSopenharmony_ci 415bd8deadSopenharmony_ci Applications such as particle systems usually must use OpenGL quads 425bd8deadSopenharmony_ci rather than points to render their geometry, since they would like to 435bd8deadSopenharmony_ci use a custom-drawn texture for each particle, rather than the 445bd8deadSopenharmony_ci traditional OpenGL round antialiased points, and each fragment in 455bd8deadSopenharmony_ci a point has the same texture coordinates as every other fragment. 465bd8deadSopenharmony_ci 475bd8deadSopenharmony_ci Unfortunately, specifying the geometry for these quads can be quite 485bd8deadSopenharmony_ci expensive, since it quadruples the amount of geometry required, and 495bd8deadSopenharmony_ci it may also require the application to do extra processing to compute 505bd8deadSopenharmony_ci the location of each vertex. 515bd8deadSopenharmony_ci 525bd8deadSopenharmony_ci The goal of this extension is to allow such apps to use points rather 535bd8deadSopenharmony_ci than quads. When GL_POINT_SPRITE_NV is enabled, the state of point 545bd8deadSopenharmony_ci antialiasing is ignored. For each texture unit, the app can then 555bd8deadSopenharmony_ci specify whether to replace the existing texture coordinates with 565bd8deadSopenharmony_ci point sprite texture coordinates, which are interpolated across the 575bd8deadSopenharmony_ci point. Finally, the app can set a global parameter for the way to 585bd8deadSopenharmony_ci generate the R coordinate for point sprites; the R coordinate can 595bd8deadSopenharmony_ci either be zero, the input S coordinate, or the input R coordinate. 605bd8deadSopenharmony_ci This allows applications to use a 3D texture to represent a point 615bd8deadSopenharmony_ci sprite that goes through an animation, with filtering between frames, 625bd8deadSopenharmony_ci for example. 635bd8deadSopenharmony_ci 645bd8deadSopenharmony_ciIssues 655bd8deadSopenharmony_ci 665bd8deadSopenharmony_ci * Should this spec say that point sprites get converted into quads? 675bd8deadSopenharmony_ci 685bd8deadSopenharmony_ci RESOLVED: No, this would make the spec much uglier, because then 695bd8deadSopenharmony_ci we'd have to say that polygon smooth and stipple get turned off, 705bd8deadSopenharmony_ci etc. Better to provide a formula for computing the texture 715bd8deadSopenharmony_ci coordinates and leave them as points. 725bd8deadSopenharmony_ci 735bd8deadSopenharmony_ci * How are point sprite texture coordinates computed? 745bd8deadSopenharmony_ci 755bd8deadSopenharmony_ci RESOLVED: They move smoothly as the point moves around on the 765bd8deadSopenharmony_ci screen, even though the pixels touched by the point do not. The 775bd8deadSopenharmony_ci exact formula is given in the spec. Note that point sprites' T 785bd8deadSopenharmony_ci texture coordinate decreases, not increases, with Y; that is, 795bd8deadSopenharmony_ci point sprite textures go top-down, not bottom-up. 805bd8deadSopenharmony_ci 815bd8deadSopenharmony_ci * How do point sizes for point sprites work? 825bd8deadSopenharmony_ci 835bd8deadSopenharmony_ci RESOLVED: The original NV_point_sprite spec treated point sprites 845bd8deadSopenharmony_ci as being sized like aliased points, i.e., integral sizes only. 855bd8deadSopenharmony_ci This was a mistake, because it can lead to visible popping 865bd8deadSopenharmony_ci artifacts. In addition, it limits the size of points 875bd8deadSopenharmony_ci unnecessarily. 885bd8deadSopenharmony_ci 895bd8deadSopenharmony_ci This revised specification treats point sprite sizes more like 905bd8deadSopenharmony_ci antialiased point sizes, but with more leniency. Implementations 915bd8deadSopenharmony_ci may choose to not clamp the point size to the antialiased point 925bd8deadSopenharmony_ci size range. The set of point sprite sizes available must be a 935bd8deadSopenharmony_ci superset of the antialiased point sizes. However, whereas 945bd8deadSopenharmony_ci antialiased point sizes are all evenly spaced by the point size 955bd8deadSopenharmony_ci granularity, point sprites can have an arbitrary set of sizes. 965bd8deadSopenharmony_ci This lets implementations use, e.g., floating-point sizes. 975bd8deadSopenharmony_ci 985bd8deadSopenharmony_ci It is anticipated that this behavior change will not cause any 995bd8deadSopenharmony_ci problems for compatibility. In fact, it should be beneficial to 1005bd8deadSopenharmony_ci quality. 1015bd8deadSopenharmony_ci 1025bd8deadSopenharmony_ci * Should there be a way to query the list of supported point sprite 1035bd8deadSopenharmony_ci sizes? 1045bd8deadSopenharmony_ci 1055bd8deadSopenharmony_ci RESOLVED: No. If an implementation were to use, say, a single- 1065bd8deadSopenharmony_ci precision IEEE float to represent point sizes, the list would be 1075bd8deadSopenharmony_ci rather long. 1085bd8deadSopenharmony_ci 1095bd8deadSopenharmony_ci * Do mipmaps apply to point sprites? 1105bd8deadSopenharmony_ci 1115bd8deadSopenharmony_ci RESOLVED: Yes. They are similar to quads in this respect. 1125bd8deadSopenharmony_ci 1135bd8deadSopenharmony_ci * What of this extension's state is per-texture unit and what 1145bd8deadSopenharmony_ci of this extension's state is state is global? 1155bd8deadSopenharmony_ci 1165bd8deadSopenharmony_ci RESOLVED: The GL_POINT_SPRITE_NV enable and POINT_SPRITE_R_MODE_NV 1175bd8deadSopenharmony_ci state are global. The COORD_REPLACE_NV state is per-texture unit 1185bd8deadSopenharmony_ci (state set by TexEnv is per-texture unit). 1195bd8deadSopenharmony_ci 1205bd8deadSopenharmony_ci * Should we create an entry point for the R mode? 1215bd8deadSopenharmony_ci 1225bd8deadSopenharmony_ci RESOLVED: No, we take advantage of the existing glPointParameter 1235bd8deadSopenharmony_ci interface. Unfortunately, EXT_point_parameters does not define a 1245bd8deadSopenharmony_ci PointParameteri entry point. This extension adds one. It could 1255bd8deadSopenharmony_ci live without, but it's a little annoying to have to use a float 1265bd8deadSopenharmony_ci interface to specify an enumerant. 1275bd8deadSopenharmony_ci 1285bd8deadSopenharmony_ci This is definitely not TexEnv state, because it is global, not 1295bd8deadSopenharmony_ci per texture unit. 1305bd8deadSopenharmony_ci 1315bd8deadSopenharmony_ci * What should the suffix for PointParameteri[v] be? 1325bd8deadSopenharmony_ci 1335bd8deadSopenharmony_ci RESOLVED: NV. This is an NV extension, and therefore any new 1345bd8deadSopenharmony_ci entry points must be NV also. This is a bit less aesthetically 1355bd8deadSopenharmony_ci pleasing than matching the EXT suffixes of EXT_point_parameters, 1365bd8deadSopenharmony_ci but it is the right thing to do. 1375bd8deadSopenharmony_ci 1385bd8deadSopenharmony_ci * Should there be a global on/off switch for point sprites, or 1395bd8deadSopenharmony_ci should the per-unit enable imply that switch? 1405bd8deadSopenharmony_ci 1415bd8deadSopenharmony_ci RESOLVED: There is a global switch to turn it on and off. This 1425bd8deadSopenharmony_ci is probably more convenient for both driver and app, and it 1435bd8deadSopenharmony_ci simplifies the spec. 1445bd8deadSopenharmony_ci 1455bd8deadSopenharmony_ci * What should the TexEnv mode for point sprites be called? 1465bd8deadSopenharmony_ci 1475bd8deadSopenharmony_ci RESOLVED: After much deliberation, COORD_REPLACE_NV seems to be 1485bd8deadSopenharmony_ci appropriate. 1495bd8deadSopenharmony_ci 1505bd8deadSopenharmony_ci * What is the motivation for each of the three point sprite R 1515bd8deadSopenharmony_ci modes? 1525bd8deadSopenharmony_ci 1535bd8deadSopenharmony_ci The R mode is most convenient for applications that may already 1545bd8deadSopenharmony_ci be drawing their own "point sprites" by rendering quads. These 1555bd8deadSopenharmony_ci applications already need to put the R coordinate in R, and they 1565bd8deadSopenharmony_ci do not need to change their code. 1575bd8deadSopenharmony_ci 1585bd8deadSopenharmony_ci The S mode is most convenient for applications that do not use 1595bd8deadSopenharmony_ci vertex programs, because it allows them to use TexCoord1 rather 1605bd8deadSopenharmony_ci than TexCoord3 to specify their third texture coordinate. This 1615bd8deadSopenharmony_ci reduces the size of the vertex data. Applications that use 1625bd8deadSopenharmony_ci vertex programs are largely unaffected by this, because they can 1635bd8deadSopenharmony_ci map the input S texture coordinate into the output R coordinate 1645bd8deadSopenharmony_ci if they so desire. 1655bd8deadSopenharmony_ci 1665bd8deadSopenharmony_ci The zero mode may allow some applications to more easily obtain 1675bd8deadSopenharmony_ci the behavior they want out of the dot product functionality of 1685bd8deadSopenharmony_ci the NV_texture_shader extension. It reduces these dot products 1695bd8deadSopenharmony_ci from three-component dot products into two-component dot 1705bd8deadSopenharmony_ci products. In some implementations, it may also have higher 1715bd8deadSopenharmony_ci performance than the other modes. 1725bd8deadSopenharmony_ci 1735bd8deadSopenharmony_ci There is no mode corresponding to the T or Q coordinates because 1745bd8deadSopenharmony_ci we cannot envision a scenario where such modes would be useful. 1755bd8deadSopenharmony_ci 1765bd8deadSopenharmony_ci * What is the interaction with multisample points, which are round? 1775bd8deadSopenharmony_ci 1785bd8deadSopenharmony_ci RESOLVED: Point sprites are rasterized as squares, even in 1795bd8deadSopenharmony_ci multisample mode. Leaving them as round points would make the 1805bd8deadSopenharmony_ci feature useless. 1815bd8deadSopenharmony_ci 1825bd8deadSopenharmony_ci * How does the point sprite extension interact with fragment 1835bd8deadSopenharmony_ci program extensions (ARB_fragment_program, NV_fragment_program, 1845bd8deadSopenharmony_ci etc)? 1855bd8deadSopenharmony_ci 1865bd8deadSopenharmony_ci RESOLVED: The primary issue is how the interpolanted texture 1875bd8deadSopenharmony_ci coordinate set appears when fragment attribute variables 1885bd8deadSopenharmony_ci (ARB terminology) or fragment program attribute registers (NV 1895bd8deadSopenharmony_ci terminology) are accessed. 1905bd8deadSopenharmony_ci 1915bd8deadSopenharmony_ci When point sprite is enabled and the GL_COORD_REPLACE_NV state for 1925bd8deadSopenharmony_ci a given texture unit is GL_TRUE, the texture coordinate set for 1935bd8deadSopenharmony_ci that texture unit is (s,t,r,1) where the point sprite-overriden 1945bd8deadSopenharmony_ci s, t, and r are described in the amended Section 3.3 below. 1955bd8deadSopenharmony_ci The important point is that q is forced to 1. 1965bd8deadSopenharmony_ci 1975bd8deadSopenharmony_ci For fragment program extensions, q cooresponds to the w component 1985bd8deadSopenharmony_ci of the respective fragment attribute. 1995bd8deadSopenharmony_ci 2005bd8deadSopenharmony_ci * What push/pop attribute bits control the state of this extension? 2015bd8deadSopenharmony_ci 2025bd8deadSopenharmony_ci RESOLVED: POINT_BIT for all the state. Also ENABLE_BIT for 2035bd8deadSopenharmony_ci the POINT_SPRITE_NV enable. 2045bd8deadSopenharmony_ci 2055bd8deadSopenharmony_ciNew Procedures and Functions 2065bd8deadSopenharmony_ci 2075bd8deadSopenharmony_ci void PointParameteriNV(enum pname, int param) 2085bd8deadSopenharmony_ci void PointParameterivNV(enum pname, const int *params) 2095bd8deadSopenharmony_ci 2105bd8deadSopenharmony_ciNew Tokens 2115bd8deadSopenharmony_ci 2125bd8deadSopenharmony_ci Accepted by the <cap> parameter of Enable, Disable, and IsEnabled, by 2135bd8deadSopenharmony_ci the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, and 2145bd8deadSopenharmony_ci GetDoublev, and by the <target> parameter of TexEnvi, TexEnviv, 2155bd8deadSopenharmony_ci TexEnvf, TexEnvfv, GetTexEnviv, and GetTexEnvfv: 2165bd8deadSopenharmony_ci 2175bd8deadSopenharmony_ci POINT_SPRITE_NV 0x8861 2185bd8deadSopenharmony_ci 2195bd8deadSopenharmony_ci When the <target> parameter of TexEnvf, TexEnvfv, TexEnvi, TexEnviv, 2205bd8deadSopenharmony_ci GetTexEnvfv, or GetTexEnviv is POINT_SPRITE_NV, then the value of 2215bd8deadSopenharmony_ci <pname> may be: 2225bd8deadSopenharmony_ci 2235bd8deadSopenharmony_ci COORD_REPLACE_NV 0x8862 2245bd8deadSopenharmony_ci 2255bd8deadSopenharmony_ci When the <target> and <pname> parameters of TexEnvf, TexEnvfv, 2265bd8deadSopenharmony_ci TexEnvi, or TexEnviv are POINT_SPRITE_NV and COORD_REPLACE_NV 2275bd8deadSopenharmony_ci respectively, then the value of <param> or the value pointed to by 2285bd8deadSopenharmony_ci <params> may be: 2295bd8deadSopenharmony_ci 2305bd8deadSopenharmony_ci FALSE 2315bd8deadSopenharmony_ci TRUE 2325bd8deadSopenharmony_ci 2335bd8deadSopenharmony_ci Accepted by the <pname> parameter of PointParameteriNV, 2345bd8deadSopenharmony_ci PointParameterfEXT, PointParameterivNV, PointParameterfvEXT, 2355bd8deadSopenharmony_ci GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev: 2365bd8deadSopenharmony_ci 2375bd8deadSopenharmony_ci POINT_SPRITE_R_MODE_NV 0x8863 2385bd8deadSopenharmony_ci 2395bd8deadSopenharmony_ci When the <pname> parameter of PointParameteriNV, PointParameterfEXT, 2405bd8deadSopenharmony_ci PointParameterivNV, or PointParameterfvEXT is 2415bd8deadSopenharmony_ci POINT_SPRITE_R_MODE_NV, then the value of <param> or the value 2425bd8deadSopenharmony_ci pointed to by <params> may be: 2435bd8deadSopenharmony_ci 2445bd8deadSopenharmony_ci ZERO 2455bd8deadSopenharmony_ci S 2465bd8deadSopenharmony_ci R 2475bd8deadSopenharmony_ci 2485bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 1.3 Specification (OpenGL Operation) 2495bd8deadSopenharmony_ci 2505bd8deadSopenharmony_ci None. 2515bd8deadSopenharmony_ci 2525bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 1.3 Specification (Rasterization) 2535bd8deadSopenharmony_ci 2545bd8deadSopenharmony_ci Insert the following paragraphs after the second paragraph of section 2555bd8deadSopenharmony_ci 3.3 (page 63): 2565bd8deadSopenharmony_ci 2575bd8deadSopenharmony_ci "Point sprites are enabled or disabled by calling Enable or Disable 2585bd8deadSopenharmony_ci with the symbolic constant POINT_SPRITE_NV. The default state is for 2595bd8deadSopenharmony_ci point sprites to be disabled. When point sprites are enabled, the 2605bd8deadSopenharmony_ci state of the point antialiasing enable is ignored. 2615bd8deadSopenharmony_ci 2625bd8deadSopenharmony_ci The point sprite R coordinate mode is set with one of the commands 2635bd8deadSopenharmony_ci 2645bd8deadSopenharmony_ci void PointParameter{if}NV(enum pname, T param) 2655bd8deadSopenharmony_ci void PointParameter{if}vNV(enum pname, const T *params) 2665bd8deadSopenharmony_ci 2675bd8deadSopenharmony_ci where pname is POINT_SPRITE_R_MODE_NV. The possible values for param 2685bd8deadSopenharmony_ci are ZERO, S, and R. The default value is ZERO. 2695bd8deadSopenharmony_ci 2705bd8deadSopenharmony_ci The point sprite texture coordinate replacement mode is set with one 2715bd8deadSopenharmony_ci of the commands 2725bd8deadSopenharmony_ci 2735bd8deadSopenharmony_ci void TexEnv{if}(enum target, enum pname, T param) 2745bd8deadSopenharmony_ci void TexEnv{if}v(enum target, enum pname, const T *params) 2755bd8deadSopenharmony_ci 2765bd8deadSopenharmony_ci where target is POINT_SPRITE_NV and pname is COORD_REPLACE_NV. The 2775bd8deadSopenharmony_ci possible values for param are FALSE and TRUE. The default value for 2785bd8deadSopenharmony_ci each texture unit is for point sprite texture coordinate replacement 2795bd8deadSopenharmony_ci to be disabled." 2805bd8deadSopenharmony_ci 2815bd8deadSopenharmony_ci Replace the first two sentences of the fourth paragraph of section 2825bd8deadSopenharmony_ci 3.3 (page 63) with the following: 2835bd8deadSopenharmony_ci 2845bd8deadSopenharmony_ci "The effect of a point width other than 1.0 depends on the state of 2855bd8deadSopenharmony_ci point antialiasing and point sprites. If antialiasing and point 2865bd8deadSopenharmony_ci sprites are disabled, ..." 2875bd8deadSopenharmony_ci 2885bd8deadSopenharmony_ci Replace the first sentences of the sixth paragraph of section 3.3 2895bd8deadSopenharmony_ci (page 64) with the following: 2905bd8deadSopenharmony_ci 2915bd8deadSopenharmony_ci "If antialiasing is enabled and point sprites are disabled, ..." 2925bd8deadSopenharmony_ci 2935bd8deadSopenharmony_ci Insert the following paragraphs at the end of section 3.3 (page 66): 2945bd8deadSopenharmony_ci 2955bd8deadSopenharmony_ci "When point sprites are enabled, then point rasterization produces a 2965bd8deadSopenharmony_ci fragment for each framebuffer pixel whose center lies inside a square 2975bd8deadSopenharmony_ci centered at the point's (x_w, y_w), with side length equal to the 2985bd8deadSopenharmony_ci current point size. 2995bd8deadSopenharmony_ci 3005bd8deadSopenharmony_ci All fragments produced in rasterizing a point sprite are assigned the 3015bd8deadSopenharmony_ci same associated data, which are those of the vertex corresponding to 3025bd8deadSopenharmony_ci the point, with texture coordinates s, t, and r replaced with s/q, 3035bd8deadSopenharmony_ci t/q, and r/q, respectively. If q is less than or equal to zero, the 3045bd8deadSopenharmony_ci results are undefined. However, for each texture unit where 3055bd8deadSopenharmony_ci COORD_REPLACE_NV is TRUE, these texture coordinates are replaced with 3065bd8deadSopenharmony_ci point sprite texture coordinates. The s coordinate varies from 0 to 3075bd8deadSopenharmony_ci 1 across the point horizontally, while the t coordinate varies from 0 3085bd8deadSopenharmony_ci to 1 vertically. The r coordinate depends on the value of 3095bd8deadSopenharmony_ci POINT_SPRITE_R_MODE_NV. If this is set to ZERO, then the r 3105bd8deadSopenharmony_ci coordinate is set to zero. If it is set to S, then the r coordinate 3115bd8deadSopenharmony_ci is set to the s texture coordinate before coordinate replacement 3125bd8deadSopenharmony_ci takes place. If it is set to R, then the r coordinate is set to the 3135bd8deadSopenharmony_ci r texture coordinate before coordinate replacement takes place. 3145bd8deadSopenharmony_ci 3155bd8deadSopenharmony_ci The following formula is used to evaluate the s and t coordinates: 3165bd8deadSopenharmony_ci 3175bd8deadSopenharmony_ci s = 1/2 + (x_f + 1/2 - x_w) / size 3185bd8deadSopenharmony_ci t = 1/2 - (y_f + 1/2 - y_w) / size 3195bd8deadSopenharmony_ci 3205bd8deadSopenharmony_ci where size is the point's size, x_f and y_f are the (integral) window 3215bd8deadSopenharmony_ci coordinates of the fragment, and x_w and y_w are the exact, unrounded 3225bd8deadSopenharmony_ci window coordinates of the vertex for the point. 3235bd8deadSopenharmony_ci 3245bd8deadSopenharmony_ci The widths supported for point sprites must be a superset of those 3255bd8deadSopenharmony_ci supported for antialiased points. There is no requirement that these 3265bd8deadSopenharmony_ci widths must be equally spaced. If an unsupported width is requested, 3275bd8deadSopenharmony_ci the nearest supported width is used instead." 3285bd8deadSopenharmony_ci 3295bd8deadSopenharmony_ci Replace the text of section 3.3.1 (page 66) with the following: 3305bd8deadSopenharmony_ci 3315bd8deadSopenharmony_ci "The state required to control point rasterization consists of the 3325bd8deadSopenharmony_ci floating-point point width, a bit indicating whether or not 3335bd8deadSopenharmony_ci antialiasing is enabled, a bit indicating whether or not point 3345bd8deadSopenharmony_ci sprites are enabled, the current value of the point sprite R 3355bd8deadSopenharmony_ci coordinate mode, and a bit for the point sprite texture coordinate 3365bd8deadSopenharmony_ci replacement mode for each texture unit." 3375bd8deadSopenharmony_ci 3385bd8deadSopenharmony_ci Replace the text of section 3.3.2 (page 66) with the following: 3395bd8deadSopenharmony_ci 3405bd8deadSopenharmony_ci "If MULTISAMPLE is enabled, and the value of SAMPLE_BUFFERS is one, 3415bd8deadSopenharmony_ci then points are rasterized using the following algorithm, regardless 3425bd8deadSopenharmony_ci of whether point antialiasing (POINT_SMOOTH) is enabled or disabled. 3435bd8deadSopenharmony_ci Point rasterization produces a fragment for each framebuffer pixel 3445bd8deadSopenharmony_ci with one or more sample points that intersect a region centered at 3455bd8deadSopenharmony_ci the point's (x_w, y_w). This region is a circle having diameter 3465bd8deadSopenharmony_ci equal to the current point width if POINT_SPRITE_NV is disabled, or 3475bd8deadSopenharmony_ci a square with side equal to the current point width if 3485bd8deadSopenharmony_ci POINT_SPRITE_NV is enabled. Coverage bits that correspond to sample 3495bd8deadSopenharmony_ci points that intersect the region are 1, other coverage bits are 0. 3505bd8deadSopenharmony_ci All data associated with each sample for the fragment are the data 3515bd8deadSopenharmony_ci associated with the point being rasterized, with the exception of 3525bd8deadSopenharmony_ci texture coordinates when POINT_SPRITE_NV is enabled; these texture 3535bd8deadSopenharmony_ci coordinates are computed as described in section 3.3. 3545bd8deadSopenharmony_ci 3555bd8deadSopenharmony_ci Point size range and number of gradations are equivalent to those 3565bd8deadSopenharmony_ci supported for antialiased points when POINT_SPRITE_NV is disabled. 3575bd8deadSopenharmony_ci The set of point sizes supported is equivalent to those for point 3585bd8deadSopenharmony_ci sprites without multisample when POINT_SPRITE_NV is enabled." 3595bd8deadSopenharmony_ci 3605bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 1.3 Specification (Per-Fragment 3615bd8deadSopenharmony_ciOperations and the Frame Buffer) 3625bd8deadSopenharmony_ci 3635bd8deadSopenharmony_ci None. 3645bd8deadSopenharmony_ci 3655bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 1.3 Specification (Special Functions) 3665bd8deadSopenharmony_ci 3675bd8deadSopenharmony_ci None. 3685bd8deadSopenharmony_ci 3695bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 1.3 Specification (State and 3705bd8deadSopenharmony_ciState Requests) 3715bd8deadSopenharmony_ci 3725bd8deadSopenharmony_ci None. 3735bd8deadSopenharmony_ci 3745bd8deadSopenharmony_ciGLX Protocol 3755bd8deadSopenharmony_ci 3765bd8deadSopenharmony_ci Two new GL rendering commands are added. The following commands are 3775bd8deadSopenharmony_ci sent to the server as part of a glXRender request: 3785bd8deadSopenharmony_ci 3795bd8deadSopenharmony_ci PointParameteriNV 3805bd8deadSopenharmony_ci 2 12 rendering command length 3815bd8deadSopenharmony_ci 2 4221 rendering command opcode 3825bd8deadSopenharmony_ci 4 ENUM pname 3835bd8deadSopenharmony_ci 0x8126 n==1 POINT_SIZE_MIN_ARB 3845bd8deadSopenharmony_ci 0x8127 n==1 POINT_SIZE_MAX_ARB 3855bd8deadSopenharmony_ci 0x8128 n==1 POINT_FADE_THRESHOLD_SIZE_ARB 3865bd8deadSopenharmony_ci 0x8863 n==1 POINT_SPRITE_R_MODE_NV 3875bd8deadSopenharmony_ci 4 INT32 param 3885bd8deadSopenharmony_ci 3895bd8deadSopenharmony_ci PointParameterivNV 3905bd8deadSopenharmony_ci 2 8+4*n rendering command length 3915bd8deadSopenharmony_ci 2 4222 rendering command opcode 3925bd8deadSopenharmony_ci 4 ENUM pname 3935bd8deadSopenharmony_ci 0x8126 n==1 POINT_SIZE_MIN_ARB 3945bd8deadSopenharmony_ci 0x8127 n==1 POINT_SIZE_MAX_ARB 3955bd8deadSopenharmony_ci 0x8128 n==1 POINT_FADE_THRESHOLD_SIZE_ARB 3965bd8deadSopenharmony_ci 0x8129 n==3 DISTANCE_ATTENUATION_ARB 3975bd8deadSopenharmony_ci 0x8863 n==1 POINT_SPRITE_R_MODE_NV 3985bd8deadSopenharmony_ci 4*n LISTofINT32 params 3995bd8deadSopenharmony_ci 4005bd8deadSopenharmony_ciErrors 4015bd8deadSopenharmony_ci 4025bd8deadSopenharmony_ci None. 4035bd8deadSopenharmony_ci 4045bd8deadSopenharmony_ciNew State 4055bd8deadSopenharmony_ci 4065bd8deadSopenharmony_ci(table 6.12, p. 220) 4075bd8deadSopenharmony_ci 4085bd8deadSopenharmony_ci Get Value Type Get Command Initial Value Description Sec Attribute 4095bd8deadSopenharmony_ci --------- ---- ----------- ------------- ----------- ------ --------- 4105bd8deadSopenharmony_ci POINT_SPRITE_NV B IsEnabled False point sprite enable 3.3 point/enable 4115bd8deadSopenharmony_ci POINT_SPRITE_R_MODE_NV Z3 GetIntegerv ZERO R coordinate mode 3.3 point 4125bd8deadSopenharmony_ci 4135bd8deadSopenharmony_ci(table 6.17, p. 225) 4145bd8deadSopenharmony_ci 4155bd8deadSopenharmony_ci Get Value Type Get Command Initial Value Description Sec Attribute 4165bd8deadSopenharmony_ci --------- ---- ----------- ------------- ----------- ------ --------- 4175bd8deadSopenharmony_ci COORD_REPLACE_NV 2* x B GetTexEnviv False coordinate replacement 3.3 point 4185bd8deadSopenharmony_ci enable 4195bd8deadSopenharmony_ci 4205bd8deadSopenharmony_ciNVIDIA Implementation Details 4215bd8deadSopenharmony_ci 4225bd8deadSopenharmony_ci This extension was first supported for GeForce4 Ti only in NVIDIA's 4235bd8deadSopenharmony_ci Release 25 drivers. Future drivers will support this extension on 4245bd8deadSopenharmony_ci all GeForce products. 4255bd8deadSopenharmony_ci 4265bd8deadSopenharmony_ci However, the extension is only hardware-accelerated on the GeForce3 4275bd8deadSopenharmony_ci and GeForce4 Ti platforms. In addition, there are restrictions on 4285bd8deadSopenharmony_ci the cases that are accelerated on the GeForce3. 4295bd8deadSopenharmony_ci 4305bd8deadSopenharmony_ci In order to ensure that you get hardware acceleration on GeForce3, 4315bd8deadSopenharmony_ci make sure that: 4325bd8deadSopenharmony_ci 4335bd8deadSopenharmony_ci 1. The point sprite R mode is set to GL_ZERO. (This is the default.) 4345bd8deadSopenharmony_ci 2. Coordinate replacement is turned on for texture unit 3 and for no 4355bd8deadSopenharmony_ci other texture units. This is non-obvious; using texture unit zero 4365bd8deadSopenharmony_ci will _not_ be accelerated. Also, if coordinate replacement is off 4375bd8deadSopenharmony_ci for _all_ texture units, that's also unaccelerated. 4385bd8deadSopenharmony_ci 4395bd8deadSopenharmony_ci So, in the typical usage case where you just want a single texture on 4405bd8deadSopenharmony_ci some points, you should enable TEXTURE_2D on unit 3 but disable it on 4415bd8deadSopenharmony_ci unit zero. 4425bd8deadSopenharmony_ci 4435bd8deadSopenharmony_ci The GeForce4 Ti platform supports point sprites as large as 8192, but 4445bd8deadSopenharmony_ci the spacing between sizes becomes larger as the size increases. All 4455bd8deadSopenharmony_ci other platforms do not support point sprite sizes above 64. 4465bd8deadSopenharmony_ci 4475bd8deadSopenharmony_ciATI Implementation Details 4485bd8deadSopenharmony_ci 4495bd8deadSopenharmony_ci This extension is supported on the Radeon 8000 series and later 4505bd8deadSopenharmony_ci platforms. 4515bd8deadSopenharmony_ci 4525bd8deadSopenharmony_ci In order to ensure that Radeon 8000 series will accelerate point 4535bd8deadSopenharmony_ci sprite rendering using TCL hardware, make sure that the point sprite 4545bd8deadSopenharmony_ci R mode is set to GL_ZERO. (This is the default.) 4555bd8deadSopenharmony_ci 4565bd8deadSopenharmony_ci Radeon 8000 series can render points as large as 2047. 4575bd8deadSopenharmony_ci 4585bd8deadSopenharmony_ciRevision History 4595bd8deadSopenharmony_ci 4605bd8deadSopenharmony_ci June 4, 2002 - Added implementation details section. Fixed a typo in 4615bd8deadSopenharmony_ci the overview. Changed behavior of point sizes so that fractional 4625bd8deadSopenharmony_ci sizes are allowed and so that implementations can support large point 4635bd8deadSopenharmony_ci sprites or use floating-point point size representations. 4645bd8deadSopenharmony_ci Significant rewrite of spec language to cover this new point size 4655bd8deadSopenharmony_ci behavior. 4665bd8deadSopenharmony_ci 4675bd8deadSopenharmony_ci July 5, 2002 - Finished GLX protocol. 4685bd8deadSopenharmony_ci 4695bd8deadSopenharmony_ci March 6, 2003 - Added issue to clarify Q handling for fragment 4705bd8deadSopenharmony_ci program extensions. Added issue to clarify push/pop attrib handling. 4715bd8deadSopenharmony_ci Adjusted state tables so COORD_REPLACE_NV state appears in the 4725bd8deadSopenharmony_ci texture environment and generation table. 473