15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci ARB_point_sprite 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_ARB_point_sprite 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContact 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Matt Craighead, NVIDIA Corporation (mcraighead 'at' nvidia.com) 125bd8deadSopenharmony_ci Mark Kilgard, NVIDIA Corporation (mjk 'at' nvidia.com) 135bd8deadSopenharmony_ci Pat Brown, NVIDIA Corporation (pbrown 'at' nvidia.com) 145bd8deadSopenharmony_ci 155bd8deadSopenharmony_ciNotice 165bd8deadSopenharmony_ci 175bd8deadSopenharmony_ci Copyright (c) 2003-2013 The Khronos Group Inc. Copyright terms at 185bd8deadSopenharmony_ci http://www.khronos.org/registry/speccopyright.html 195bd8deadSopenharmony_ci 205bd8deadSopenharmony_ciSpecification Update Policy 215bd8deadSopenharmony_ci 225bd8deadSopenharmony_ci Khronos-approved extension specifications are updated in response to 235bd8deadSopenharmony_ci issues and bugs prioritized by the Khronos OpenGL Working Group. For 245bd8deadSopenharmony_ci extensions which have been promoted to a core Specification, fixes will 255bd8deadSopenharmony_ci first appear in the latest version of that core Specification, and will 265bd8deadSopenharmony_ci eventually be backported to the extension document. This policy is 275bd8deadSopenharmony_ci described in more detail at 285bd8deadSopenharmony_ci https://www.khronos.org/registry/OpenGL/docs/update_policy.php 295bd8deadSopenharmony_ci 305bd8deadSopenharmony_ciIP Status 315bd8deadSopenharmony_ci 325bd8deadSopenharmony_ci No known IP issues. 335bd8deadSopenharmony_ci 345bd8deadSopenharmony_ciStatus 355bd8deadSopenharmony_ci 365bd8deadSopenharmony_ci Approved by the ARB on July 24, 2003. 375bd8deadSopenharmony_ci 385bd8deadSopenharmony_ciVersion 395bd8deadSopenharmony_ci 405bd8deadSopenharmony_ci Last Modified Date: July 22, 2003 415bd8deadSopenharmony_ci Revision: 7 425bd8deadSopenharmony_ci 435bd8deadSopenharmony_ciNumber 445bd8deadSopenharmony_ci 455bd8deadSopenharmony_ci ARB Extension #35 465bd8deadSopenharmony_ci 475bd8deadSopenharmony_ciDependencies 485bd8deadSopenharmony_ci 495bd8deadSopenharmony_ci Written based on the wording of the OpenGL 1.4 specification. 505bd8deadSopenharmony_ci 515bd8deadSopenharmony_ci NV_point_sprite affects the definition of this extension. 525bd8deadSopenharmony_ci 535bd8deadSopenharmony_ciOverview 545bd8deadSopenharmony_ci 555bd8deadSopenharmony_ci Applications such as particle systems have tended to use OpenGL quads 565bd8deadSopenharmony_ci rather than points to render their geometry, since they would like 575bd8deadSopenharmony_ci to use a custom-drawn texture for each particle, rather than the 585bd8deadSopenharmony_ci traditional OpenGL round antialiased points, and each fragment in 595bd8deadSopenharmony_ci a point has the same texture coordinates as every other fragment. 605bd8deadSopenharmony_ci 615bd8deadSopenharmony_ci Unfortunately, specifying the geometry for these quads can be 625bd8deadSopenharmony_ci expensive, since it quadruples the amount of geometry required, and 635bd8deadSopenharmony_ci may also require the application to do extra processing to compute 645bd8deadSopenharmony_ci the location of each vertex. 655bd8deadSopenharmony_ci 665bd8deadSopenharmony_ci The purpose of this extension is to allow such applications to use 675bd8deadSopenharmony_ci points rather than quads. When GL_POINT_SPRITE_ARB is enabled, 685bd8deadSopenharmony_ci the state of point antialiasing is ignored. For each texture unit, 695bd8deadSopenharmony_ci the app can then specify whether to replace the existing texture 705bd8deadSopenharmony_ci coordinates with point sprite texture coordinates, which are 715bd8deadSopenharmony_ci interpolated across the point. 725bd8deadSopenharmony_ci 735bd8deadSopenharmony_ciIssues 745bd8deadSopenharmony_ci 755bd8deadSopenharmony_ci * Should this spec say that point sprites get converted into quads? 765bd8deadSopenharmony_ci 775bd8deadSopenharmony_ci RESOLVED: No, this would make the spec much uglier, because then 785bd8deadSopenharmony_ci we'd have to say that polygon smooth and stipple get turned off, 795bd8deadSopenharmony_ci etc. Better to provide a formula for computing the texture 805bd8deadSopenharmony_ci coordinates and leave them as points. 815bd8deadSopenharmony_ci 825bd8deadSopenharmony_ci * How are point sprite texture coordinates computed? 835bd8deadSopenharmony_ci 845bd8deadSopenharmony_ci RESOLVED: They move smoothly as the point moves around on the 855bd8deadSopenharmony_ci screen, even though the pixels touched by the point do not. The 865bd8deadSopenharmony_ci exact formula is given in the spec below. 875bd8deadSopenharmony_ci 885bd8deadSopenharmony_ci A point sprite can be thought of as a quad whose upper-left corner has 895bd8deadSopenharmony_ci (s,t) texture coordinates of (0,0) and whose lower-right corner has 905bd8deadSopenharmony_ci texture coordinates of (1,1), as illustrated in the following figure. 915bd8deadSopenharmony_ci In the figure "P" is the center of the point sprite, and "O" is the 925bd8deadSopenharmony_ci origin (0,0) of the window coordinate system. Note that the y window 935bd8deadSopenharmony_ci coordinate increases from bottom-to-top but the t texture coordinate 945bd8deadSopenharmony_ci of point sprites increases from top-to-bottom. 955bd8deadSopenharmony_ci 965bd8deadSopenharmony_ci ^ 975bd8deadSopenharmony_ci +y| (0,0) 985bd8deadSopenharmony_ci | +-----+ 995bd8deadSopenharmony_ci | | | 1005bd8deadSopenharmony_ci | | P | 1015bd8deadSopenharmony_ci | | | 1025bd8deadSopenharmony_ci | +-----+ 1035bd8deadSopenharmony_ci | (1,1) 1045bd8deadSopenharmony_ci | +x 1055bd8deadSopenharmony_ci O---------------> 1065bd8deadSopenharmony_ci 1075bd8deadSopenharmony_ci Applications using a single texture for both point sprites and other 1085bd8deadSopenharmony_ci geometry need to account for the fixed coordinate mapping of point 1095bd8deadSopenharmony_ci sprites. 1105bd8deadSopenharmony_ci 1115bd8deadSopenharmony_ci * Is the ARB specification different from the NV version? 1125bd8deadSopenharmony_ci 1135bd8deadSopenharmony_ci RESOLVED: Yes. The point sprite R mode has been removed. The 1145bd8deadSopenharmony_ci wording has also been updated to reflect version 1.4 of the core 1155bd8deadSopenharmony_ci OpenGL specification however. The enumerant values are unchanged. 1165bd8deadSopenharmony_ci 1175bd8deadSopenharmony_ci * How do point sizes for point sprites work? 1185bd8deadSopenharmony_ci 1195bd8deadSopenharmony_ci RESOLVED: This specification treats point sprite sizes like 1205bd8deadSopenharmony_ci antialiased point sizes, but with more leniency. Implementations 1215bd8deadSopenharmony_ci may choose to not clamp the point size to the antialiased point 1225bd8deadSopenharmony_ci size range. The set of point sprite sizes available must be 1235bd8deadSopenharmony_ci a superset of the antialiased point sizes. However, whereas 1245bd8deadSopenharmony_ci antialiased point sizes are all evenly spaced by the point size 1255bd8deadSopenharmony_ci granularity, point sprites can have an arbitrary set of sizes. 1265bd8deadSopenharmony_ci This lets implementations use, e.g., floating-point sizes. 1275bd8deadSopenharmony_ci 1285bd8deadSopenharmony_ci * Should there be a way to query the list of supported point sprite 1295bd8deadSopenharmony_ci sizes? 1305bd8deadSopenharmony_ci 1315bd8deadSopenharmony_ci RESOLVED: No. If an implementation were to use, say, a single- 1325bd8deadSopenharmony_ci precision IEEE float to represent point sizes, the list would be 1335bd8deadSopenharmony_ci rather long. 1345bd8deadSopenharmony_ci 1355bd8deadSopenharmony_ci * Do mipmaps apply to point sprites? 1365bd8deadSopenharmony_ci 1375bd8deadSopenharmony_ci RESOLVED: Yes. They are similar to quads in this respect. 1385bd8deadSopenharmony_ci 1395bd8deadSopenharmony_ci * What of this extension's state is per-texture unit and what 1405bd8deadSopenharmony_ci of this extension's state is state is global? 1415bd8deadSopenharmony_ci 1425bd8deadSopenharmony_ci RESOLVED: The GL_POINT_SPRITE_ARB enable is global. The 1435bd8deadSopenharmony_ci COORD_REPLACE_ARB state is per-texture unit (state set by TexEnv is 1445bd8deadSopenharmony_ci per-texture unit). 1455bd8deadSopenharmony_ci 1465bd8deadSopenharmony_ci * Should there be a global on/off switch for point sprites, or 1475bd8deadSopenharmony_ci should the per-unit enable imply that switch? 1485bd8deadSopenharmony_ci 1495bd8deadSopenharmony_ci RESOLVED: There is a global switch to turn it on and off. This 1505bd8deadSopenharmony_ci is probably more convenient for both driver and app, and it 1515bd8deadSopenharmony_ci simplifies the spec. 1525bd8deadSopenharmony_ci 1535bd8deadSopenharmony_ci * What should the TexEnv mode for point sprites be called? 1545bd8deadSopenharmony_ci 1555bd8deadSopenharmony_ci RESOLVED: COORD_REPLACE_ARB. 1565bd8deadSopenharmony_ci 1575bd8deadSopenharmony_ci * What is the interaction with multisample points, which are round? 1585bd8deadSopenharmony_ci 1595bd8deadSopenharmony_ci RESOLVED: Point sprites are rasterized as squares, even in 1605bd8deadSopenharmony_ci multisample mode. Leaving them as round points would make the 1615bd8deadSopenharmony_ci feature useless. 1625bd8deadSopenharmony_ci 1635bd8deadSopenharmony_ci * How does the point sprite extension interact with fragment 1645bd8deadSopenharmony_ci program extensions (ARB_fragment_program, NV_fragment_program, 1655bd8deadSopenharmony_ci etc)? 1665bd8deadSopenharmony_ci 1675bd8deadSopenharmony_ci RESOLVED: The primary issue is how the interpolated texture 1685bd8deadSopenharmony_ci coordinate set appears when fragment attribute variables 1695bd8deadSopenharmony_ci (ARB terminology) or fragment program attribute registers (NV 1705bd8deadSopenharmony_ci terminology) are accessed. 1715bd8deadSopenharmony_ci 1725bd8deadSopenharmony_ci When point sprite is enabled and the GL_COORD_REPLACE_ARB state for 1735bd8deadSopenharmony_ci a given texture unit is GL_TRUE, the texture coordinate set for 1745bd8deadSopenharmony_ci that texture unit is (s,t,0,1) where the point sprite-overridden 1755bd8deadSopenharmony_ci s and t are described in the amended Section 3.3 below. The 1765bd8deadSopenharmony_ci important point is that r and q are forced to 0 and 1, respectively. 1775bd8deadSopenharmony_ci 1785bd8deadSopenharmony_ci For fragment program extensions, r and q correspond to the z and w 1795bd8deadSopenharmony_ci components of the respective fragment attribute. 1805bd8deadSopenharmony_ci 1815bd8deadSopenharmony_ci * How does this extension interact with PolygonMode? 1825bd8deadSopenharmony_ci 1835bd8deadSopenharmony_ci RESOLVED: If a polygon is rendered in point mode and POINT_SPRITE_ARB 1845bd8deadSopenharmony_ci is enabled, its vertices will be rendered as point sprites. 1855bd8deadSopenharmony_ci 1865bd8deadSopenharmony_ci * How does this extension interact with the point size attenuation 1875bd8deadSopenharmony_ci functionality in ARB_point_parameters and OpenGL 1.4? 1885bd8deadSopenharmony_ci 1895bd8deadSopenharmony_ci RESOLVED: Point sprites sizes are attenuated just like the sizes of 1905bd8deadSopenharmony_ci non-sprite points. 1915bd8deadSopenharmony_ci 1925bd8deadSopenharmony_ci * What push/pop attribute bits control the state of this extension? 1935bd8deadSopenharmony_ci 1945bd8deadSopenharmony_ci RESOLVED: POINT_BIT for all the state. Also ENABLE_BIT for 1955bd8deadSopenharmony_ci the POINT_SPRITE_ARB enable. 1965bd8deadSopenharmony_ci 1975bd8deadSopenharmony_ci * How are point sprites clipped? 1985bd8deadSopenharmony_ci 1995bd8deadSopenharmony_ci RESOLVED: Point sprites are transformed as points, and standard point 2005bd8deadSopenharmony_ci clipping operations are performed. This can cause point sprites that 2015bd8deadSopenharmony_ci move off the edge of the screen to disappear abruptly, in the same way 2025bd8deadSopenharmony_ci that regular points do. As with any other primitive, standard 2035bd8deadSopenharmony_ci per-fragment clipping operations (scissoring, window ownership test) 2045bd8deadSopenharmony_ci still apply. 2055bd8deadSopenharmony_ci 2065bd8deadSopenharmony_ciNew Procedures and Functions 2075bd8deadSopenharmony_ci 2085bd8deadSopenharmony_ci None 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_ARB 0x8861 2185bd8deadSopenharmony_ci 2195bd8deadSopenharmony_ci When the <target> parameter of TexEnvf, TexEnvfv, TexEnvi, TexEnviv, 2205bd8deadSopenharmony_ci GetTexEnvfv, or GetTexEnviv is POINT_SPRITE_ARB, then the value of 2215bd8deadSopenharmony_ci <pname> may be: 2225bd8deadSopenharmony_ci 2235bd8deadSopenharmony_ci COORD_REPLACE_ARB 0x8862 2245bd8deadSopenharmony_ci 2255bd8deadSopenharmony_ci When the <target> and <pname> parameters of TexEnvf, TexEnvfv, 2265bd8deadSopenharmony_ci TexEnvi, or TexEnviv are POINT_SPRITE_ARB and COORD_REPLACE_ARB 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 2345bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 1.4 Specification (OpenGL Operation) 2355bd8deadSopenharmony_ci 2365bd8deadSopenharmony_ci None. 2375bd8deadSopenharmony_ci 2385bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 1.4 Specification (Rasterization) 2395bd8deadSopenharmony_ci 2405bd8deadSopenharmony_ci Insert the following paragraphs after the second paragraph of section 2415bd8deadSopenharmony_ci 3.3 (page 66): 2425bd8deadSopenharmony_ci 2435bd8deadSopenharmony_ci "Point sprites are enabled or disabled by calling Enable or Disable 2445bd8deadSopenharmony_ci with the symbolic constant POINT_SPRITE_ARB. The default state is for 2455bd8deadSopenharmony_ci point sprites to be disabled. When point sprites are enabled, the 2465bd8deadSopenharmony_ci state of the point antialiasing enable is ignored. 2475bd8deadSopenharmony_ci 2485bd8deadSopenharmony_ci The point sprite texture coordinate replacement mode is set with one 2495bd8deadSopenharmony_ci of the commands 2505bd8deadSopenharmony_ci 2515bd8deadSopenharmony_ci void TexEnv{if}(enum target, enum pname, T param) 2525bd8deadSopenharmony_ci void TexEnv{if}v(enum target, enum pname, const T *params) 2535bd8deadSopenharmony_ci 2545bd8deadSopenharmony_ci where target is POINT_SPRITE_ARB and pname is COORD_REPLACE_ARB. The 2555bd8deadSopenharmony_ci possible values for param are FALSE and TRUE. The default value for 2565bd8deadSopenharmony_ci each texture unit is for point sprite texture coordinate replacement 2575bd8deadSopenharmony_ci to be disabled." 2585bd8deadSopenharmony_ci 2595bd8deadSopenharmony_ci Replace the first two sentences of the second paragraph of section 2605bd8deadSopenharmony_ci 3.3.1 (page 67) with the following: 2615bd8deadSopenharmony_ci 2625bd8deadSopenharmony_ci "The effect of a point width other than 1.0 depends on the state of 2635bd8deadSopenharmony_ci point antialiasing and point sprites. If antialiasing and point 2645bd8deadSopenharmony_ci sprites are disabled, ..." 2655bd8deadSopenharmony_ci 2665bd8deadSopenharmony_ci Replace the first sentences of the fourth paragraph of section 3.3.1 2675bd8deadSopenharmony_ci (page 68) with the following: 2685bd8deadSopenharmony_ci 2695bd8deadSopenharmony_ci "If antialiasing is enabled and point sprites are disabled, ..." 2705bd8deadSopenharmony_ci 2715bd8deadSopenharmony_ci Insert the following paragraphs at the end of section 3.3.1 (page 2725bd8deadSopenharmony_ci 70): 2735bd8deadSopenharmony_ci 2745bd8deadSopenharmony_ci "When point sprites are enabled, then point rasterization produces a 2755bd8deadSopenharmony_ci fragment for each framebuffer pixel whose center lies inside a square 2765bd8deadSopenharmony_ci centered at the point's (x_w, y_w), with side length equal to the 2775bd8deadSopenharmony_ci current point size. 2785bd8deadSopenharmony_ci 2795bd8deadSopenharmony_ci All fragments produced in rasterizing a point sprite are assigned the 2805bd8deadSopenharmony_ci same associated data, which are those of the vertex corresponding to 2815bd8deadSopenharmony_ci the point, with texture coordinates s, t, and r replaced with s/q, 2825bd8deadSopenharmony_ci t/q, and r/q, respectively. If q is less than or equal to zero, the 2835bd8deadSopenharmony_ci results are undefined. However, for each texture unit where 2845bd8deadSopenharmony_ci COORD_REPLACE_ARB is TRUE, these texture coordinates are replaced 2855bd8deadSopenharmony_ci with point sprite texture coordinates. The s coordinate varies 2865bd8deadSopenharmony_ci from 0 to 1 across the point horizontally left-to-right, while 2875bd8deadSopenharmony_ci the t coordinate varies from 0 to 1 vertically top-to-bottom. 2885bd8deadSopenharmony_ci The r and q coordinates are replaced with the constants 0 and 1, 2895bd8deadSopenharmony_ci respectively. 2905bd8deadSopenharmony_ci 2915bd8deadSopenharmony_ci The following formula is used to evaluate the s and t coordinates: 2925bd8deadSopenharmony_ci 2935bd8deadSopenharmony_ci s = 1/2 + (x_f + 1/2 - x_w) / size 2945bd8deadSopenharmony_ci t = 1/2 - (y_f + 1/2 - y_w) / size 2955bd8deadSopenharmony_ci 2965bd8deadSopenharmony_ci where size is the point's size, x_f and y_f are the (integral) window 2975bd8deadSopenharmony_ci coordinates of the fragment, and x_w and y_w are the exact, unrounded 2985bd8deadSopenharmony_ci window coordinates of the vertex for the point. 2995bd8deadSopenharmony_ci 3005bd8deadSopenharmony_ci The widths supported for point sprites must be a superset of those 3015bd8deadSopenharmony_ci supported for antialiased points. There is no requirement that these 3025bd8deadSopenharmony_ci widths must be equally spaced. If an unsupported width is requested, 3035bd8deadSopenharmony_ci the nearest supported width is used instead." 3045bd8deadSopenharmony_ci 3055bd8deadSopenharmony_ci Replace the text of section 3.3.2 (page 70) with the following: 3065bd8deadSopenharmony_ci 3075bd8deadSopenharmony_ci "The state required to control point rasterization consists of the 3085bd8deadSopenharmony_ci floating-point point width, three floating-point values specifying 3095bd8deadSopenharmony_ci the minimum and maximum point size and the point fade threshold size, 3105bd8deadSopenharmony_ci three floating-point values specifying the distance attenuation 3115bd8deadSopenharmony_ci coefficients, a bit indicating whether or not antialiasing is 3125bd8deadSopenharmony_ci enabled, a bit indicating whether or not point sprites are enabled, 3135bd8deadSopenharmony_ci and a bit for the point sprite texture coordinate replacement mode 3145bd8deadSopenharmony_ci for each texture unit." 3155bd8deadSopenharmony_ci 3165bd8deadSopenharmony_ci Replace the text of section 3.3.3 (page 70) with the following: 3175bd8deadSopenharmony_ci 3185bd8deadSopenharmony_ci "If MULTISAMPLE is enabled, and the value of SAMPLE_BUFFERS is one, 3195bd8deadSopenharmony_ci then points are rasterized using the following algorithm, regardless 3205bd8deadSopenharmony_ci of whether point antialiasing (POINT_SMOOTH) is enabled or disabled. 3215bd8deadSopenharmony_ci Point rasterization produces a fragment for each framebuffer pixel 3225bd8deadSopenharmony_ci with one or more sample points that intersect a region centered at 3235bd8deadSopenharmony_ci the point's (x_w, y_w). This region is a circle having diameter 3245bd8deadSopenharmony_ci equal to the current point width if POINT_SPRITE_ARB is disabled, or 3255bd8deadSopenharmony_ci a square with side equal to the current point width if 3265bd8deadSopenharmony_ci POINT_SPRITE_ARB is enabled. Coverage bits that correspond to sample 3275bd8deadSopenharmony_ci points that intersect the region are 1, other coverage bits are 0. 3285bd8deadSopenharmony_ci All data associated with each sample for the fragment are the data 3295bd8deadSopenharmony_ci associated with the point being rasterized, with the exception of 3305bd8deadSopenharmony_ci texture coordinates when POINT_SPRITE_ARB is enabled; these texture 3315bd8deadSopenharmony_ci coordinates are computed as described in section 3.3. 3325bd8deadSopenharmony_ci 3335bd8deadSopenharmony_ci Point size range and number of gradations are equivalent to those 3345bd8deadSopenharmony_ci supported for antialiased points when POINT_SPRITE_ARB is disabled. 3355bd8deadSopenharmony_ci The set of point sizes supported is equivalent to those for point 3365bd8deadSopenharmony_ci sprites without multisample when POINT_SPRITE_ARB is enabled." 3375bd8deadSopenharmony_ci 3385bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 1.4 Specification (Per-Fragment 3395bd8deadSopenharmony_ciOperations and the Frame Buffer) 3405bd8deadSopenharmony_ci 3415bd8deadSopenharmony_ci None. 3425bd8deadSopenharmony_ci 3435bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 1.4 Specification (Special 3445bd8deadSopenharmony_ciFunctions) 3455bd8deadSopenharmony_ci 3465bd8deadSopenharmony_ci None. 3475bd8deadSopenharmony_ci 3485bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 1.4 Specification (State and 3495bd8deadSopenharmony_ciState Requests) 3505bd8deadSopenharmony_ci 3515bd8deadSopenharmony_ci None. 3525bd8deadSopenharmony_ci 3535bd8deadSopenharmony_ciInteractions with NV_point_sprite 3545bd8deadSopenharmony_ci 3555bd8deadSopenharmony_ci ARB_point_sprite is a functional subset of NV_point_sprite. 3565bd8deadSopenharmony_ci 3575bd8deadSopenharmony_ci The only functional difference between the extensions is that 3585bd8deadSopenharmony_ci NV_point_sprite provides the POINT_SPRITE_R_MODE_NV control. This mode 3595bd8deadSopenharmony_ci allows applications to specify how the r texture coordinates for point 3605bd8deadSopenharmony_ci sprites are replaced. The r coordinate can be replaced with the 3615bd8deadSopenharmony_ci corresponding s texture coordinate ("S" mode), left unchanged ("R" mode), 3625bd8deadSopenharmony_ci or replaced with the constant zero ("ZERO" mode). ARB_point_sprite always 3635bd8deadSopenharmony_ci replaces r texture coordiantes of point sprites with zero. 3645bd8deadSopenharmony_ci 3655bd8deadSopenharmony_ci Since ARB_point_sprite is functionally compatible with the default r mode 3665bd8deadSopenharmony_ci from NV_point_sprite, the two extensions can coexist nicely. Enumerant 3675bd8deadSopenharmony_ci values from NV_point_sprite are reused. 3685bd8deadSopenharmony_ci 3695bd8deadSopenharmony_ci If NV_point_sprite is supported, the language describing the replacement 3705bd8deadSopenharmony_ci of r coordinates for point sprites (forced to zero) is replaced with the 3715bd8deadSopenharmony_ci corresponding language from NV_point_sprite (controlled by 3725bd8deadSopenharmony_ci POINT_SPRITE_R_MODE_NV). 3735bd8deadSopenharmony_ci 3745bd8deadSopenharmony_ci 3755bd8deadSopenharmony_ciErrors 3765bd8deadSopenharmony_ci 3775bd8deadSopenharmony_ci None. 3785bd8deadSopenharmony_ci 3795bd8deadSopenharmony_ciNew State 3805bd8deadSopenharmony_ci 3815bd8deadSopenharmony_ci(table 6.12, p. 220) 3825bd8deadSopenharmony_ci 3835bd8deadSopenharmony_ciGet Value Type Get Command Initial Value Description Sec Attribute 3845bd8deadSopenharmony_ci--------- ---- ----------- ------------- ----------- ------ --------- 3855bd8deadSopenharmony_ciPOINT_SPRITE_ARB B IsEnabled False point sprite enable 3.3 point/enable 3865bd8deadSopenharmony_ci 3875bd8deadSopenharmony_ci(table 6.17, p. 225) 3885bd8deadSopenharmony_ci 3895bd8deadSopenharmony_ciGet Value Type Get Command Initial Value Description Sec Attribute 3905bd8deadSopenharmony_ci--------- ---- ----------- ------------- ----------- ------ --------- 3915bd8deadSopenharmony_ciCOORD_REPLACE_ARB 2* x B GetTexEnviv False coordinate replacement 3.3 point 3925bd8deadSopenharmony_ci enable 3935bd8deadSopenharmony_ci 3945bd8deadSopenharmony_ciRevision History 3955bd8deadSopenharmony_ci 3965bd8deadSopenharmony_ci Initially based on the NV_point_sprite specification but updated for 3975bd8deadSopenharmony_ci OpenGL 1.4. 3985bd8deadSopenharmony_ci 3995bd8deadSopenharmony_ci Rev. Date Author Changes 4005bd8deadSopenharmony_ci ---- -------- -------- -------------------------------------------- 4015bd8deadSopenharmony_ci 7 07/22/03 pbrown Marked point parameter issue resolved. 4025bd8deadSopenharmony_ci 4035bd8deadSopenharmony_ci 6 07/18/03 pbrown Removed POINT_SPRITE_R_MODE_CONTROL. 4045bd8deadSopenharmony_ci 4055bd8deadSopenharmony_ci Expanded on spec issue documenting the inversion 4065bd8deadSopenharmony_ci of the "t" texture coordinate relative to the 4075bd8deadSopenharmony_ci "y" window coordinate. Added issues on 4085bd8deadSopenharmony_ci interaction with PolygonMode, clipping, and 4095bd8deadSopenharmony_ci point parameters. Documented interaction with 4105bd8deadSopenharmony_ci NV_point_sprite. Removed now unneeded point 4115bd8deadSopenharmony_ci parameter interaction section and GLX protocol. 412