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 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 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 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 parameter of Fogf and Fogi, and by the parameter of Fogiv and Fogfv, when their parameter is FOG_MODE, and by the parameter of GetDoublev and GetFloatv: FOG_FUNC_SGIS = 0x812A Accepted by the 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 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 pointing at an array of pairs of floating point values, and set to the number of value pairs in . The first value of each value pair in 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 value pairs in 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 is FOG_MODE, and is, or 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 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 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 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