| Name |
| |
| ARB_point_parameters |
| |
| Name Strings |
| |
| GL_ARB_point_parameters |
| |
| Contact |
| |
| Michael Gold, NVIDIA (gold 'at' nvidia.com) |
| |
| Notice |
| |
| Copyright (c) 2000-2013 The Khronos Group Inc. Copyright terms at |
| http://www.khronos.org/registry/speccopyright.html |
| |
| Specification Update Policy |
| |
| Khronos-approved extension specifications are updated in response to |
| issues and bugs prioritized by the Khronos OpenGL Working Group. For |
| extensions which have been promoted to a core Specification, fixes will |
| first appear in the latest version of that core Specification, and will |
| eventually be backported to the extension document. This policy is |
| described in more detail at |
| https://www.khronos.org/registry/OpenGL/docs/update_policy.php |
| |
| Status |
| |
| Approved by the ARB, 21 June 2000. |
| |
| Version |
| |
| Revision Date: September 23, 2010 |
| Version: 0.6 |
| |
| Based on: EXT_point_parameters |
| $Date: 1997/08/21 21:26:36 $ $Revision: 1.6 $ |
| |
| Number |
| |
| ARB Extension #14 |
| |
| Dependencies |
| |
| OpenGL 1.0 is required. |
| ARB_multisample affects the definition of this extension. |
| The extension is written against the OpenGL 1.2.1 Specification. |
| |
| Overview |
| |
| This extension supports additional geometric characteristics of |
| points. It can be used to render particles or tiny light sources, |
| commonly referred to as "Light points". |
| |
| The raster brightness of a point is a function of the point area, |
| point color, point transparency, and the response of the display's |
| electron gun and phosphor. The point area and the point transparency |
| are derived from the point size, currently provided with the <size> |
| parameter of glPointSize. |
| |
| The primary motivation is to allow the size of a point to be |
| affected by distance attenuation. When distance attenuation has an |
| effect, the final point size decreases as the distance of the point |
| from the eye increases. |
| |
| The secondary motivation is a mean to control the mapping from the |
| point size to the raster point area and point transparency. This is |
| done in order to increase the dynamic range of the raster brightness |
| of points. In other words, the alpha component of a point may be |
| decreased (and its transparency increased) as its area shrinks below |
| a defined threshold. |
| |
| This extension defines a derived point size to be closely related to |
| point brightness. The brightness of a point is given by: |
| |
| 1 |
| dist_atten(d) = ------------------- |
| a + b * d + c * d^2 |
| |
| brightness(Pe) = Brightness * dist_atten(|Pe|) |
| |
| where 'Pe' is the point in eye coordinates, and 'Brightness' is some |
| initial value proportional to the square of the size provided with |
| PointSize. Here we simplify the raster brightness to be a function |
| of the rasterized point area and point transparency. |
| |
| brightness(Pe) brightness(Pe) >= Threshold_Area |
| area(Pe) = |
| Threshold_Area Otherwise |
| |
| factor(Pe) = brightness(Pe)/Threshold_Area |
| |
| alpha(Pe) = Alpha * factor(Pe) |
| |
| where 'Alpha' comes with the point color (possibly modified by |
| lighting). |
| |
| 'Threshold_Area' above is in area units. Thus, it is proportional to |
| the square of the threshold provided by the programmer through this |
| extension. |
| |
| The new point size derivation method applies to all points, while |
| the threshold applies to multisample points only. |
| |
| IP Status |
| |
| None. |
| |
| Issues |
| |
| * Does point alpha modification affect the current color ? |
| |
| No. |
| |
| * Do we need a special function GetPointParameterfvARB, or get by |
| with GetFloat ? |
| |
| GetFloat is sufficient. |
| |
| * If alpha is 0, then we could toss the point before it reaches the |
| fragment stage. |
| |
| No. This can be achieved with enabling the alpha test with |
| reference of 0 and function of LEQUAL. |
| |
| * Do we need a disable for applying the threshold ? The default |
| threshold value is 1.0. It is applied even if the point size is |
| constant. |
| |
| If the default threshold is not overridden, the area of |
| multisample points with provided constant size of less than 1.0, |
| is mapped to 1.0, while the alpha component is modulated |
| accordingly, to compensate for the larger area. For multisample |
| points this is not a problem, as there are no relevant |
| applications yet. As mentioned above, the threshold does not apply |
| to alias or antialias points. |
| |
| The alternative is to have a disable of threshold application, and |
| state that threshold (if not disabled) applies to non antialias |
| points only (that is, alias and multisample points). |
| |
| The behavior without an enable/disable looks fine. |
| |
| * Future extensions (to the extension) |
| |
| 1. POINT_FADE_ALPHA_CLAMP_ARB |
| |
| When the derived point size is larger than the threshold size |
| defined by the POINT_FADE_THRESHOLD_SIZE_ARB parameter, it might |
| be desired to clamp the computed alpha to a minimum value, in |
| order to keep the point visible. In this case the formula below |
| change: |
| |
| factor = (derived_size/threshold)^2 |
| |
| factor clamp <= factor |
| clamped_value = |
| clamp factor < clamp |
| |
| 1.0 derived_size >= threshold |
| alpha *= |
| clamped_value Otherwise |
| |
| where clamp is defined by the POINT_FADE_ALPHA_CLAMP_ARB new |
| parameter. |
| |
| New Procedures and Functions |
| |
| void PointParameterfARB(enum pname, |
| float param); |
| void PointParameterfvARB(enum pname, |
| const float *params); |
| |
| New Tokens |
| |
| Accepted by the <pname> parameter of PointParameterfARB, and the |
| <pname> of Get: |
| |
| POINT_SIZE_MIN_ARB |
| POINT_SIZE_MAX_ARB |
| POINT_FADE_THRESHOLD_SIZE_ARB |
| |
| Accepted by the <pname> parameter of PointParameterfvARB, and the |
| <pname> of Get: |
| |
| POINT_SIZE_MIN_ARB 0x8126 |
| POINT_SIZE_MAX_ARB 0x8127 |
| POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 |
| POINT_DISTANCE_ATTENUATION_ARB 0x8129 |
| |
| Additions to Chapter 2 of the OpenGL 1.2.1 Specification (OpenGL Operation) |
| |
| None |
| |
| Additions to Chapter 3 of the OpenGL 1.2.1 Specification (Rasterization) |
| |
| In section 3.3, the following is inserted after the description of |
| PointSize: |
| |
| The point size is multiplied with a distance attenuation factor |
| and clamped as follows: |
| |
| derived_size = Clamp(size * sqrt(dist_atten(dist))) |
| |
| where dist_atten is specified as |
| |
| 1 |
| dist_atten(d) = ------------------- |
| a + b * d + c * d^2 |
| |
| and 'd' is the eye-coordinate distance from the eye, (0, 0, 0, 1) in |
| eye coordinates, to the vertex. |
| |
| The derived point size is clamped to a given range, and then |
| clamped to the implementation-dependent point size range. |
| |
| If multisampling is enabled, an implementation may optionally fade |
| the point alpha (section 3.12) instead of allowing the size to go |
| below a given threshold. In this case, the diameter of the |
| rasterized point is |
| |
| derived_size derived_size >= threshold |
| diameter = |
| threshold Otherwise |
| |
| and the fade factor is computed as follows: |
| |
| 1 derived_size >= threshold |
| fade = |
| (derived_size/threshold)^2 Otherwise |
| |
| The distance attenuation function coefficients, 'a', 'b', and 'c', |
| the bounds of the clamp, and the point fade 'threshold', are |
| specified with |
| |
| void PointParameterfARB( enum pname, float param ); |
| void PointParameterfvARB( enum pname, const float *params ); |
| |
| If <pname> is POINT_SIZE_MIN_ARB or POINT_SIZE_MAX_ARB, then |
| <param> specifies, or <params> points to the lower or upper bound |
| respectively on the derived point size. If the lower bound is |
| greater than the upper bound, the resulting point size is |
| undefined. If <pname> is POINT_DISTANCE_ATTENUATION_ARB, then |
| <params> points to the coefficients 'a', 'b', and 'c'. If <pname> |
| is POINT_FADE_THRESHOLD_SIZE_ARB, <param> specifies, or <params> |
| points to the point fade threshold. |
| |
| This extension doesn't change the feedback or selection behavior of |
| points. |
| |
| In section 3.11, the word "Finally" is removed from the first |
| sentence. |
| |
| Add the following after section 3.11. |
| |
| Section 3.12 Multisample Point Fade |
| |
| If multisampling is enabled and the rasterized fragment results |
| from a point primitive, then the computed fade factor is applied |
| to the fragment. In RGBA mode, the fade factor is multiplied by |
| the fragment's alpha (A) value to yield a final alpha value. In |
| color index mode, the fade factor has no effect. |
| |
| Additions to Chapter 4 of the OpenGL 1.2.1 Specification (Per-Fragment |
| Operations and the Frame Buffer) |
| |
| None |
| |
| Additions to Chapter 5 of the OpenGL 1.2.1 Specification (Special Functions) |
| |
| None |
| |
| Additions to Chapter 6 of the OpenGL 1.2.1 Specification (State and |
| State Requests) |
| |
| None |
| |
| Additions to Appendix A of the OpenGL 1.2.1 Specification (Invariance) |
| |
| None |
| |
| Additions to the GLX / WGL / AGL Specifications |
| |
| None |
| |
| GLX Protocol |
| |
| Two new GL rendering commands are added. The following commands are |
| sent to the server as part of a glXRender request: |
| |
| PointParameterfARB |
| 2 8+4*n rendering command length |
| 2 2065 rendering command opcode |
| 4 ENUM pname |
| 0x8126 n=1 POINT_SIZE_MIN_ARB |
| 0x8127 n=1 POINT_SIZE_MAX_ARB |
| 0x8128 n=1 POINT_FADE_THRESHOLD_SIZE_ARB |
| 4 FLOAT32 param |
| |
| PointParameterfvARB |
| 2 8+4*n rendering command length |
| 2 2066 rendering command opcode |
| 4 ENUM pname |
| 0x8126 n=1 POINT_SIZE_MIN_ARB |
| 0x8127 n=1 POINT_SIZE_MAX_ARB |
| 0x8128 n=1 POINT_FADE_THRESHOLD_SIZE_ARB |
| 0x8129 n=3 POINT_DISTANCE_ATTENUATION_ARB |
| 4*n LISTofFLOAT32 params |
| |
| Dependencies on ARB_multisample |
| |
| If ARB_multisample is not implemented, then the references to |
| multisample points are invalid, and should be ignored. |
| |
| Errors |
| |
| INVALID_ENUM is generated if PointParameterfARB parameter <pname> is |
| not POINT_SIZE_MIN_ARB, POINT_SIZE_MAX_ARB, or |
| POINT_FADE_THRESHOLD_SIZE_ARB. |
| |
| INVALID_ENUM is generated if PointParameterfvARB parameter <pname> |
| is not POINT_SIZE_MIN_ARB, POINT_SIZE_MAX_ARB, |
| POINT_FADE_THRESHOLD_SIZE_ARB, or POINT_DISTANCE_ATTENUATION_ARB |
| |
| INVALID_VALUE is generated when values are out of range according |
| to: |
| |
| <pname> valid range |
| -------- ----------- |
| POINT_SIZE_MIN_ARB >= 0 |
| POINT_SIZE_MAX_ARB >= 0 |
| POINT_FADE_THRESHOLD_SIZE_ARB >= 0 |
| |
| |
| New State |
| |
| (table 6.11, p. 201) |
| Initial |
| Get Value Type Get Command Value Description Sec. Attribute |
| --------- ---- ----------- ------- ----------- ---- --------- |
| POINT_SIZE_MIN_ARB R+ GetFloatv 0.0 Attenuated 3.3 point |
| Min point |
| size |
| |
| POINT_SIZE_MAX_ARB R+ GetFloatv M Attenuated 3.3 point |
| Max point |
| size |
| |
| POINT_FADE_THRESHOLD_SIZE_ARB R+ GetFloatv 1.0 Threshold 3.3 point |
| for alpha |
| attenuation |
| |
| POINT_DISTANCE_ATTENUATION_ARB 3xR GetFloatv (1.0,0.0,0.0) 3.3 point |
| Attenuation |
| coefficients |
| |
| M is the larger of the max antialiased and non antialiased point |
| sizes. |
| |
| New Implementation Dependent State |
| |
| None |
| |
| Revision History |
| |
| 11/09/1999 0.1 |
| - First ARB draft based on the original SGI and EXT drafts. |
| |
| 12/07/1999 0.2 |
| - clarified behavior when POINT_SIZE_MIN exceeds POINT_SIZE_MAX |
| - clarified when the point size is clamped to the supported range |
| - removed issues from "Errors" section |
| - fixed various typos |
| - Updated to new extension template |
| - added GLX protocol |
| |
| 04/20/2000 0.3 |
| - rewritten to fit within the context of the 1.2 specification |
| - added language describing where the fade alpha is applied. |
| - added language which indicates that some implementations may not |
| implement POINT_FADE_THRESHOLD_SIZE_ARB |
| |
| 06/20/2000 0.4 |
| - removed alternate behavior for fade alpha, since it is optional |
| - added new section describing fade alpha application |
| |
| 03/12/2002 0.5 |
| - added GLX protocol for PointParameterfARB and assigned ropcodes |
| |
| 09/23/2010 0.6 (pbrown) |
| - add "const" qualifier to <params> argument to PointParameterfvARB |