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