15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    SGIS_detail_texture
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_SGIS_detail_texture
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciVersion
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    $Date: 1995/07/09 06:48:46 $ $Revision: 1.31 $
125bd8deadSopenharmony_ci
135bd8deadSopenharmony_ciNumber
145bd8deadSopenharmony_ci
155bd8deadSopenharmony_ci    21
165bd8deadSopenharmony_ci
175bd8deadSopenharmony_ciDependencies
185bd8deadSopenharmony_ci
195bd8deadSopenharmony_ci    EXT_texture is required
205bd8deadSopenharmony_ci    EXT_subtexture affects the definition of this extension
215bd8deadSopenharmony_ci    EXT_copy_texture affects the definition of this extension
225bd8deadSopenharmony_ci    EXT_texture_object affects the definition of this extension
235bd8deadSopenharmony_ci
245bd8deadSopenharmony_ciOverview
255bd8deadSopenharmony_ci
265bd8deadSopenharmony_ci    This extension introduces texture magnification filters that blend
275bd8deadSopenharmony_ci    between the level 0 image and a separately defined "detail" image.
285bd8deadSopenharmony_ci    The detail image represents the characteristics of the high frequency
295bd8deadSopenharmony_ci    subband image above the band-limited level 0 image.  The detail image is
305bd8deadSopenharmony_ci    typically a rectangular portion of the subband image which is modified
315bd8deadSopenharmony_ci    so that it can be repeated without discontinuities along its edges.
325bd8deadSopenharmony_ci    Detail blending can be enabled for all color channels, for the alpha
335bd8deadSopenharmony_ci    channel only, or for the red, green, and blue channels only.  It is
345bd8deadSopenharmony_ci    available only for 2D textures.
355bd8deadSopenharmony_ci
365bd8deadSopenharmony_ci    WARNING - Silicon Graphics has filed for patent protection for some
375bd8deadSopenharmony_ci	      of the techniques described in this extension document.
385bd8deadSopenharmony_ci
395bd8deadSopenharmony_ciIssues
405bd8deadSopenharmony_ci
415bd8deadSopenharmony_ci    *	Should detail textures be supported in 1D?  3D?  (Currently
425bd8deadSopenharmony_ci	written to support 2D only)
435bd8deadSopenharmony_ci
445bd8deadSopenharmony_ci    *	Is there any need to support detail textures with NEAREST
455bd8deadSopenharmony_ci	or FILTER4 filtering?  (No)
465bd8deadSopenharmony_ci
475bd8deadSopenharmony_ci    *	How does detail texture interact with a texture whose
485bd8deadSopenharmony_ci	minimum LOD image is not layer zero?  (Handle this in the LOD
495bd8deadSopenharmony_ci	extension.)
505bd8deadSopenharmony_ci
515bd8deadSopenharmony_ci    *	Should six detail filters be defined, so that the MODE is part
525bd8deadSopenharmony_ci	of the filter name?  (LINEAR_ADD_DETAIL_SGIS,
535bd8deadSopenharmony_ci	LINEAR_ADD_DETAIL_ALPHA_SGIS, ...)  (No)
545bd8deadSopenharmony_ci
555bd8deadSopenharmony_ci    *	I have scaled and biased the detail texture value to the range [-1,1]
565bd8deadSopenharmony_ci	in this specification.	I believe that Iris GL scaled and biased to
575bd8deadSopenharmony_ci	[-0.5,0.5].  The [-1,1] range seems clearer to me, if it allows F()
585bd8deadSopenharmony_ci	to be limited to [0,1].  Is this acceptable?
595bd8deadSopenharmony_ci
605bd8deadSopenharmony_ci    *	Should detail texture objects and 2D texture objects be separate
615bd8deadSopenharmony_ci	sets, or should it be possible to use the same texture object both
625bd8deadSopenharmony_ci	as a detail texture and as a 2D texture?  (Keep them separate)
635bd8deadSopenharmony_ci
645bd8deadSopenharmony_ciNew Procedures and Functions
655bd8deadSopenharmony_ci
665bd8deadSopenharmony_ci    void DetailTexFuncSGIS(enum target,
675bd8deadSopenharmony_ci			   sizei n,
685bd8deadSopenharmony_ci			   const float* points);
695bd8deadSopenharmony_ci
705bd8deadSopenharmony_ci    void GetDetailTexFuncSGIS(enum target,
715bd8deadSopenharmony_ci			      float* points);
725bd8deadSopenharmony_ci
735bd8deadSopenharmony_ciNew Tokens
745bd8deadSopenharmony_ci
755bd8deadSopenharmony_ci    Accepted by the <target> parameters of GetTexImage,
765bd8deadSopenharmony_ci    GetTexLevelParameterfv, GetTexLevelParameteriv, GetTexParameterfv,
775bd8deadSopenharmony_ci    GetTexParameteriv, TexImage2D, TexParameterf, TexParameterfv,
785bd8deadSopenharmony_ci    TexParameteri, and TexParameteriv.	If the corresponding extensions are
795bd8deadSopenharmony_ci    supported, also accepted by the <target> parameters of TexSubImage2DEXT,
805bd8deadSopenharmony_ci    CopyTexImage2DEXT, CopyTexSubImage2DEXT, and BindTextureEXT:
815bd8deadSopenharmony_ci
825bd8deadSopenharmony_ci	DETAIL_TEXTURE_2D_SGIS
835bd8deadSopenharmony_ci
845bd8deadSopenharmony_ci    Accepted by the <pname> parameters of GetBooleanv, GetIntegerv,
855bd8deadSopenharmony_ci    GetFloatv, and GetDoublev:
865bd8deadSopenharmony_ci
875bd8deadSopenharmony_ci	DETAIL_TEXTURE_2D_BINDING_SGIS
885bd8deadSopenharmony_ci
895bd8deadSopenharmony_ci    Accepted by the <param> parameter of TexParameteri and TexParameterf,
905bd8deadSopenharmony_ci    and by the <params> parameter of TexParameteriv and TexParameterfv,
915bd8deadSopenharmony_ci    when their <pname> parameter is TEXTURE_MAG_FILTER:
925bd8deadSopenharmony_ci
935bd8deadSopenharmony_ci	LINEAR_DETAIL_SGIS
945bd8deadSopenharmony_ci	LINEAR_DETAIL_ALPHA_SGIS
955bd8deadSopenharmony_ci	LINEAR_DETAIL_COLOR_SGIS
965bd8deadSopenharmony_ci
975bd8deadSopenharmony_ci    Accepted by the <pname> parameter of TexParameteri, TexParameterf,
985bd8deadSopenharmony_ci    TexParameteriv, TexParameterfv, GetTexParameteriv, and GetTexParameterfv:
995bd8deadSopenharmony_ci
1005bd8deadSopenharmony_ci	DETAIL_TEXTURE_LEVEL_SGIS
1015bd8deadSopenharmony_ci	DETAIL_TEXTURE_MODE_SGIS
1025bd8deadSopenharmony_ci
1035bd8deadSopenharmony_ci    Accepted by the <pname> parameter of GetTexParameteriv and
1045bd8deadSopenharmony_ci    GetTexParameterfv:
1055bd8deadSopenharmony_ci
1065bd8deadSopenharmony_ci	DETAIL_TEXTURE_FUNC_POINTS_SGIS
1075bd8deadSopenharmony_ci
1085bd8deadSopenharmony_ciAdditions to Chapter 2 of the 1.0 Specification (OpenGL Operation)
1095bd8deadSopenharmony_ci
1105bd8deadSopenharmony_ci    None
1115bd8deadSopenharmony_ci
1125bd8deadSopenharmony_ciAdditions to Chapter 3 of the 1.0 Specification (Rasterization)
1135bd8deadSopenharmony_ci
1145bd8deadSopenharmony_ci    GL Specification Table 3.7 is updated as follows:
1155bd8deadSopenharmony_ci
1165bd8deadSopenharmony_ci	Name				Type	    Legal Values
1175bd8deadSopenharmony_ci	----				----	    ------------
1185bd8deadSopenharmony_ci	TEXTURE_WRAP_S			integer     CLAMP, REPEAT
1195bd8deadSopenharmony_ci	TEXTURE_WRAP_T			integer     CLAMP, REPEAT
1205bd8deadSopenharmony_ci	TEXTURE_WRAP_R_EXT		integer     CLAMP, REPEAT
1215bd8deadSopenharmony_ci	TEXTURE_MIN_FILTER		integer     NEAREST, LINEAR,
1225bd8deadSopenharmony_ci						    NEAREST_MIPMAP_NEAREST,
1235bd8deadSopenharmony_ci						    NEAREST_MIPMAP_LINEAR,
1245bd8deadSopenharmony_ci						    LINEAR_MIPMAP_NEAREST,
1255bd8deadSopenharmony_ci						    LINEAR_MIPMAP_LINEAR,
1265bd8deadSopenharmony_ci						    FILTER4_SGIS
1275bd8deadSopenharmony_ci	TEXTURE_MAG_FILTER		integer     NEAREST, LINEAR,
1285bd8deadSopenharmony_ci						    FILTER4_SGIS,
1295bd8deadSopenharmony_ci						    LINEAR_DETAIL_SGIS,
1305bd8deadSopenharmony_ci						    LINEAR_DETAIL_ALPHA_SGIS,
1315bd8deadSopenharmony_ci						    LINEAR_DETAIL_COLOR_SGIS
1325bd8deadSopenharmony_ci	TEXTURE_BORDER_COLOR		4 floats    any 4 values in [0,1]
1335bd8deadSopenharmony_ci	DETAIL_TEXTURE_LEVEL_SGIS	integer     any non-positive integer
1345bd8deadSopenharmony_ci	DETAIL_TEXTURE_MODE_SGIS	integer     ADD, MODULATE
1355bd8deadSopenharmony_ci
1365bd8deadSopenharmony_ci	Table 3.7: Texture parameters and their values.
1375bd8deadSopenharmony_ci
1385bd8deadSopenharmony_ci    3.8.2.1 Texture magnification with detail
1395bd8deadSopenharmony_ci
1405bd8deadSopenharmony_ci    Three additional texture magnification filters are defined for texture
1415bd8deadSopenharmony_ci    magnification.  These values, which are assigned to TEXTURE_MAG_FILTER,
1425bd8deadSopenharmony_ci    are LINEAR_DETAIL_SGIS, LINEAR_DETAIL_ALPHA_SGIS, and
1435bd8deadSopenharmony_ci    LINEAR_DETAIL_COLOR_SGIS.  All three filters sample the level zero
1445bd8deadSopenharmony_ci    texture array exactly as it would be sampled with filter mode LINEAR.
1455bd8deadSopenharmony_ci    All three also sample the level zero texture array of a second
1465bd8deadSopenharmony_ci    texture, known as the detail texture, when three conditions are met.
1475bd8deadSopenharmony_ci    The detail texture corresponding to texture TEXTURE_2D is
1485bd8deadSopenharmony_ci    DETAIL_TEXTURE_2D_SGIS.  The conditions are:
1495bd8deadSopenharmony_ci
1505bd8deadSopenharmony_ci	1.  The active texture must be TEXTURE_2D.
1515bd8deadSopenharmony_ci
1525bd8deadSopenharmony_ci	2.  The internal formats of TEXTURE_2D and DETAIL_TEXTURE_2D_SGIS
1535bd8deadSopenharmony_ci	    must have been specified identically.
1545bd8deadSopenharmony_ci
1555bd8deadSopenharmony_ci	3.  The level 0 array of DETAIL_TEXTURE_2D_SGIS must have nonzero width
1565bd8deadSopenharmony_ci	    and height.
1575bd8deadSopenharmony_ci
1585bd8deadSopenharmony_ci    If these conditions are not met, it is as though the magnification
1595bd8deadSopenharmony_ci    texture filter was LINEAR.	(Although querying the magnification filter
1605bd8deadSopenharmony_ci    value will return the value as specified.)	If they are met, the level
1615bd8deadSopenharmony_ci    zero array of the detail texture is also linearly sampled, using the
1625bd8deadSopenharmony_ci    following arithmetic:
1635bd8deadSopenharmony_ci
1645bd8deadSopenharmony_ci	n = log base 2 of the width of the level zero array of TEXTURE_2D
1655bd8deadSopenharmony_ci	m = log base 2 of the height of the level zero array of TEXTURE_2D
1665bd8deadSopenharmony_ci	N = log base 2 of the width of DETAIL_TEXTURE_2D_SGIS
1675bd8deadSopenharmony_ci	M = log base 2 of the height of DETAIL_TEXTURE_2D_SGIS
1685bd8deadSopenharmony_ci	L = DETAIL_TEXTURE_LEVEL_SGIS value of TEXTURE_2D
1695bd8deadSopenharmony_ci
1705bd8deadSopenharmony_ci	u = s * 2**(n-L)
1715bd8deadSopenharmony_ci	v = t * 2**(m-L)
1725bd8deadSopenharmony_ci
1735bd8deadSopenharmony_ci	i0 = floor(u - 1/2) mod 2**N
1745bd8deadSopenharmony_ci	j0 = floor(v - 1/2) mod 2**M
1755bd8deadSopenharmony_ci
1765bd8deadSopenharmony_ci	i1 = (i0 + 1) mod 2**N
1775bd8deadSopenharmony_ci	j1 = (j0 + 1) mod 2**M
1785bd8deadSopenharmony_ci
1795bd8deadSopenharmony_ci	A = frac(u - 1/2)
1805bd8deadSopenharmony_ci	B = frac(v - 1/2)
1815bd8deadSopenharmony_ci
1825bd8deadSopenharmony_ci	Tdetail = (1-A) * (1-B) * detail[i0,j0] +
1835bd8deadSopenharmony_ci		    A	* (1-B) * detail[i1,j0] +
1845bd8deadSopenharmony_ci		  (1-A) *   B	* detail[i0,j1] +
1855bd8deadSopenharmony_ci		    A	*   B	* detail[i1,j1]
1865bd8deadSopenharmony_ci
1875bd8deadSopenharmony_ci    Note that magnification corresponds to negative values of level-of-detail
1885bd8deadSopenharmony_ci    and minification corresponds to positive values.  Hence L, the value of the
1895bd8deadSopenharmony_ci    DETAIL_TEXTURE_LEVEL_SGIS parameter of TEXTURE_2D, must be negative.  The
1905bd8deadSopenharmony_ci    absolute value of L can be thought of as the number of levels that
1915bd8deadSopenharmony_ci    separate the level 0 image of TEXTURE_2D and the image of
1925bd8deadSopenharmony_ci    DETAIL_TEXTURE_2D, which is replicated as necessary to fill the appropriate
1935bd8deadSopenharmony_ci    number of texels.  For example, if L is -2, the detail texture image is
1945bd8deadSopenharmony_ci    replicated as necessary in x and y to form a single image whose dimensions
1955bd8deadSopenharmony_ci    are four times larger than the level zero array of TEXTURE_2D.
1965bd8deadSopenharmony_ci
1975bd8deadSopenharmony_ci    The texture value computed from the primary texture (Ttexture) and
1985bd8deadSopenharmony_ci    the value computed from the detail texture (Tdetail) are combined
1995bd8deadSopenharmony_ci    in one of two ways to compute the final texture value (T).	The
2005bd8deadSopenharmony_ci    values of Ttexture, Tdetail, and T are treated as though they range
2015bd8deadSopenharmony_ci    from 0.0 through 1.0 in these equations.
2025bd8deadSopenharmony_ci
2035bd8deadSopenharmony_ci    If DETAIL_TEXTURE_MODE_SGIS of TEXTURE_2D is ADD, then
2045bd8deadSopenharmony_ci
2055bd8deadSopenharmony_ci	T' = Ttexture + F(LOD) * (2*Tdetail-1)
2065bd8deadSopenharmony_ci
2075bd8deadSopenharmony_ci	     / 0      T' < 0
2085bd8deadSopenharmony_ci	T = <  T'     0 <= T' <= 1
2095bd8deadSopenharmony_ci	     \ 1      T' > 1
2105bd8deadSopenharmony_ci
2115bd8deadSopenharmony_ci    where F is a function of the level-of-detail parameter LOD, which is
2125bd8deadSopenharmony_ci    represented by the Greek character lambda in the GL specification.	In
2135bd8deadSopenharmony_ci    effect, the detail texture is scaled and biased so that its range is
2145bd8deadSopenharmony_ci    [-1,1].  The resulting signed value is scaled by a function of LOD,
2155bd8deadSopenharmony_ci    added to the base texture, and clamped to [0,1].
2165bd8deadSopenharmony_ci
2175bd8deadSopenharmony_ci    If DETAIL_TEXTURE_MODE_SGIS or TEXTURE_2D is MODULATE, then
2185bd8deadSopenharmony_ci
2195bd8deadSopenharmony_ci	T' = Ttexture * (1 + F(LOD) * (2*Tdetail-1))
2205bd8deadSopenharmony_ci
2215bd8deadSopenharmony_ci	     / 0      T' < 0
2225bd8deadSopenharmony_ci	T = <  T'     0 <= T' <= 1
2235bd8deadSopenharmony_ci	     \ 1      T' > 1
2245bd8deadSopenharmony_ci
2255bd8deadSopenharmony_ci    Here again the detail texture is scaled and biased so that its range
2265bd8deadSopenharmony_ci    is [-1,1].	The resulting signed value is scaled by a function of LOD,
2275bd8deadSopenharmony_ci    and biased by 1.  This result scales the base texture, which is then
2285bd8deadSopenharmony_ci    clamped to [0,1].
2295bd8deadSopenharmony_ci
2305bd8deadSopenharmony_ci    The function F of level-of-detail parameter LOD is specified by calling
2315bd8deadSopenharmony_ci    DetailTexFuncSGIS with <target> set to TEXTURE_2D, <points> pointing at
2325bd8deadSopenharmony_ci    an array of pairs of floating point values, and <n> set to the number
2335bd8deadSopenharmony_ci    of value pairs in <points>.  The first value of each value pair in
2345bd8deadSopenharmony_ci    <points> specifies a value of LOD, and the second value of each value
2355bd8deadSopenharmony_ci    pair specifies the corresponding function value.  The order in which
2365bd8deadSopenharmony_ci    the points are specified is not significant.  The <n> value pairs in
2375bd8deadSopenharmony_ci    <points> completely specify the function, replacing any previous
2385bd8deadSopenharmony_ci    specification that may have existed.  Since negative values of LOD
2395bd8deadSopenharmony_ci    correspond to magnification and positive values correspond to
2405bd8deadSopenharmony_ci    minification, the points should have negative values for LOD (though it
2415bd8deadSopenharmony_ci    is not an error to specify positive values).
2425bd8deadSopenharmony_ci
2435bd8deadSopenharmony_ci    Function F is evaluated by sorting the value pairs specified by
2445bd8deadSopenharmony_ci    DetailTexFuncSGIS by LOD value, then fitting a curve through these
2455bd8deadSopenharmony_ci    points.  This curve may be linear between adjacent points, or it may be
2465bd8deadSopenharmony_ci    smoothed, but it will pass exactly through the points, limited only by
2475bd8deadSopenharmony_ci    the resolution of the implementation.  The value pair with the lowest
2485bd8deadSopenharmony_ci    LOD value specifies the function value F for all values of LOD less than
2495bd8deadSopenharmony_ci    or equal to that pair's LOD.  Likewise, the value pair with the greatest
2505bd8deadSopenharmony_ci    LOD value specifies the function value F for all values of LOD greater
2515bd8deadSopenharmony_ci    than or equal to that pair's LOD.  F is undefined if two or more value
2525bd8deadSopenharmony_ci    pairs have the same LOD value.
2535bd8deadSopenharmony_ci
2545bd8deadSopenharmony_ci    If the texture magnification filter is LINEAR_DETAIL_SGIS, then both
2555bd8deadSopenharmony_ci    the color and the alpha components of T are computed as described
2565bd8deadSopenharmony_ci    in the equations above.  If the filter is LINEAR_DETAIL_COLOR_SGIS,
2575bd8deadSopenharmony_ci    then all components of T other than alpha are computed as described
2585bd8deadSopenharmony_ci    above, and the alpha component of T is computed as if the texture
2595bd8deadSopenharmony_ci    magnification filter were LINEAR.  Finally, if the filter is
2605bd8deadSopenharmony_ci    LINEAR_DETAIL_ALPHA_SGIS, the alpha component of T is computed as
2615bd8deadSopenharmony_ci    described in the equations above, and all other components of T
2625bd8deadSopenharmony_ci    are computed as if the texture magnification filter were LINEAR.
2635bd8deadSopenharmony_ci
2645bd8deadSopenharmony_ci    All OpenGL texture commands that accept a target value of TEXTURE_2D
2655bd8deadSopenharmony_ci    also accept the target value DETAIL_TEXTURE_2D_SGIS.  These commands
2665bd8deadSopenharmony_ci    operate on and return state of the detail texture just as they do
2675bd8deadSopenharmony_ci    of the 2-dimensional texture.
2685bd8deadSopenharmony_ci
2695bd8deadSopenharmony_ci    If EXT_texture_object is supported, detail texture objects can be
2705bd8deadSopenharmony_ci    created, operated on, and bound just as their 2D counterparts are.	The
2715bd8deadSopenharmony_ci    sets of detail textures and 2D textures are exclusive, however, so it
2725bd8deadSopenharmony_ci    is not possible to use a texture object both as a 2D texture and as
2735bd8deadSopenharmony_ci    a detail texture.  By default zero is bound to DETAIL_TEXTURE_2D_SGIS,
2745bd8deadSopenharmony_ci    just as zero is bound to TEXTURE_2D.
2755bd8deadSopenharmony_ci
2765bd8deadSopenharmony_ci    Specification of a detail texture
2775bd8deadSopenharmony_ci    ---------------------------------
2785bd8deadSopenharmony_ci
2795bd8deadSopenharmony_ci    A detail texture is specified by calling TexImage2D or CopyTexImage2DEXT
2805bd8deadSopenharmony_ci    with <target> set to DETAIL_TEXTURE_2D_SGIS, <level> set to 0, <border>
2815bd8deadSopenharmony_ci    set to 0, and the other parameters specified to generate the desired
2825bd8deadSopenharmony_ci    image.
2835bd8deadSopenharmony_ci
2845bd8deadSopenharmony_ci    Minification vs. Magnification
2855bd8deadSopenharmony_ci    ------------------------------
2865bd8deadSopenharmony_ci
2875bd8deadSopenharmony_ci    If the magnification filter is given by LINEAR_DETAIL_SGIS,
2885bd8deadSopenharmony_ci    LINEAR_DETAIL_ALPHA_SGIS, or LINEAR_DETAIL_COLOR_SGIS, and the
2895bd8deadSopenharmony_ci    minification filter is given by NEAREST_MIPMAP_NEAREST or
2905bd8deadSopenharmony_ci    LINEAR_MIPMAP_NEAREST, then c = 0.5.  The parameter c is used to
2915bd8deadSopenharmony_ci    determine whether minification or magnification filtering is done,
2925bd8deadSopenharmony_ci    as described in Section 3.8.2 of the GL Specification (Texture
2935bd8deadSopenharmony_ci    Magnification).
2945bd8deadSopenharmony_ci
2955bd8deadSopenharmony_ciAdditions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations
2965bd8deadSopenharmony_ciand the Framebuffer)
2975bd8deadSopenharmony_ci
2985bd8deadSopenharmony_ci    None
2995bd8deadSopenharmony_ci
3005bd8deadSopenharmony_ciAdditions to Chapter 5 of the 1.0 Specification (Special Functions)
3015bd8deadSopenharmony_ci
3025bd8deadSopenharmony_ci    GetDetailTexFuncSGIS is not included in display lists.
3035bd8deadSopenharmony_ci
3045bd8deadSopenharmony_ciAdditions to Chapter 6 of the 1.0 Specification (State and State Requests)
3055bd8deadSopenharmony_ci
3065bd8deadSopenharmony_ci    Although many of the parameter values of a detail texture have no
3075bd8deadSopenharmony_ci    effect on texture operation, they are maintained and may be queried.
3085bd8deadSopenharmony_ci    There is no value associated with the binding point
3095bd8deadSopenharmony_ci    DETAIL_TEXTURE_2D_SGIS, so it is not accepted as the <pname> parameter
3105bd8deadSopenharmony_ci    of GetBooleanv, GetIntegerv, GetFloatv, or GetDoublev.  The name of
3115bd8deadSopenharmony_ci    the detail texture that is bound to DETAIL_TEXTURE_2D_SGIS is queried
3125bd8deadSopenharmony_ci    by calling GetBooleanv, GetIntegerv, GetFloatv, or GetDoublev with
3135bd8deadSopenharmony_ci    <pname> set to DETAIL_TEXTURE_2D_BINDING_SGIS.  Zero is returned if
3145bd8deadSopenharmony_ci    no texture has been bound.
3155bd8deadSopenharmony_ci
3165bd8deadSopenharmony_ci    The number of points in the detail texture function specification of
3175bd8deadSopenharmony_ci    a texture is queried by calling GetTexParameteriv or GetTexParameterfv
3185bd8deadSopenharmony_ci    with <target> set to the target of the desired texture and <pname> set
3195bd8deadSopenharmony_ci    to DETAIL_TEXTURE_FUNC_POINTS_SGIS.  The function
3205bd8deadSopenharmony_ci    GetDetailTexFuncSGIS returns in <points> all of the points in the detail
3215bd8deadSopenharmony_ci    texture function of texture <target>.
3225bd8deadSopenharmony_ci
3235bd8deadSopenharmony_ciAdditions to the GLX Specification
3245bd8deadSopenharmony_ci
3255bd8deadSopenharmony_ci    None
3265bd8deadSopenharmony_ci
3275bd8deadSopenharmony_ciGLX Protocol
3285bd8deadSopenharmony_ci
3295bd8deadSopenharmony_ci    Two new GLX protocol commands are added.
3305bd8deadSopenharmony_ci
3315bd8deadSopenharmony_ci	 DetailTexFuncSGIS
3325bd8deadSopenharmony_ci	     2		 12+4*2*n	 rendering command length
3335bd8deadSopenharmony_ci	     2		 2051		 rendering command opcode
3345bd8deadSopenharmony_ci	     4		 ENUM		 target
3355bd8deadSopenharmony_ci	     4		 INT32		 n
3365bd8deadSopenharmony_ci	     4*2*n	 LISTofFLOAT	 points
3375bd8deadSopenharmony_ci
3385bd8deadSopenharmony_ci	 GetDetailTexFuncSGIS
3395bd8deadSopenharmony_ci	     1		 CARD8		 opcode (X assigned)
3405bd8deadSopenharmony_ci	     1		 17		 GLX opcode (glXVendorPrivateWithReply)
3415bd8deadSopenharmony_ci	     2		 4		 request length
3425bd8deadSopenharmony_ci	     4		 4096		 vendor specific opcode
3435bd8deadSopenharmony_ci	     4		 GLX_CONTEXT_TAG context tag
3445bd8deadSopenharmony_ci	     4		 ENUM		 target
3455bd8deadSopenharmony_ci	   =>
3465bd8deadSopenharmony_ci	     1		 1		 reply
3475bd8deadSopenharmony_ci	     1				 unused
3485bd8deadSopenharmony_ci	     2		 CARD16		 sequence number
3495bd8deadSopenharmony_ci	     4		 n		 reply length, m = n
3505bd8deadSopenharmony_ci	     4				 unused
3515bd8deadSopenharmony_ci	     4		 CARD32		 n
3525bd8deadSopenharmony_ci	     16				 unused
3535bd8deadSopenharmony_ci	     n*4	 LISTofFLOAT32	 points
3545bd8deadSopenharmony_ci
3555bd8deadSopenharmony_ci	 Note that n may be zero, indicating that a GL error occurred.
3565bd8deadSopenharmony_ci	 Otherwise n must be even and n >= 2.
3575bd8deadSopenharmony_ci
3585bd8deadSopenharmony_ciDependencies on EXT_texture
3595bd8deadSopenharmony_ci
3605bd8deadSopenharmony_ci    EXT_texture is required.
3615bd8deadSopenharmony_ci
3625bd8deadSopenharmony_ciDependencies on EXT_texture3D
3635bd8deadSopenharmony_ci
3645bd8deadSopenharmony_ci    None, because detail texture is not specified for 3D textures.  This
3655bd8deadSopenharmony_ci    extensions is designed to allow a subsequent extension to define 3D
3665bd8deadSopenharmony_ci    detail textures, however.
3675bd8deadSopenharmony_ci
3685bd8deadSopenharmony_ciDependencies on EXT_subtexture
3695bd8deadSopenharmony_ci
3705bd8deadSopenharmony_ci    If EXT_subtexture is not implemented, then the references to
3715bd8deadSopenharmony_ci    TexSubImage2DEXT and CopyTexSubImage2DEXT in this file are invalid,
3725bd8deadSopenharmony_ci    and should be ignored.
3735bd8deadSopenharmony_ci
3745bd8deadSopenharmony_ciDependencies on EXT_copy_texture
3755bd8deadSopenharmony_ci
3765bd8deadSopenharmony_ci    If EXT_copy_texture is not implemented, then the references to
3775bd8deadSopenharmony_ci    CopyTexImage2DEXT and CopyTexSubImage2DEXT in this file are invalid,
3785bd8deadSopenharmony_ci    and should be ignored.
3795bd8deadSopenharmony_ci
3805bd8deadSopenharmony_ciDependencies on EXT_texture_object
3815bd8deadSopenharmony_ci
3825bd8deadSopenharmony_ci    If EXT_texture_object is not implemented, then the references to
3835bd8deadSopenharmony_ci    BindTextureEXT are invalid, and should be ignored.
3845bd8deadSopenharmony_ci
3855bd8deadSopenharmony_ci    If EXT_texture_object is implemented, the state values named
3865bd8deadSopenharmony_ci
3875bd8deadSopenharmony_ci	DETAIL_TEXTURE_LEVEL_SGIS
3885bd8deadSopenharmony_ci	DETAIL_TEXTURE_MODE_SGIS
3895bd8deadSopenharmony_ci	DETAIL_TEXTURE_FUNC_POINTS_SGIS
3905bd8deadSopenharmony_ci	<DETAIL_TEXTURE_FUNC>
3915bd8deadSopenharmony_ci
3925bd8deadSopenharmony_ci    are added to the state vector of each texture object. When an attribute
3935bd8deadSopenharmony_ci    set that includes texture information is popped, the bindings and
3945bd8deadSopenharmony_ci    enables are first restored to their pushed values, then the bound
3955bd8deadSopenharmony_ci    textures have their detail parameters restored to their pushed values.
3965bd8deadSopenharmony_ci
3975bd8deadSopenharmony_ciErrors
3985bd8deadSopenharmony_ci
3995bd8deadSopenharmony_ci    INVALID_VALUE is generated if TexImage2D or CopyTexImage2DEXT
4005bd8deadSopenharmony_ci    parameter <target> is DETAIL_TEXTURE_2D_SGIS, and parameter <level>
4015bd8deadSopenharmony_ci    or parameter <border> is not zero.
4025bd8deadSopenharmony_ci
4035bd8deadSopenharmony_ci    INVALID_VALUE is generated if BindTextureEXT parameter <target> is
4045bd8deadSopenharmony_ci    DETAIL_TEXTURE_2D_SGIS, and parameter <texture> is not the name of a
4055bd8deadSopenharmony_ci    detail texture, the name of an as yet unbound texture, or zero.
4065bd8deadSopenharmony_ci
4075bd8deadSopenharmony_ci    INVALID_VALUE is generated if TexParameteri, TexParameterf,
4085bd8deadSopenharmony_ci    TexParameteriv, or TexParameterfv parameter <pname> is
4095bd8deadSopenharmony_ci    DETAIL_TEXTURE_MODE_SGIS, and parameter <param> is not ADD or MODULATE,
4105bd8deadSopenharmony_ci    or parameter <params> doesn't point to ADD or MODULATE.
4115bd8deadSopenharmony_ci
4125bd8deadSopenharmony_ci    INVALID_VALUE is generated if TexParameteri, TexParameterf,
4135bd8deadSopenharmony_ci    TexParameteriv, or TexParameterfv parameter <pname> is
4145bd8deadSopenharmony_ci    DETAIL_TEXTURE_LEVEL_SGIS, and parameter <param> is positive,
4155bd8deadSopenharmony_ci    or parameter <params> points to a positive value.
4165bd8deadSopenharmony_ci
4175bd8deadSopenharmony_ci    INVALID_ENUM is generated if DetailTexFuncSGIS or
4185bd8deadSopenharmony_ci    GetDetailTexFuncSGIS parameter <target> is not TEXTURE_2D.
4195bd8deadSopenharmony_ci
4205bd8deadSopenharmony_ci    INVALID_VALUE is generated if DetailTexFuncSGIS parameter <n> is
4215bd8deadSopenharmony_ci    negative.
4225bd8deadSopenharmony_ci
4235bd8deadSopenharmony_ci    INVALID_OPERATION is generated if DetailTexFuncSGIS or
4245bd8deadSopenharmony_ci    GetDetailTexFuncSGIS is executed between execution of Begin and the
4255bd8deadSopenharmony_ci    corresponding execution to End.
4265bd8deadSopenharmony_ci
4275bd8deadSopenharmony_ciNew State
4285bd8deadSopenharmony_ci
4295bd8deadSopenharmony_ci    Get Value				Get Command		Type		Initial Value	Attribute
4305bd8deadSopenharmony_ci    ---------				-----------		----		-------------	---------
4315bd8deadSopenharmony_ci    DETAIL_TEXTURE_2D_BINDING_SGIS	GetIntegerv		Z+		0		texture
4325bd8deadSopenharmony_ci    DETAIL_TEXTURE_LEVEL_SGIS		GetTexParameteriv	n x Z-		-4		texture
4335bd8deadSopenharmony_ci    DETAIL_TEXTURE_MODE_SGIS		GetTexParameteriv	n x Z2		ADD		texture
4345bd8deadSopenharmony_ci    DETAIL_TEXTURE_FUNC_POINTS_SGIS	GetTexParameteriv	n x Z+		2		texture
4355bd8deadSopenharmony_ci    <DETAIL_TEXTURE_FUNC>		GetDetailTexFuncSGIS	n x m x R	{0, 0}, {-4, 1} texture
4365bd8deadSopenharmony_ci
4375bd8deadSopenharmony_ciNew Implementation Dependent State
4385bd8deadSopenharmony_ci
4395bd8deadSopenharmony_ci    None
440