| Name |
| |
| EXT_point_parameters |
| |
| Name Strings |
| |
| GL_EXT_point_parameters |
| |
| Version |
| |
| Revision Date: September 23, 2010 |
| Version: 1.8 |
| |
| Number |
| |
| 54 |
| |
| Dependencies |
| |
| SGIS_multisample affects the definition of this extension. |
| |
| Overview |
| |
| This extension supports additional geometric characteristics of points. It |
| can be used to render particles or tiny light sources, commonly referred |
| 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 glPointSize. 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. |
| |
| Issues |
| |
| * Does point alpha modification affect the current color ? |
| |
| No. |
| |
| * Do we need a special function glGetPointParameterfvEXT, or get by with |
| glGetFloat ? |
| |
| No. |
| |
| * 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 overriden, 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. GL_POINT_FADE_ALPHA_CLAMP_EXT |
| |
| When the derived point size is larger than the threshold size defined by |
| the GL_POINT_FADE_THRESHOLD_SIZE_EXT 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 GL_POINT_FADE_ALPHA_CLAMP_EXT new parameter. |
| |
| New Procedures and Functions |
| |
| void glPointParameterfEXT ( GLenum pname, GLfloat param ); |
| void glPointParameterfvEXT ( GLenum pname, const GLfloat *params ); |
| |
| New Tokens |
| |
| Accepted by the <pname> parameter of glPointParameterfEXT, and the <pname> |
| of glGet: |
| |
| GL_POINT_SIZE_MIN_EXT |
| GL_POINT_SIZE_MAX_EXT |
| GL_POINT_FADE_THRESHOLD_SIZE_EXT |
| |
| Accepted by the <pname> parameter of glPointParameterfvEXT, and the <pname> |
| of glGet: |
| |
| GL_POINT_SIZE_MIN_EXT 0x8126 |
| GL_POINT_SIZE_MAX_EXT 0x8127 |
| GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 |
| GL_DISTANCE_ATTENUATION_EXT 0x8129 |
| |
| Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation) |
| |
| None |
| |
| Additions to Chapter 3 of the 1.0 Specification (Rasterization) |
| |
| All parameters of the glPointParameterfEXT and glPointParameterfvEXT |
| functions set various values applied to point rendering. The derived point |
| size is defined to be the <size> provided with glPointSize modulated with a |
| distance attenuation factor. |
| |
| The parameters GL_POINT_SIZE_MIN_EXT and GL_POINT_SIZE_MAX_EXT simply |
| define an upper and lower bounds respectively on the derived point size. |
| |
| The above parameters affect non multisample points as well as multisample |
| points, while the GL_POINT_FADE_THRESHOLD_SIZE_EXT parameter, has no effect |
| on non multisample points. If the derived point size is larger than |
| the threshold size defined by the GL_POINT_FADE_THRESHOLD_SIZE_EXT |
| parameter, the derived point size is used as the diameter of the rasterized |
| point, and the alpha component is intact. Otherwise, the threshold size is |
| set to be the diameter of the rasterized point, while the alpha component is |
| modulated accordingly, to compensate for the larger area. |
| |
| The distance attenuation function coefficients, namely a, b, and c in: |
| |
| 1 |
| dist_atten(d) = ------------------- |
| a + b * d + c * d^2 |
| |
| are defined by the <pname> parameter GL_DISTANCE_ATTENUATION_EXT of the |
| function glPointParameterfvEXT. By default a = 1, b = 0, and c = 0. |
| |
| Let 'size' be the point size provided with glPointSize, let 'dist' be the |
| distance of the point from the eye, and let 'threshold' be the threshold size |
| defined by the GL_POINT_FADE_THRESHOLD_SIZE parameter of |
| glPointParameterfEXT. The derived point size is given by: |
| |
| derived_size = size * sqrt(dist_atten(dist)) |
| |
| Note that when default values are used, the above formula reduces to: |
| |
| derived_size = size |
| |
| the diameter of the rasterized point is given by: |
| |
| derived_size derived_size >= threshold |
| diameter = |
| threshold Otherwise |
| |
| The alpha of a point is calculated to allow the fading of points instead of |
| shrinking them past a defined threshold size. The alpha component of the |
| rasterized point is given by: |
| |
| 1 derived_size >= threshold |
| alpha *= |
| (derived_size/threshold)^2 Otherwise |
| |
| The threshold defined by GL_POINT_FADE_THRESHOLD_SIZE_EXT is not clamped |
| to the minimum and maximum point sizes. |
| |
| Points do not affect the current color. |
| |
| This extension doesn't change the feedback or selection behavior of points. |
| |
| Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations |
| and the Framebuffer) |
| |
| None |
| |
| Additions to Chapter 5 of the 1.0 Specification (Special Functions) |
| |
| None |
| |
| Additions to Chapter 6 of the 1.0 Specification (State and State Requests) |
| |
| None |
| |
| Additions to the GLX Specification |
| |
| None |
| |
| GLX Protocol |
| |
| Two new GL rendering commands are added. The following commands are |
| sent to the server as part of a glXRender request: |
| |
| PointParameterfEXT |
| 2 8+4*n rendering command length |
| 2 2065 rendering command opcode |
| 4 ENUM pname |
| 0x8126 n=1 POINT_SIZE_MIN_EXT |
| 0x8127 n=1 POINT_SIZE_MAX_EXT |
| 0x8128 n=1 POINT_FADE_THRESHOLD_SIZE_EXT |
| 4 FLOAT32 param |
| |
| PointParameterfvEXT |
| 2 8+4*n rendering command length |
| 2 2066 rendering command opcode |
| 4 ENUM pname |
| 0x8126 n=1 POINT_SIZE_MIN_EXT |
| 0x8127 n=1 POINT_SIZE_MAX_EXT |
| 0x8128 n=1 POINT_FADE_THRESHOLD_SIZE_EXT |
| 0x8129 n=3 POINT_DISTANCE_ATTENUATION_EXT |
| 4*n LISTofFLOAT32 params |
| |
| Dependencies on SGIS_multisample |
| |
| If SGIS_multisample is not implemented, then the references to |
| multisample points are invalid, and should be ignored. |
| |
| Errors |
| |
| INVALID_ENUM is generated if PointParameterfEXT parameter <pname> is not |
| GL_POINT_SIZE_MIN_EXT, GL_POINT_SIZE_MAX_EXT, or |
| GL_POINT_FADE_THRESHOLD_SIZE_EXT. |
| |
| INVALID_ENUM is generated if PointParameterfvEXT parameter <pname> is |
| not GL_POINT_SIZE_MIN_EXT, GL_POINT_SIZE_MAX_EXT, |
| GL_POINT_FADE_THRESHOLD_SIZE_EXT, or GL_DISTANCE_ATTENUATION_EXT |
| |
| INVALID_VALUE is generated when values are out of range according to: |
| |
| <pname> valid range |
| -------- ----------- |
| GL_POINT_SIZE_MIN_EXT >= 0 |
| GL_POINT_SIZE_MAX_EXT >= 0 |
| GL_POINT_FADE_THRESHOLD_SIZE_EXT >= 0 |
| |
| Issues |
| ------ |
| - should we generate INVALID_VALUE or just clamp? |
| |
| New State |
| |
| Get Value Get Command Type Initial Value Attribute |
| --------- ----------- ---- --------- --------- |
| GL_POINT_SIZE_MIN_EXT GetFloatv R 0 point |
| GL_POINT_SIZE_MAX_EXT GetFloatv R M point |
| GL_POINT_FADE_THRESHOLD_SIZE_EXT GetFloatv R 1 point |
| GL_DISTANCE_ATTENUATION_EXT GetFloatv 3xR (1,0,0) point |
| |
| M is the largest available point size. |
| |
| New Implementation Dependent State |
| |
| None |
| |
| Backwards Compatibility |
| |
| This extension replaces SGIS_point_parameters. The procedures, tokens, |
| and name strings now refer to EXT instead of SGIS. Enumerant values are |
| unchanged. SGI implementations which previously provided this |
| functionality should support both forms of the extension. |
| |
| EXT_point_parameters was promoted to ARB_point_parameters on June |
| 20, 2000. The EXT version is now considered obsolete. |
| |
| Revision History |
| |
| * 1.8 (September 23, 2010) pbrown - add "const" qualifier to <params> |
| argument to PointParameterfvARB. |
| |
| * 1.7 (March 12, 2002) - added GLX protocol, reverse engineered from |
| SGI's GLX implementation. |
| |
| * 1.6 (August 21, 1997) - promoted from SGIS to EXT. Made the |
| dependency on SGIS_multisample optional. |