Name

    SGIS_sharpen_texture

Name Strings

    GL_SGIS_sharpen_texture

Version

    $Date: 1995/07/09 06:48:51 $ $Revision: 1.16 $

Number

    22

Dependencies

    EXT_texture is required
    EXT_texture3D affects the definition of this extension
    EXT_texture_object affects the definition of this extension

Overview

    This extension introduces texture magnification filters that sharpen
    the resulting image by extrapolating from the level 1 image to the
    level 0 image.  Sharpening can be enabled for all color channels, for
    the alpha channel only, or for the red, green, and blue channels only.

New Procedures and Functions

    void SharpenTexFuncSGIS(enum target,
			    sizei n,
			    const float* points);

    void GetSharpenTexFuncSGIS(enum target,
			       float* points);

New Tokens

    Accepted by the <param> parameter of TexParameteri and TexParameterf,
    and by the <params> parameter of TexParameteriv and TexParameterfv, when
    their <pname> parameter is TEXTURE_MAG_FILTER:

	LINEAR_SHARPEN_SGIS
	LINEAR_SHARPEN_ALPHA_SGIS
	LINEAR_SHARPEN_COLOR_SGIS

    Accepted by the <pname> parameter of GetTexParameteriv and
    GetTexParameterfv:

	SHARPEN_TEXTURE_FUNC_POINTS_SGIS

Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation)

    None

Additions to Chapter 3 of the 1.0 Specification (Rasterization)

    GL Specification Table 3.7 is updated as follows:

	Name				Type	    Legal Values
	----				----	    ------------
	TEXTURE_WRAP_S			integer     CLAMP, REPEAT
	TEXTURE_WRAP_T			integer     CLAMP, REPEAT
	TEXTURE_WRAP_R_EXT		integer     CLAMP, REPEAT
	TEXTURE_MIN_FILTER		integer     NEAREST, LINEAR,
						    NEAREST_MIPMAP_NEAREST,
						    NEAREST_MIPMAP_LINEAR,
						    LINEAR_MIPMAP_NEAREST,
						    LINEAR_MIPMAP_LINEAR,
						    FILTER4_SGIS
	TEXTURE_MAG_FILTER		integer     NEAREST, LINEAR,
						    FILTER4_SGIS,
						    LINEAR_DETAIL_SGIS,
						    LINEAR_DETAIL_ALPHA_SGIS,
						    LINEAR_DETAIL_COLOR_SGIS,
						    LINEAR_SHARPEN_SGIS,
						    LINEAR_SHARPEN_ALPHA_SGIS,
						    LINEAR_SHARPEN_COLOR_SGIS
	TEXTURE_BORDER_COLOR		4 floats    any 4 values in [0,1]
	DETAIL_TEXTURE_LEVEL_SGIS	integer     any non-negative integer
	DETAIL_TEXTURE_MODE_SGIS	integer     ADD, MODULATE

	Table 3.7: Texture parameters and their values.

    3.8.2.2 Texture magnification with sharpening

    Three additional texture magnification filters are defined for texture
    magnification.  These values, which are assigned to TEXTURE_MAG_FILTER,
    are LINEAR_SHARPEN_SGIS, LINEAR_SHARPEN_ALPHA_SGIS, and
    LINEAR_SHARPEN_COLOR_SGIS.	All three filters sample the level 0
    texture array exactly as it would be sampled with filter mode LINEAR.
    If texture levels 0 and 1 are "complete", as described in the Mipmapping
    portion of Section 3.8.1 (Texture Minification) of the GL Specification,
    the level 1 array of the texture is also linearly sampled, just as though
    mipmap minification was being performed with LOD (the level of detail
    parameter) valued near 1.0.  If levels 0 and 1 are not complete, it is
    as though the magnification texture filter was LINEAR.  (Although
    querying the magnification filter value will return the value as
    specified.)

    The texture value computed from the level 0 array (T0) and the
    value computed from the level one array (T1) are combined to compute
    the final texture value (T):

	T' = ((1 + F(LOD)) * T0) - (F(LOD) * T1)

	     / 0      T' < 0
	T = <  T'     0 <= T' <= 1
	     \ 1      T' > 1

    F is a function of the level-of-detail parameter LOD, which is
    represented by the Greek character lambda in the GL Specification.

    The function F of level-of-detail parameter LOD is specified by
    calling SharpenTexFuncSGIS with <target> set to TEXTURE_1D, TEXTURE_2D,
    or TEXTURE_3D_EXT, <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 LOD, and
    the second value of each value pair specifies the corresponding function
    value.  The order in which the points are specified is not significant.
    The <n> value pairs in <points> completely specify the function,
    replacing any previous specification that may have existed.  Since
    negative values of LOD correspond to magnification and positive values
    correspond to minification, the points should have negative values for
    LOD (though it is not an error to specify positive values).

    Function F is evaluated by sorting the value pairs specified by
    SharpenTexFuncSGIS by LOD value, then fitting a curve through these
    points.  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
    LOD value specifies the function value F for all values of LOD less than
    or equal to that pair's LOD.  Likewise, the value pair with the greatest
    LOD value specifies the function value F for all values of LOD greater
    than or equal to that pair's LOD.  F is undefined if two or more value
    pairs have the same LOD value.

    If the texture magnification filter is LINEAR_SHARPEN_SGIS, then both
    the color and the alpha components of T are computed as described
    in the equations above.  If the filter is LINEAR_SHARPEN_COLOR_SGIS,
    then all components of T other than alpha are computed as described
    above, and the alpha component of T is computed as if the texture
    magnification filter were LINEAR.  Finally, if the filter is
    LINEAR_SHARPEN_ALPHA_SGIS, the alpha component of T is computed as
    described in the equations above, and all other components of T
    are computed as if the texture magnification filter were LINEAR.

    Minification vs. Magnification
    ------------------------------

    If the magnification filter is given by LINEAR_SHARPEN_SGIS,
    LINEAR_SHARPEN_ALPHA_SGIS, or LINEAR_SHARPEN_COLOR_SGIS, and the
    minification filter is given by NEAREST_MIPMAP_NEAREST or
    LINEAR_MIPMAP_NEAREST, then c = 0.5.  The parameter c is used to
    determine whether minification or magnification filtering is done,
    as described in Section 3.8.2 of the GL Specification (Texture
    Magnification).

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)

    GetSharpenTexFuncSGIS is not included in display lists.

