blob: 6e48e04aa495948f584161896bf18488bd38eb29 [file] [log] [blame]
Name Strings
$Date: 1999/04/02 22:52:37 $ $Revision: 1.6 $
OpenGL 1.0 is required.
The extension is written against the OpenGL 1.2.1 Specification.
SGIX_fog_offset affects the definition of this extension
This extension allows fragments to receive more or less fog than the
amount specified by the fog environment and the distance to the
fragment center, by scaling the fragment eye-coordinate distance
prior to fog computation.
This is particularly interesting for light point objects that punch
even through thick fog. Fog scale value is specified by setting the
FOG_SCALE_VALUE_SGIX scale parameter with glFog*. If scale <= 0, the
resulting operation is clamped to 0. If 0 < scale < 1, the object
appears brighter. If scale > 1, the object receives more fog. A
scale of 1 has no effect. Fog scale can be enabled or disabled with
the FOG_SCALE_SGIX parameter.
* Should specifying FOG_SCALE_VALUE_SGIX < 0 generate an error?
* Should the correct combined equation be (z * scale) - offset, or
(z - offset) * scale? Performer uses the latter, but the former is
more consistent with other OpenGL scale and bias operations.
New Procedures and Functions
New Tokens
Accepted by the <cap> parameter of Enable, Disable, and IsEnabled
Accepted by the <pname> parameter of GetBooleanv, GetIntegerv,
GetFloatv, and GetDoublev, and by the <pname> parameter of Fogiv and
Additions to Chapter 2 of the 1.2.1 Specification (OpenGL Operation)
Additions to Chapter 3 of the 1.2.1 Specification (Rasterization)
- (3.10, p. 139) Change the second paragraph to:
"This factor f is computed according to one of three equations:
f = exp(-d * f_z), (3.24)
f = exp(-(d * f_z)^2), or (3.25)
e - f_z
f = ------- (3.26)
e - s
f_z is a function of the eye-coordinate distance z from the eye,
(0,0,0,1) in eye coordinates, to the fragment center. If
FOG_SCALE_SGIX is enabled, then f_z = z * f_s; otherwise, f_z =
z. If f_z < 0, then it is clamped to zero prior to fog
"The equation, along with the parameters d, e, s, and f_s, is
specified with..."
Change the end of the third paragraph to:
"...If <pname> is FOG_DENSITY, FOG_START, FOG_END, or
FOG_SCALE_SGIX, then <param> is or <params> points to a value
that is d, s, e, or f_s, respectively. If d is specified as less
than zero, the error INVALID_VALUE is generated."
Change the final paragraph on page 140 to:
"The state required for fog consists of a three valued integer
to select the fog equation, four floating-point values d, e, s,
and f_s, an RGBA fog color and a fog color index, a single bit
to indicate whether or not fog is enabled, and a single bit to
indicate whether or not fog scaling is enabled. In the initial
state, fog is disabled, fog scaling is disabled, FOG_MODE is
EXP, d = 1.0, e = 1.0, s = 0.0, and f_s = 1.0; C_f = (0,0,0,0)
and i_f = 0."
Additions to Chapter 4 of the 1.2.1 Specification (Per-Fragment Operations
and the Framebuffer)
Additions to Chapter 5 of the 1.2.1 Specification (Special Functions)
Additions to Chapter 6 of the 1.2.1 Specification (State and State Requests)
Additions to the GLX Specification
Dependencies on SGIX_fog_offset
If SGIX_fog_offset is supported, then both scale and offset can be
applied to z prior to fog computation. Combining the new language of
the two specifications is straightforward except at the end of the
second paragraph of section 3.10, which should read:
"...f_z is a function of the eye-coordinate distance z from the
eye, (0,0,0,1) in eye coordinates, to the fragment center. If
both FOG_OFFSET_SGIX and FOG_SCALE_SGIX are enabled, then f_z =
z * f_s - f_o. If only FOG_OFFSET_SGIX is enabled, then f_z = z
- f_o. If only FOG_SCALE_SGIX is enabled, then f_z = z * f_s.
Otherwise, f_z = z. If f_z < 0, then it is clamped to zero prior
to fog computation."
New State
(table 6.8, p. 198)
Get Value Type Get Command Initial Value Description Sec. Attribute
--------- ---- ----------- ------------- ----------- ---- ---------
FOG_SCALE_SGIX B IsEnabled False True if fog scaling is enabled 3.10 fog
FOG_SCALE_VALUE_SGIX R GetFloatv 1.0 Fog scaling factor 3.10 fog
New Implementation Dependent State