blob: 15c2f8d11a35b3a6995d07a11f2b8597ada3f2f3 [file] [log] [blame]
Name
SGIS_fog_function
Name Strings
GL_SGIS_fog_function
Version
Last Modified Date: March 30, 1999
Author Revision: $Header: //depot/main/doc/registry/extensions/SGI/fog_func.spec#13 $
Number
64
Dependencies
OpenGL 1.1 is required. Written against the OpenGL 1.2 Specification.
Overview
This extension allows to define application-specific fog blend-factor
function. Function is defined by the set of the "control" points and
should be monotonic. Each control point represented as a pair of the
eye-space distance value and corresponding value of the fog blending
factor. The minimum number of control points is one. The maximum
number is implementation dependent.
New Procedures and Functions
void FogFuncSGIS(sizei n, const float* points);
void GetFogFuncSGIS(float *points);
Issues
- The Bali team introduced 2 new features in this spec. 1) the
GetFogFuncSGIS procedure that allows to querry automatically
the current number of contol points. It is much nicer than
the previous spec that was using gets. 2) If the user give
fog blending factor ouside the [0.0, 1.0] range it should not
generate an error but the valuse should be calmed instead.
However, this extension has already been shipped and it is a
problem. We would like to see this extension to be an EXT to
be able to do the right thing.
- If the above changes are not acceptable, the sentence "All the points
of the current fog factor function are queried by calling
GetFogFuncSGIS." in section "Additions to Chapter 6 of the 1.2
Specification (State and State Requests)" should be replaced by:
"All the points of the current fog factor function are queried by
calling GetFloatv or GetDoublev with <pname> set to FOG_FUNC_SGIS."
Also, the sentence "INVALID_OPERATION is generated if GetFogFuncSGIS
is executed between execution of Begin and the corresponding
execution to End. " in the "Errors" section should be ignored.
The sentences "The first value of each value pair in <points>
specifies a value of eye-space distance (should be not negative),
and the second value of each value pair specifies the corresponding
value of the fog blend factor. The fog blend factor values are
clamped to [0.0, 1.0]." should be replced by "The first
value of each value pair in <points> specifies a value of eye-space
distance (should be not negative), and the second value of each value pair
specifies the corresponding value of the fog blend factor (should be in
[0.0, 1.0] range)." Also "INVALID_VALUE is generated if fog factor
value out of [0.0, 1.0] range." should be added to the error section.
New Tokens
Accepted by the <param> parameter of Fogf and Fogi, and by the <params>
parameter of Fogiv and Fogfv, when their <pname> parameter is FOG_MODE,
and by the <pname> parameter of GetDoublev and GetFloatv:
FOG_FUNC_SGIS = 0x812A
Accepted by the <pname> parameter of GetBooleanv, GetDoublev,
GetIntegerv, and GetFloatv:
FOG_FUNC_POINTS_SGIS = 0x812B
MAX_FOG_FUNC_POINTS_SGIS = 0x812C
May be returned by GetBooleanv, GetDoublev, GetIntegerv, and GetFloatv
when their <pname> parameter is FOG_MODE:
FOG_FUNC_SGIS = 0x812A
Additions to Chapter 2 of the 1.2 Specification (OpenGL Operation)
None
Additions to Chapter 3 of the 1.2 Specification (Rasterization)
3.10 Fog
The function for computing blending factor may be specified by calling
FogFuncSGIS with <points> pointing at an array of pairs of floating point
values, and <n> set to the number of value pairs in <points>. The first
value of each value pair in <points> specifies a value of eye-space
distance (should be not negative), and the second value of each value pair
specifies the corresponding value of the fog blend factor. The fog
blend factor values are clamped to [0.0, 1.0]. The order in which
the points are specified is significant (if there is more then one
point) based on the following requirements: 1. distance value of
each point is not smaller then the distance value of its
predecessor; 2. fog factor value of each point is not bigger then
the fog factor value of its predecessor. The <n> value
pairs in <points> completely specify the function, replacing any previous
specification that may have existed. At least one control point should be
specified. The maximum number of control points is implementation dependent
and may be inquired by Get commands. Initially fog function defined by a
single point (0.0, 1.0).
Fog factor function is evaluated by fitting a curve through the points
specified by FogFuncSGIS. This curve may be linear between adjacent points,
or it may be smoothed, but it will pass exactly through the points, limited
only by the resolution of the implementation. The value pair with the
lowest distance value specifies the fog function value for all values of
distance less than or equal to that pair's distance. Likewise, the value
pair with the greatest distance value specifies the function value for
all values of distance greater than or equal to that pair's distance.
If <pname> is FOG_MODE, and <param> is, or <params> point to an
integer FOG_FUNC_SGIS then application specified fog factor function is
selected for the fog calculation.
Additions to Chapter 4 of the 1.2 Specification (Per-Fragment Operations
and the Framebuffer)
None
Additions to Chapter 5 of the 1.2 Specification (Special Functions)
None
Additions to Chapter 6 of the 1.2 Specification (State and State Requests)
The max allowed number of points in the fog factor function specification
of a fog is queried by calling GetBooleanv, GetIntegerv, GetFloatv,
and GetDoublev with <pname> set to MAX_FOG_FUNC_POINTS_SGIS.
The number of points in the current fog factor function is queried by
calling GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev with <pname>
set to FOG_FUNC_POINTS_SGIS. All the points of the current fog
factor function are queried by calling GetFogFuncSGIS. Points are
returned in the same format as they are specified in the
glFogFuncSGIS function.
Additions to the GLX Specification
None
Errors
INVALID_VALUE is generated if FogFuncSGIS parameter <n> is
negative.
INVALID_VALUE is generated if eye spce-distance is less then zero.
INVALID_VALUE is generated if specified control points don't confirm
with order requirements.
INVALID_OPERATION is generated if FogFuncSGIS is executed between
execution of Begin and the corresponding execution to End.
INVALID_OPERATION is generated if GetFogFuncSGIS is executed
between execution of Begin and the corresponding execution to
End.
New State
Get Value Get Command Type Initial Value Attribute
--------- ----------- ---- ------------- ---------
MAX_FOG_FUNC_POINTS_SGIS GetIntegerv Z+ XXX
FOG_FUNC_POINTS_SGIS GetIntegerv Z+ 1 fog
FOG_FUNC_SGIS GetFloatv 2 x n x R+ (0.0, 1.0)
New Implementation Dependent State
None