Name

	SGIX_shadow_ambient

Name Strings

	GL_SGIX_shadow_ambient

Version

	$Date: 1997/02/26 03:36:32 $ $Revision: 1.3 $

Number

	90

Dependencies

	None.

Overview

	This extension allows a value other than 0.0 to be returned by the
	SGIX_shadow operation in the case when the shadow test passes.
	With this extension any floating point value in the range [0.0,
	1.0] can be returned as the texture value when an object is in
	shadow.  This allows the (untextured) ambient lighting and direct
	shadowed lighting from a single light source to be computed in a
	single pass.
	
New Procedures and Functions

	None

New Tokens

	Accepted by the <pname> parameter of TexParameterf, TexParameteri,
	TexParameterfv, TexParameteriv, GetTexParameterfv, and
	GetTexParameteriv:

	SHADOW_AMBIENT_SGIX		0x80BF

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.8 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,
							LINEAR_CLIPMAP_LINEAR_SGIX
	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
	TEXTURE_MIN_LOD_SGIS		float		any value
	TEXTURE_MAX_LOD_SGIS		float		any value
	TEXTURE_BASE_LEVEL_SGIS		integer		any non-negative integer
	TEXTURE_MAX_LEVEL_SGIS		integer		any non-negative integer
	GENERATE_MIPMAP_SGIS		boolean		TRUE or FALSE
	TEXTURE_CLIPMAP_OFFSET_SGIX	2 floats	any 2 values
	SHADOW_AMBIENT_SGIX		float		any value

	Table 3.8: Texture parameters and their values.

	Notes:

	* A new texture parameter is defined which changes the sampled
	texture value when SGIX_shadow is used, and a pixel is determined
	to be in shadow.  In this case, the value of the
	SHADOW_AMBIENT_SGIX parameter is returned, instead of 0.0 .  When
	SHADOW_AMBIENT_SGIX is set, the <param> value is clamped to the
	range [0.0, 1.0].

Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations
and the Frame Buffer)

	None

Additions to Chapter 5 of the 1.0 Specification (Special Functions)

	None

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

	The shadow ambient value is queried by calling GetTexParameterfv
	with <pname> set to SHADOW_AMBIENT_SGIX.
	
Additions to the GLX Specification

	None

Errors

	None

New State

Get Value			Get Command		Type	Initial Value		Attribute
---------			-----------		----	-------------		---------
SHADOW_AMBIENT_SGIX		GetTexParameter[if]v	F	0.0			texture
	
New Implementation Dependent State

	None