Additions to Chapter 6 of the 1.0 Specification (State and State Requests)

    The number of points in the sharpen texture function specification of
    a texture is queried by calling GetTexParameteriv or GetTexParameterfv
    with <target> set to the target of the desired texture and <pname> set
    to SHARPEN_TEXTURE_FUNC_POINTS_SGIS.  The function
    GetSharpenTexFuncSGIS returns in <points> all of the points in the
    sharpen texture function of texture <target>.

Additions to the GLX Specification

    None

GLX Protocol

    Two new GLX protocol commands are added.

	 SharpenTexFuncSGIS
	     2		 12+4*2*n	 rendering command length
	     2		 2052		 rendering command opcode
	     4		 ENUM		 target
	     4		 INT32		 n
	     4*2*n	 LISTofFLOAT	 points

	 GetSharpenTexFuncSGIS
	     1		 CARD8		 opcode (X assigned)
	     1		 17		 GLX opcode (glXVendorPrivateWithReply)
	     2		 4		 request length
	     4		 4097		 vendor specific opcode
	     4		 GLX_CONTEXT_TAG context tag
	     4		 ENUM		 target
	   =>
	     1		 1		 reply
	     1				 unused
	     2		 CARD16		 sequence number
	     4		 n		 reply length, m = n
	     4				 unused
	     4		 CARD32		 n
	     16				 unused
	     n*4	 LISTofFLOAT32	 points

	 Note that n may be zero, indicating that a GL error occurred.
	 Other n must be even and n >= 2.

Dependencies on EXT_texture

    EXT_texture is required.

Dependencies on EXT_texture3D

    If EXT_texture3D is not implemented, references in this specification
    to TEXTURE_3D_EXT are invalid, and should be ignored.

Dependencies on EXT_texture_object

    If EXT_texture_object is implemented, the state values named

	SHARPEN_TEXTURE_FUNC_POINTS_SGIS
	<SHARPEN_TEXTURE_FUNC>

    are added to the state vector of each texture object. When an attribute
    set that includes texture information is popped, the bindings and
    enables are first restored to their pushed values, then the bound
    textures have their sharpen parameters restored to their pushed values.

Errors

    INVALID_ENUM is generated if SharpenTexFuncSGIS or
    GetSharpenTexFuncSGIS parameter <target> is not TEXTURE_1D, TEXTURE_2D,
    or TEXTURE_3D_EXT.

    INVALID_VALUE is generated if SharpenTexFuncSGIS parameter <n> is
    negative.

    INVALID_OPERATION is generated if SharpenTexFuncSGIS or
    GetSharpenTexFuncSGIS is executed between execution of Begin and the
    corresponding execution to End.

New State

    Get Value				Get Command		Type		Initial Value	Attribute
    ---------				-----------		----		-------------	---------
    SHARPEN_TEXTURE_FUNC_POINTS_SGIS	GetTexParameteriv	n x Z+		2		texture
    <SHARPEN_TEXTURE_FUNC>		GetSharpenTexFuncSGIS	n x m x R	{0, 0}, {-4, 1} texture

New Implementation Dependent State

    None
